From a461266013042740f494b673284f9bbb7c741719 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Sat, 12 Feb 2022 22:55:10 -0500 Subject: [PATCH 01/22] Move tests outside of the main package. Source and tests should be distinct. --- {talib => tests}/test_abstract.py | 0 {talib => tests}/test_data.py | 0 {talib => tests}/test_func.py | 0 {talib => tests}/test_pandas.py | 0 {talib => tests}/test_polars.py | 0 {talib => tests}/test_stream.py | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {talib => tests}/test_abstract.py (100%) rename {talib => tests}/test_data.py (100%) rename {talib => tests}/test_func.py (100%) rename {talib => tests}/test_pandas.py (100%) rename {talib => tests}/test_polars.py (100%) rename {talib => tests}/test_stream.py (100%) diff --git a/talib/test_abstract.py b/tests/test_abstract.py similarity index 100% rename from talib/test_abstract.py rename to tests/test_abstract.py diff --git a/talib/test_data.py b/tests/test_data.py similarity index 100% rename from talib/test_data.py rename to tests/test_data.py diff --git a/talib/test_func.py b/tests/test_func.py similarity index 100% rename from talib/test_func.py rename to tests/test_func.py diff --git a/talib/test_pandas.py b/tests/test_pandas.py similarity index 100% rename from talib/test_pandas.py rename to tests/test_pandas.py diff --git a/talib/test_polars.py b/tests/test_polars.py similarity index 100% rename from talib/test_polars.py rename to tests/test_polars.py diff --git a/talib/test_stream.py b/tests/test_stream.py similarity index 100% rename from talib/test_stream.py rename to tests/test_stream.py From 68c9180d8de86273c9f7f2d56de62d010f9d356a Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Sat, 12 Feb 2022 22:56:14 -0500 Subject: [PATCH 02/22] Remove an overly aggressive .gitignore rule. This rule is blocking files in .github for example. --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 49ddb78e1..a622a0945 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ docs/.tadoc.org.html build/ dist/ *.so -.* *~ *.egg-info/ From 99359d5ca7976befc75889303a35f2e4673e32d2 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Sat, 12 Feb 2022 22:57:07 -0500 Subject: [PATCH 03/22] Add binary package builds for py3.7+. --- .github/workflows/release.yml | 85 +++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..a26ac8ece --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,85 @@ +on: + workflow_dispatch: + push: + tags: + - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 + +name: Creating release + +env: + CIBW_TEST_EXTRAS: test + CIBW_TEST_COMMAND: "pytest {project}/tests" + CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" + CIBW_ARCHS_MACOS: "x86_64 universal2" + CIBW_BEFORE_BUILD_LINUX: "yum install -y gcc && curl -sL http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz && tar -zxvf ta-lib-0.4.0-src.tar.gz && rm ta-lib-0.4.0-src.tar.gz && cd ta-lib && ./configure && make && make install" + CIBW_BEFORE_BUILD_MACOS: "brew install ta-lib" + CIBW_BEFORE_BUILD_WINDOWS: "curl -sL http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip -o $HOME/ta-lib.zip --create-dirs && 7z x $HOME/ta-lib.zip -o/c/ta-lib && mv /c/ta-lib/ta-lib/* /c/ta-lib/ && rm -rf /c/ta-lib/ta-lib && cd /c/ta-lib/c/make/cdr/win32/msvc && nmake" + + +jobs: + # Build & test simple source release before wasting hours building and + # testing the binary build matrix. + sdist: + name: Creating source release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Setting up Python + uses: actions/setup-python@v2 + with: + python-version: 3.8 + + - name: Installing python build dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade setuptools + + - name: Building source distribution + run: | + pip install -e ".[release]" + python setup.py sdist + + - name: Ensuring documentation builds + run: | + cd docs && make clean && make html + + - uses: actions/upload-artifact@v2 + with: + path: dist/*.tar.gz + + build_wheels: + needs: [sdist] + name: "[${{ strategy.job-index }}/${{ strategy.job-total }}] py${{ matrix.py }} on ${{ matrix.os }}" + runs-on: ${{ matrix.os }} + strategy: + fail-fast: true + matrix: + os: [ubuntu-20.04, windows-2019, macos-10.15] + # cp - CPython + # pp - PyPy + py: [cp37", "cp38", "cp39", "cp310", "pp37"] + + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-python@v2 + name: Setting up Python + with: + python-version: '3.8' + + - name: Set up QEMU + if: runner.os == 'Linux' + uses: docker/setup-qemu-action@v1 + with: + platforms: all + + - name: Build & test wheels + uses: pypa/cibuildwheel@v2.2.2 + env: + CIBW_ARCHS_LINUX: auto aarch64 ppc64le + CIBW_BUILD: "${{ matrix.py }}-*" + + - uses: actions/upload-artifact@v2 + with: + path: ./wheelhouse/*.whl \ No newline at end of file From 793394048af5a86dff0d50c6e0cb684a813b6861 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Sat, 12 Feb 2022 23:10:57 -0500 Subject: [PATCH 04/22] Speedup tests by only compiling ta-lib once. It's stored as an artifact and passed into the test matrix jobs. --- .github/workflows/tests.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f150879c0..c067c716c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,11 +7,25 @@ on: branches: [ master ] jobs: + build_talib: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Build talib + run: | + ./tools/build_talib_from_source.bash ${{ github.workspace }}/dependencies + - uses: actions/upload-artifact@v2 + with: + name: dependencies + path: ${{ github.workspace }}/dependencies/ + if-no-files-found: error + build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] + needs: [build_talib] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} @@ -24,11 +38,14 @@ jobs: python -m pip install -r requirements.txt python -m pip install -r requirements_test.txt pip install flake8 pytest - ./tools/build_talib_from_source.bash $DEPS_PATH env: DEPS_PATH: ${{ github.workspace }}/dependencies TA_INCLUDE_PATH: ${{ github.workspace }}/dependencies/include TA_LIBRARY_PATH: ${{ github.workspace }}/dependencies/lib + - uses: actions/download-artifact@v2 + with: + name: dependencies + path: ${{ github.workspace }}/dependencies - name: Build cython modules in-place run: | python setup.py build_ext --inplace --include-dirs=$TA_INCLUDE_PATH --library-dirs=$TA_LIBRARY_PATH From a85fe02edcffe33319edfd0435ef8d9876bd44d2 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Sun, 13 Feb 2022 00:21:19 -0500 Subject: [PATCH 05/22] Cleanup tests. Use proper pytest fixtures for shared test data. Remove two unnecessary array comparison functions. --- tests/conftest.py | 244 +++++++++++++++++++++++++++++++++++++++++ tests/test_abstract.py | 99 ++++++++++------- tests/test_data.py | 240 ---------------------------------------- tests/test_func.py | 91 +++++++++------ tests/test_pandas.py | 42 +++---- tests/test_polars.py | 30 ++--- tests/test_stream.py | 5 + 7 files changed, 400 insertions(+), 351 deletions(-) create mode 100644 tests/conftest.py delete mode 100644 tests/test_data.py diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..9756ae7dd --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,244 @@ +from __future__ import print_function + +import pytest +import numpy as np + + +@pytest.fixture(scope='session') +def ford_2012_dates(): + return np.asarray([ + 20120103, 20120104, 20120105, 20120106, 20120109, + 20120110, 20120111, 20120112, 20120113, 20120117, 20120118, 20120119, + 20120120, 20120123, 20120124, 20120125, 20120126, 20120127, 20120130, + 20120131, 20120201, 20120202, 20120203, 20120206, 20120207, 20120208, + 20120209, 20120210, 20120213, 20120214, 20120215, 20120216, 20120217, + 20120221, 20120222, 20120223, 20120224, 20120227, 20120228, 20120229, + 20120301, 20120302, 20120305, 20120306, 20120307, 20120308, 20120309, + 20120312, 20120313, 20120314, 20120315, 20120316, 20120319, 20120320, + 20120321, 20120322, 20120323, 20120326, 20120327, 20120328, 20120329, + 20120330, 20120402, 20120403, 20120404, 20120405, 20120409, 20120410, + 20120411, 20120412, 20120413, 20120416, 20120417, 20120418, 20120419, + 20120420, 20120423, 20120424, 20120425, 20120426, 20120427, 20120430, + 20120501, 20120502, 20120503, 20120504, 20120507, 20120508, 20120509, + 20120510, 20120511, 20120514, 20120515, 20120516, 20120517, 20120518, + 20120521, 20120522, 20120523, 20120524, 20120525, 20120529, 20120530, + 20120531, 20120601, 20120604, 20120605, 20120606, 20120607, 20120608, + 20120611, 20120612, 20120613, 20120614, 20120615, 20120618, 20120619, + 20120620, 20120621, 20120622, 20120625, 20120626, 20120627, 20120628, + 20120629, 20120702, 20120703, 20120705, 20120706, 20120709, 20120710, + 20120711, 20120712, 20120713, 20120716, 20120717, 20120718, 20120719, + 20120720, 20120723, 20120724, 20120725, 20120726, 20120727, 20120730, + 20120731, 20120801, 20120802, 20120803, 20120806, 20120807, 20120808, + 20120809, 20120810, 20120813, 20120814, 20120815, 20120816, 20120817, + 20120820, 20120821, 20120822, 20120823, 20120824, 20120827, 20120828, + 20120829, 20120830, 20120831, 20120904, 20120905, 20120906, 20120907, + 20120910, 20120911, 20120912, 20120913, 20120914, 20120917, 20120918, + 20120919, 20120920, 20120921, 20120924, 20120925, 20120926, 20120927, + 20120928, 20121001, 20121002, 20121003, 20121004, 20121005, 20121008, + 20121009, 20121010, 20121011, 20121012, 20121015, 20121016, 20121017, + 20121018, 20121019, 20121022, 20121023, 20121024, 20121025, 20121026, + 20121031, 20121101, 20121102, 20121105, 20121106, 20121107, 20121108, + 20121109, 20121112, 20121113, 20121114, 20121115, 20121116, 20121119, + 20121120, 20121121, 20121123, 20121126, 20121127, 20121128, 20121129, + 20121130, 20121203, 20121204, 20121205, 20121206, 20121207, 20121210, + 20121211, 20121212, 20121213, 20121214, 20121217, 20121218, 20121219, + 20121220, 20121221, 20121224, 20121226, 20121227, 20121228, 20121231 + ]) + + +@pytest.fixture(scope='session') +def ford_2012(): + return { + 'open': np.asarray([ + 11.00, 11.15, 11.33, 11.74, 11.83, 12.00, 11.74, 12.16, 12.01, + 12.20, 12.03, 12.48, 12.55, 12.69, 12.56, 12.80, 13.03, 11.96, + 12.06, 12.47, 12.73, 12.40, 12.47, 12.85, 12.93, 12.91, 12.89, + 12.52, 12.74, 12.46, 12.47, 12.38, 12.84, 12.74, 12.49, 12.27, + 12.43, 12.11, 12.34, 12.28, 12.48, 12.74, 12.67, 12.23, 12.21, + 12.41, 12.53, 12.57, 12.48, 12.64, 12.90, 12.86, 12.52, 12.48, + 12.59, 12.48, 12.31, 12.45, 12.51, 12.35, 12.33, 12.55, 12.50, + 12.71, 12.46, 12.38, 12.26, 12.19, 11.99, 11.94, 11.98, 12.01, + 11.98, 11.81, 11.81, 11.71, 11.15, 11.61, 11.51, 11.71, 12.03, + 11.42, 11.25, 11.16, 11.13, 10.84, 10.53, 10.60, 10.48, 10.83, + 10.61, 10.41, 10.34, 10.23, 10.16, 10.08, 10.02, 10.25, 10.32, + 10.50, 10.61, 10.69, 10.73, 10.62, 10.33, 10.15, 10.01, 10.29, + 10.73, 10.48, 10.77, 10.47, 10.39, 10.27, 10.40, 10.35, 10.37, + 10.58, 10.65, 10.35, 10.13, 10.06, 10.05, 9.93, 9.95, 9.50, 9.53, + 9.67, 9.47, 9.46, 9.50, 9.33, 9.26, 9.16, 9.22, 9.28, 9.38, 9.45, + 9.28, 9.08, 9.17, 9.17, 9.05, 8.99, 9.04, 9.13, 9.29, 8.99, 9.02, + 9.13, 9.18, 9.25, 9.31, 9.30, 9.35, 9.45, 9.44, 9.50, 9.65, 9.58, + 9.65, 9.50, 9.45, 9.42, 9.51, 9.37, 9.33, 9.30, 9.39, 9.37, 9.45, + 9.66, 9.95, 10.08, 10.18, 10.25, 10.20, 10.41, 10.27, 10.30, 10.49, + 10.48, 10.53, 10.30, 10.35, 9.98, 10.13, 9.99, 9.89, 10.01, 9.82, + 10.06, 10.17, 10.06, 10.21, 10.12, 10.06, 10.14, 10.11, 10.26, + 10.31, 10.36, 10.42, 10.14, 10.02, 10.08, 10.42, 10.35, 10.70, + 11.19, 11.31, 11.15, 11.33, 11.25, 11.07, 10.76, 11.03, 10.89, + 11.02, 10.57, 10.58, 10.65, 10.85, 10.84, 10.98, 11.05, 11.10, + 11.05, 11.32, 11.52, 11.56, 11.40, 11.32, 11.26, 11.27, 11.41, + 11.51, 11.52, 11.46, 11.27, 11.16, 11.48, 11.79, 11.74, 11.55, + 11.67, 12.31, 12.79, 12.55, 12.88 + ]), + 'high': np.asarray([ + 11.25, 11.53, 11.63, 11.80, 11.95, 12.05, 12.18, 12.18, 12.08, + 12.26, 12.37, 12.72, 12.64, 12.84, 12.86, 12.98, 13.05, 12.53, + 12.44, 12.51, 12.75, 12.43, 12.84, 13.00, 12.97, 12.96, 12.90, + 12.66, 12.74, 12.58, 12.57, 12.77, 12.88, 12.76, 12.51, 12.44, + 12.46, 12.36, 12.35, 12.55, 12.77, 12.94, 12.68, 12.25, 12.30, + 12.55, 12.73, 12.59, 12.72, 12.90, 13.04, 12.90, 12.68, 12.61, + 12.67, 12.54, 12.37, 12.50, 12.61, 12.36, 12.52, 12.58, 12.65, + 12.95, 12.52, 12.58, 12.29, 12.28, 12.02, 12.13, 12.03, 12.05, + 12.00, 11.85, 11.88, 11.72, 11.40, 11.61, 11.75, 11.93, 12.04, + 11.47, 11.34, 11.17, 11.15, 10.87, 10.79, 10.64, 10.81, 10.86, + 10.83, 10.53, 10.34, 10.43, 10.25, 10.18, 10.23, 10.40, 10.45, + 10.62, 10.68, 10.88, 10.75, 10.68, 10.37, 10.18, 10.24, 10.58, + 10.78, 10.68, 10.80, 10.55, 10.49, 10.45, 10.42, 10.40, 10.64, + 10.74, 10.68, 10.40, 10.18, 10.08, 10.10, 10.09, 9.98, 9.60, 9.79, + 9.74, 9.52, 9.47, 9.55, 9.38, 9.28, 9.32, 9.32, 9.35, 9.52, 9.50, + 9.35, 9.21, 9.24, 9.20, 9.11, 9.10, 9.18, 9.28, 9.42, 9.03, 9.15, + 9.21, 9.39, 9.38, 9.46, 9.36, 9.42, 9.66, 9.54, 9.67, 9.66, 9.64, + 9.70, 9.56, 9.54, 9.52, 9.52, 9.44, 9.40, 9.34, 9.43, 9.47, 9.62, + 9.96, 10.23, 10.28, 10.25, 10.30, 10.38, 10.57, 10.42, 10.45, 10.66, + 10.52, 10.54, 10.40, 10.37, 10.12, 10.18, 10.00, 10.08, 10.05, + 10.02, 10.15, 10.28, 10.12, 10.25, 10.12, 10.26, 10.25, 10.25, + 10.32, 10.41, 10.57, 10.43, 10.24, 10.11, 10.29, 10.49, 10.42, + 11.17, 11.30, 11.38, 11.35, 11.59, 11.34, 11.23, 11.10, 11.16, + 11.10, 11.05, 10.80, 10.64, 10.90, 11.02, 11.00, 11.10, 11.14, + 11.27, 11.26, 11.53, 11.60, 11.70, 11.44, 11.40, 11.31, 11.50, + 11.53, 11.58, 11.56, 11.50, 11.27, 11.41, 11.68, 11.85, 11.80, + 11.86, 12.40, 12.79, 12.81, 12.88, 13.08 + ]), + 'low': np.asarray([ + 10.99, 11.07, 11.24, 11.52, 11.70, 11.63, 11.65, 11.89, 11.84, + 11.96, 12.00, 12.43, 12.45, 12.55, 12.46, 12.70, 12.66, 11.79, + 12.00, 12.20, 12.29, 12.20, 12.39, 12.71, 12.83, 12.80, 12.67, + 12.37, 12.51, 12.34, 12.33, 12.38, 12.71, 12.46, 12.22, 12.16, + 12.19, 11.99, 12.20, 12.25, 12.45, 12.68, 12.41, 12.00, 12.15, + 12.32, 12.48, 12.37, 12.40, 12.63, 12.83, 12.51, 12.48, 12.39, + 12.55, 12.24, 12.18, 12.39, 12.30, 12.18, 12.24, 12.40, 12.44, + 12.46, 12.32, 12.38, 12.11, 11.65, 11.88, 11.86, 11.84, 11.83, + 11.88, 11.72, 11.58, 11.39, 11.15, 11.36, 11.43, 11.67, 11.52, + 11.15, 11.11, 11.00, 10.85, 10.63, 10.52, 10.40, 10.41, 10.66, + 10.56, 10.30, 10.10, 10.15, 10.01, 9.96, 10.00, 10.15, 10.22, 10.38, + 10.51, 10.68, 10.52, 10.40, 10.06, 9.91, 9.97, 10.27, 10.52, 10.38, + 10.45, 10.31, 10.22, 10.21, 10.26, 10.26, 10.35, 10.52, 10.25, + 10.18, 9.95, 9.96, 9.97, 9.93, 9.46, 9.30, 9.49, 9.53, 9.40, 9.31, + 9.28, 9.26, 9.12, 9.14, 9.15, 9.12, 9.34, 9.33, 9.18, 9.05, 8.95, + 8.91, 8.83, 8.88, 9.01, 9.12, 8.99, 8.82, 8.96, 9.09, 9.18, 9.24, + 9.30, 9.23, 9.25, 9.42, 9.41, 9.49, 9.60, 9.51, 9.52, 9.40, 9.42, + 9.41, 9.38, 9.31, 9.29, 9.25, 9.31, 9.35, 9.39, 9.66, 9.93, 10.06, + 10.13, 10.17, 10.12, 10.39, 10.26, 10.28, 10.45, 10.35, 10.36, + 10.26, 10.06, 9.86, 10.02, 9.81, 9.88, 9.71, 9.76, 9.96, 10.13, + 9.99, 10.02, 9.95, 10.05, 10.09, 10.09, 10.22, 10.26, 10.33, 10.13, + 10.03, 9.97, 10.01, 10.28, 10.22, 10.60, 10.88, 11.15, 11.13, 11.26, + 11.04, 10.89, 10.71, 10.96, 10.86, 10.62, 10.46, 10.38, 10.65, + 10.76, 10.80, 10.96, 10.97, 11.10, 10.98, 11.32, 11.33, 11.40, + 11.23, 11.18, 11.19, 11.26, 11.41, 11.40, 11.43, 11.21, 11.03, + 11.14, 11.40, 11.62, 11.58, 11.47, 11.67, 12.31, 12.36, 12.52, 12.76 + ]), + 'close': np.asarray([ + 11.13, 11.30, 11.59, 11.71, 11.80, 11.80, 12.07, 12.14, 12.04, + 12.02, 12.34, 12.61, 12.59, 12.66, 12.82, 12.93, 12.79, 12.21, + 12.29, 12.42, 12.33, 12.26, 12.79, 12.96, 12.88, 12.84, 12.69, + 12.44, 12.54, 12.48, 12.38, 12.74, 12.75, 12.53, 12.28, 12.40, + 12.23, 12.30, 12.25, 12.38, 12.66, 12.72, 12.46, 12.09, 12.24, + 12.46, 12.58, 12.43, 12.70, 12.88, 12.90, 12.51, 12.63, 12.54, + 12.57, 12.32, 12.32, 12.48, 12.32, 12.32, 12.50, 12.48, 12.62, + 12.64, 12.51, 12.47, 12.22, 11.79, 11.91, 12.07, 11.92, 11.88, + 11.91, 11.79, 11.66, 11.41, 11.35, 11.39, 11.73, 11.87, 11.60, + 11.28, 11.23, 11.10, 10.92, 10.67, 10.66, 10.61, 10.69, 10.71, + 10.58, 10.32, 10.15, 10.16, 10.01, 10.01, 10.20, 10.19, 10.41, + 10.59, 10.60, 10.84, 10.66, 10.56, 10.12, 10.04, 10.19, 10.57, + 10.55, 10.66, 10.45, 10.50, 10.30, 10.41, 10.35, 10.34, 10.56, + 10.65, 10.27, 10.19, 10.01, 10.01, 10.02, 10.09, 9.59, 9.39, 9.60, + 9.57, 9.50, 9.45, 9.35, 9.33, 9.13, 9.27, 9.26, 9.34, 9.38, 9.35, + 9.21, 9.17, 9.06, 8.97, 8.96, 9.00, 9.10, 9.24, 9.04, 8.92, 9.09, + 9.15, 9.31, 9.35, 9.34, 9.35, 9.40, 9.44, 9.49, 9.59, 9.63, 9.63, + 9.53, 9.49, 9.45, 9.49, 9.39, 9.34, 9.32, 9.31, 9.34, 9.41, 9.57, + 9.92, 10.14, 10.11, 10.15, 10.21, 10.34, 10.53, 10.39, 10.42, 10.59, + 10.44, 10.40, 10.32, 10.09, 10.01, 10.02, 9.86, 9.93, 9.79, 9.94, + 10.11, 10.16, 10.05, 10.10, 9.98, 10.14, 10.12, 10.22, 10.30, 10.41, + 10.43, 10.18, 10.17, 10.00, 10.17, 10.39, 10.36, 11.16, 11.25, + 11.17, 11.25, 11.42, 11.06, 10.90, 10.93, 10.97, 11.00, 10.67, + 10.57, 10.50, 10.83, 10.85, 10.92, 11.10, 11.11, 11.10, 11.25, + 11.53, 11.45, 11.41, 11.31, 11.31, 11.24, 11.48, 11.47, 11.49, + 11.47, 11.27, 11.10, 11.39, 11.67, 11.73, 11.77, 11.86, 12.40, + 12.79, 12.76, 12.87, 12.95 + ]), + 'volume': np.asarray([ + 45709900, 79725200, 67877500, 59840700, 53981500, 121750600, + 63806000, 48687700, 46366700, 44398400, 47102700, 70894200, + 43705700, 49379700, 45768400, 54021600, 75470700, 142155300, + 57752600, 46412100, 71669000, 48347600, 78851200, 46363300, + 39413500, 35352500, 52290500, 52505500, 34474400, 39627900, + 38174800, 49164400, 30778000, 38409800, 43326000, 36747600, + 31399300, 38703400, 30789000, 62093700, 68262000, 49063500, + 28433700, 57374500, 28440900, 37099100, 36159300, 30275700, + 42783600, 47578500, 55286600, 77119600, 52445700, 40214400, + 27521400, 50117100, 44755000, 26692200, 35070700, 41051700, + 51039700, 36381000, 43966900, 97034200, 51505000, 37939500, + 42515300, 77370300, 34724400, 26988800, 39675000, 31903500, + 35981200, 32314000, 48169200, 52631000, 31269200, 38615200, + 45185400, 40889300, 83070300, 46156300, 43959200, 48572900, + 40238400, 53268400, 33235200, 46174500, 54501200, 42526100, + 36561300, 50225200, 41886500, 44321300, 49648900, 50572000, + 38134900, 44295700, 75647800, 45334100, 30430800, 43760600, + 44592100, 54297000, 68237000, 57305600, 38326200, 50458000, + 33846100, 30811600, 35811400, 35130800, 53471900, 37531800, + 39442000, 27361000, 37155900, 40810100, 40062800, 56427300, + 44297600, 31871900, 33278900, 38648400, 138138600, 63388600, + 49629300, 31783900, 30355400, 37441600, 33516600, 32028700, + 55111000, 30248300, 28838200, 29510000, 31010000, 33615000, + 27968300, 33773800, 53519200, 44338200, 51798900, 67986800, + 40958300, 41360900, 65973000, 45326500, 38631400, 23819100, + 43574500, 22630300, 30909800, 19618800, 21122000, 21129500, + 21308300, 34323700, 34533900, 38923800, 26281100, 26965500, + 23537700, 19574600, 22754200, 23084400, 26115700, 16459400, + 28029200, 37965000, 40608800, 67996400, 60617000, 43381300, + 28165300, 28046500, 50920200, 55934300, 31922200, 34937000, + 42403000, 28755100, 35459800, 28557900, 36866300, 44362600, + 25740900, 44586300, 33445600, 63630000, 51023800, 46855500, + 40693900, 25473900, 38235700, 33951600, 39328700, 24108500, + 26466500, 32788400, 29346300, 44041700, 40493000, 39149700, + 32476500, 49339800, 59290900, 43485500, 137960900, 88770100, + 53399000, 37995000, 51232200, 56674900, 45948800, 40703600, + 25723100, 33342900, 45664700, 48879800, 45346200, 39359100, + 34739800, 21181700, 16032200, 26831700, 37610000, 38496900, + 57289300, 41329600, 47746300, 37760200, 33152400, 31065800, + 38404500, 26025200, 36326900, 31099900, 35443200, 36933500, + 46983300, 61810400, 54884700, 47750100, 94489300, 91734900, + 140331900, 108315100, 95668600, 106908900 + ]) + } + + +@pytest.fixture(scope='session') +def series(): + return np.array([ + 91.50, 94.81, 94.38, 95.09, 93.78, 94.62, 92.53, 92.75, 90.31, 92.47, + 96.12, 97.25, 98.50, 89.88, 91.00, 92.81, 89.16, 89.34, 91.62, 89.88, + 88.38, 87.62, 84.78, 83.00, 83.50, 81.38, 84.44, 89.25, 86.38, 86.25, + 85.25, 87.12, 85.81, 88.97, 88.47, 86.88, 86.81, 84.88, 84.19, 83.88, + 83.38, 85.50, 89.19, 89.44, 91.09, 90.75, 91.44, 89.00, 91.00, 90.50, + 89.03, 88.81, 84.28, 83.50, 82.69, 84.75, 85.66, 86.19, 88.94, 89.28, + 88.62, 88.50, 91.97, 91.50, 93.25, 93.50, 93.16, 91.72, 90.00, 89.69, + 88.88, 85.19, 83.38, 84.88, 85.94, 97.25, 99.88, 104.94, 106.00, 102.50, + 102.41, 104.59, 106.12, 106.00, 106.06, 104.62, 108.62, 109.31, 110.50, + 112.75, 123.00, 119.62, 118.75, 119.25, 117.94, 116.44, 115.19, 111.88, + 110.59, 118.12, 116.00, 116.00, 112.00, 113.75, 112.94, 116.00, 120.50, + 116.62, 117.00, 115.25, 114.31, 115.50, 115.87, 120.69, 120.19, 120.75, + 124.75, 123.37, 122.94, 122.56, 123.12, 122.56, 124.62, 129.25, 131.00, + 132.25, 131.00, 132.81, 134.00, 137.38, 137.81, 137.88, 137.25, 136.31, + 136.25, 134.63, 128.25, 129.00, 123.87, 124.81, 123.00, 126.25, 128.38, + 125.37, 125.69, 122.25, 119.37, 118.50, 123.19, 123.50, 122.19, 119.31, + 123.31, 121.12, 123.37, 127.37, 128.50, 123.87, 122.94, 121.75, 124.44, + 122.00, 122.37, 122.94, 124.00, 123.19, 124.56, 127.25, 125.87, 128.86, + 132.00, 130.75, 134.75, 135.00, 132.38, 133.31, 131.94, 130.00, 125.37, + 130.13, 127.12, 125.19, 122.00, 125.00, 123.00, 123.50, 120.06, 121.00, + 117.75, 119.87, 122.00, 119.19, 116.37, 113.50, 114.25, 110.00, 105.06, + 107.00, 107.87, 107.00, 107.12, 107.00, 91.00, 93.94, 93.87, 95.50, + 93.00, 94.94, 98.25, 96.75, 94.81, 94.37, 91.56, 90.25, 93.94, 93.62, + 97.00, 95.00, 95.87, 94.06, 94.62, 93.75, 98.00, 103.94, 107.87, 106.06, + 104.50, 105.00, 104.19, 103.06, 103.42, 105.27, 111.87, 116.00, 116.62, + 118.28, 113.37, 109.00, 109.70, 109.25, 107.00, 109.19, 110.00, 109.20, + 110.12, 108.00, 108.62, 109.75, 109.81, 109.00, 108.75, 107.87 + ]) \ No newline at end of file diff --git a/tests/test_abstract.py b/tests/test_abstract.py index e98948f70..2018136ef 100644 --- a/tests/test_abstract.py +++ b/tests/test_abstract.py @@ -1,4 +1,5 @@ import numpy as np +from numpy.testing import assert_array_equal, assert_raises import pytest import re @@ -10,10 +11,13 @@ import talib from talib import func from talib import abstract -from talib.test_data import ford_2012, assert_np_arrays_equal, assert_np_arrays_not_equal -def test_pandas(): +def assert_array_not_equal(x, y): + assert_raises(AssertionError, assert_array_equal, x, y) + + +def test_pandas(ford_2012): import pandas input_df = pandas.DataFrame(ford_2012) input_dict = dict((k, pandas.Series(v)) for k, v in ford_2012.items()) @@ -21,23 +25,23 @@ def test_pandas(): expected_k, expected_d = func.STOCH(ford_2012['high'], ford_2012['low'], ford_2012['close']) # 5, 3, 0, 3, 0 output = abstract.Function('stoch', input_df).outputs assert isinstance(output, pandas.DataFrame) - assert_np_arrays_equal(expected_k, output['slowk']) - assert_np_arrays_equal(expected_d, output['slowd']) + assert_array_equal(expected_k, output['slowk']) + assert_array_equal(expected_d, output['slowd']) output = abstract.Function('stoch', input_dict).outputs assert isinstance(output, list) - assert_np_arrays_equal(expected_k, output[0]) - assert_np_arrays_equal(expected_d, output[1]) + assert_array_equal(expected_k, output[0]) + assert_array_equal(expected_d, output[1]) expected = func.SMA(ford_2012['close'], 10) output = abstract.Function('sma', input_df, 10).outputs assert isinstance(output, pandas.Series) - assert_np_arrays_equal(expected, output) + assert_array_equal(expected, output) output = abstract.Function('sma', input_dict, 10).outputs assert isinstance(output, np.ndarray) - assert_np_arrays_equal(expected, output) + assert_array_equal(expected, output) -def test_pandas_series(): +def test_pandas_series(ford_2012): import pandas input_df = pandas.DataFrame(ford_2012) output = talib.SMA(input_df['close'], 10) @@ -60,50 +64,52 @@ def test_pandas_series(): pandas.testing.assert_series_equal(output, expected) -def test_SMA(): +def test_SMA(ford_2012): expected = func.SMA(ford_2012['close'], 10) - assert_np_arrays_equal(expected, abstract.Function('sma', ford_2012, 10).outputs) - assert_np_arrays_equal(expected, abstract.Function('sma')(ford_2012, 10, price='close')) - assert_np_arrays_equal(expected, abstract.Function('sma')(ford_2012, timeperiod=10)) + assert_array_equal(expected, abstract.Function('sma', ford_2012, 10).outputs) + assert_array_equal(expected, abstract.Function('sma')(ford_2012, 10, price='close')) + assert_array_equal(expected, abstract.Function('sma')(ford_2012, timeperiod=10)) expected = func.SMA(ford_2012['open'], 10) - assert_np_arrays_equal(expected, abstract.Function('sma', ford_2012, 10, price='open').outputs) - assert_np_arrays_equal(expected, abstract.Function('sma', price='low')(ford_2012, 10, price='open')) - assert_np_arrays_not_equal(expected, abstract.Function('sma', ford_2012, 10, price='open')(timeperiod=20)) - assert_np_arrays_not_equal(expected, abstract.Function('sma', ford_2012)(10, price='close')) - assert_np_arrays_not_equal(expected, abstract.Function('sma', 10)(ford_2012, price='high')) - assert_np_arrays_not_equal(expected, abstract.Function('sma', price='low')(ford_2012, 10)) + assert_array_equal(expected, abstract.Function('sma', ford_2012, 10, price='open').outputs) + assert_array_equal(expected, abstract.Function('sma', price='low')(ford_2012, 10, price='open')) + assert_array_not_equal(expected, abstract.Function('sma', ford_2012, 10, price='open')(timeperiod=20)) + assert_array_not_equal(expected, abstract.Function('sma', ford_2012)(10, price='close')) + assert_array_not_equal(expected, abstract.Function('sma', 10)(ford_2012, price='high')) + assert_array_not_equal(expected, abstract.Function('sma', price='low')(ford_2012, 10)) input_arrays = {'foobarbaz': ford_2012['open']} - assert_np_arrays_equal(expected, abstract.SMA(input_arrays, 10, price='foobarbaz')) + assert_array_equal(expected, abstract.SMA(input_arrays, 10, price='foobarbaz')) -def test_STOCH(): +def test_STOCH(ford_2012): # check defaults match expected_k, expected_d = func.STOCH(ford_2012['high'], ford_2012['low'], ford_2012['close']) # 5, 3, 0, 3, 0 got_k, got_d = abstract.Function('stoch', ford_2012).outputs - assert_np_arrays_equal(expected_k, got_k) - assert_np_arrays_equal(expected_d, got_d) + assert_array_equal(expected_k, got_k) + assert_array_equal(expected_d, got_d) expected_k, expected_d = func.STOCH(ford_2012['high'], ford_2012['low'], ford_2012['close']) got_k, got_d = abstract.Function('stoch', ford_2012)(5, 3, 0, 3, 0) - assert_np_arrays_equal(expected_k, got_k) - assert_np_arrays_equal(expected_d, got_d) + assert_array_equal(expected_k, got_k) + assert_array_equal(expected_d, got_d) expected_k, expected_d = func.STOCH(ford_2012['high'], ford_2012['low'], ford_2012['close'], 15) got_k, got_d = abstract.Function('stoch', ford_2012)(15, 5, 0, 5, 0) - assert_np_arrays_not_equal(expected_k, got_k) - assert_np_arrays_not_equal(expected_d, got_d) + assert_array_not_equal(expected_k, got_k) + assert_array_not_equal(expected_d, got_d) expected_k, expected_d = func.STOCH(ford_2012['high'], ford_2012['low'], ford_2012['close'], 15, 5, 1, 5, 1) got_k, got_d = abstract.Function('stoch', ford_2012)(15, 5, 1, 5, 1) - assert_np_arrays_equal(expected_k, got_k) - assert_np_arrays_equal(expected_d, got_d) + assert_array_equal(expected_k, got_k) + assert_array_equal(expected_d, got_d) -def test_doji_candle(): + +def test_doji_candle(ford_2012): expected = func.CDLDOJI(ford_2012['open'], ford_2012['high'], ford_2012['low'], ford_2012['close']) got = abstract.Function('CDLDOJI').run(ford_2012) - assert_np_arrays_equal(got, expected) + assert_array_equal(got, expected) + -def test_MAVP(): +def test_MAVP(ford_2012): mavp = abstract.MAVP with pytest.raises(Exception): mavp.set_input_arrays(ford_2012) @@ -113,6 +119,7 @@ def test_MAVP(): assert mavp.set_input_arrays(input_d) assert mavp.input_arrays == input_d + def test_info(): stochrsi = abstract.Function('STOCHRSI') stochrsi.input_names = {'price': 'open'} @@ -158,6 +165,7 @@ def test_info(): } assert expected == abstract.Function('BBANDS').info + def test_input_names(): expected = OrderedDict([('price', 'close')]) assert expected == abstract.Function('MAMA').input_names @@ -177,7 +185,8 @@ def test_input_names(): } assert obv.input_names == expected -def test_input_arrays(): + +def test_input_arrays(ford_2012): mama = abstract.Function('MAMA') # test default setting @@ -211,6 +220,7 @@ def test_input_arrays(): willr.input_names = {'prices': ['high', 'low', 'open']} assert willr.set_input_arrays(input_d) + def test_parameters(): stoch = abstract.Function('STOCH') expected = OrderedDict([ @@ -243,18 +253,20 @@ def test_parameters(): expected['slowd_matype'] = 1 assert expected == stoch.parameters + def test_lookback(): assert abstract.Function('SMA', 10).lookback == 9 stochrsi = abstract.Function('stochrsi', 20, 5, 3) assert stochrsi.lookback == 26 -def test_call_supports_same_signature_as_func_module(): + +def test_call_supports_same_signature_as_func_module(ford_2012): adx = abstract.Function('ADX') expected = func.ADX(ford_2012['open'], ford_2012['high'], ford_2012['low']) output = adx(ford_2012['open'], ford_2012['high'], ford_2012['low']) - assert_np_arrays_equal(expected, output) + assert_array_equal(expected, output) expected_error = re.escape('Too many price arguments: expected 3 (high, low, close)') @@ -266,7 +278,8 @@ def test_call_supports_same_signature_as_func_module(): with pytest.raises(TypeError, match=expected_error): adx(ford_2012['open'], ford_2012['high']) -def test_parameter_type_checking(): + +def test_parameter_type_checking(ford_2012): sma = abstract.Function('SMA', timeperiod=10) expected_error = re.escape('Invalid parameter value for timeperiod (expected int, got float)') @@ -283,29 +296,31 @@ def test_parameter_type_checking(): with pytest.raises(TypeError, match=expected_error): sma.set_parameters(timeperiod=35.5) -def test_call_doesnt_cache_parameters(): + +def test_call_doesnt_cache_parameters(ford_2012): sma = abstract.Function('SMA', timeperiod=10) expected = func.SMA(ford_2012['open'], 20) output = sma(ford_2012, timeperiod=20, price='open') - assert_np_arrays_equal(expected, output) + assert_array_equal(expected, output) expected = func.SMA(ford_2012['close'], 20) output = sma(ford_2012, timeperiod=20) - assert_np_arrays_equal(expected, output) + assert_array_equal(expected, output) expected = func.SMA(ford_2012['close'], 10) output = sma(ford_2012) - assert_np_arrays_equal(expected, output) + assert_array_equal(expected, output) -def test_call_without_arguments(): +def test_call_without_arguments(): with pytest.raises(TypeError, match='Not enough price arguments'): abstract.Function('SMA')() with pytest.raises(TypeError, match='Not enough price arguments'): abstract.Function('SMA')(10) + def test_call_first_exception(): inputs = {'close': np.array([np.nan, np.nan, np.nan])} @@ -316,4 +331,4 @@ def test_call_first_exception(): output = abstract.SMA(inputs, timeperiod=2) expected = np.array([np.nan, 1.5, 2.5]) - assert_np_arrays_equal(expected, output) + assert_array_equal(expected, output) diff --git a/tests/test_data.py b/tests/test_data.py deleted file mode 100644 index d2ba123d7..000000000 --- a/tests/test_data.py +++ /dev/null @@ -1,240 +0,0 @@ - -from __future__ import print_function - -import numpy as np - -ford_2012_dates = np.asarray([ 20120103, 20120104, 20120105, 20120106, 20120109, - 20120110, 20120111, 20120112, 20120113, 20120117, 20120118, 20120119, - 20120120, 20120123, 20120124, 20120125, 20120126, 20120127, 20120130, - 20120131, 20120201, 20120202, 20120203, 20120206, 20120207, 20120208, - 20120209, 20120210, 20120213, 20120214, 20120215, 20120216, 20120217, - 20120221, 20120222, 20120223, 20120224, 20120227, 20120228, 20120229, - 20120301, 20120302, 20120305, 20120306, 20120307, 20120308, 20120309, - 20120312, 20120313, 20120314, 20120315, 20120316, 20120319, 20120320, - 20120321, 20120322, 20120323, 20120326, 20120327, 20120328, 20120329, - 20120330, 20120402, 20120403, 20120404, 20120405, 20120409, 20120410, - 20120411, 20120412, 20120413, 20120416, 20120417, 20120418, 20120419, - 20120420, 20120423, 20120424, 20120425, 20120426, 20120427, 20120430, - 20120501, 20120502, 20120503, 20120504, 20120507, 20120508, 20120509, - 20120510, 20120511, 20120514, 20120515, 20120516, 20120517, 20120518, - 20120521, 20120522, 20120523, 20120524, 20120525, 20120529, 20120530, - 20120531, 20120601, 20120604, 20120605, 20120606, 20120607, 20120608, - 20120611, 20120612, 20120613, 20120614, 20120615, 20120618, 20120619, - 20120620, 20120621, 20120622, 20120625, 20120626, 20120627, 20120628, - 20120629, 20120702, 20120703, 20120705, 20120706, 20120709, 20120710, - 20120711, 20120712, 20120713, 20120716, 20120717, 20120718, 20120719, - 20120720, 20120723, 20120724, 20120725, 20120726, 20120727, 20120730, - 20120731, 20120801, 20120802, 20120803, 20120806, 20120807, 20120808, - 20120809, 20120810, 20120813, 20120814, 20120815, 20120816, 20120817, - 20120820, 20120821, 20120822, 20120823, 20120824, 20120827, 20120828, - 20120829, 20120830, 20120831, 20120904, 20120905, 20120906, 20120907, - 20120910, 20120911, 20120912, 20120913, 20120914, 20120917, 20120918, - 20120919, 20120920, 20120921, 20120924, 20120925, 20120926, 20120927, - 20120928, 20121001, 20121002, 20121003, 20121004, 20121005, 20121008, - 20121009, 20121010, 20121011, 20121012, 20121015, 20121016, 20121017, - 20121018, 20121019, 20121022, 20121023, 20121024, 20121025, 20121026, - 20121031, 20121101, 20121102, 20121105, 20121106, 20121107, 20121108, - 20121109, 20121112, 20121113, 20121114, 20121115, 20121116, 20121119, - 20121120, 20121121, 20121123, 20121126, 20121127, 20121128, 20121129, - 20121130, 20121203, 20121204, 20121205, 20121206, 20121207, 20121210, - 20121211, 20121212, 20121213, 20121214, 20121217, 20121218, 20121219, - 20121220, 20121221, 20121224, 20121226, 20121227, 20121228, 20121231 ]) - -ford_2012 = { - 'open': np.asarray([ 11.00, 11.15, 11.33, 11.74, 11.83, 12.00, 11.74, 12.16, - 12.01, 12.20, 12.03, 12.48, 12.55, 12.69, 12.56, 12.80, 13.03, 11.96, - 12.06, 12.47, 12.73, 12.40, 12.47, 12.85, 12.93, 12.91, 12.89, 12.52, - 12.74, 12.46, 12.47, 12.38, 12.84, 12.74, 12.49, 12.27, 12.43, 12.11, - 12.34, 12.28, 12.48, 12.74, 12.67, 12.23, 12.21, 12.41, 12.53, 12.57, - 12.48, 12.64, 12.90, 12.86, 12.52, 12.48, 12.59, 12.48, 12.31, 12.45, - 12.51, 12.35, 12.33, 12.55, 12.50, 12.71, 12.46, 12.38, 12.26, 12.19, - 11.99, 11.94, 11.98, 12.01, 11.98, 11.81, 11.81, 11.71, 11.15, 11.61, - 11.51, 11.71, 12.03, 11.42, 11.25, 11.16, 11.13, 10.84, 10.53, 10.60, - 10.48, 10.83, 10.61, 10.41, 10.34, 10.23, 10.16, 10.08, 10.02, 10.25, - 10.32, 10.50, 10.61, 10.69, 10.73, 10.62, 10.33, 10.15, 10.01, 10.29, - 10.73, 10.48, 10.77, 10.47, 10.39, 10.27, 10.40, 10.35, 10.37, 10.58, - 10.65, 10.35, 10.13, 10.06, 10.05, 9.93, 9.95, 9.50, 9.53, 9.67, 9.47, - 9.46, 9.50, 9.33, 9.26, 9.16, 9.22, 9.28, 9.38, 9.45, 9.28, 9.08, 9.17, - 9.17, 9.05, 8.99, 9.04, 9.13, 9.29, 8.99, 9.02, 9.13, 9.18, 9.25, 9.31, - 9.30, 9.35, 9.45, 9.44, 9.50, 9.65, 9.58, 9.65, 9.50, 9.45, 9.42, 9.51, - 9.37, 9.33, 9.30, 9.39, 9.37, 9.45, 9.66, 9.95, 10.08, 10.18, 10.25, - 10.20, 10.41, 10.27, 10.30, 10.49, 10.48, 10.53, 10.30, 10.35, 9.98, - 10.13, 9.99, 9.89, 10.01, 9.82, 10.06, 10.17, 10.06, 10.21, 10.12, - 10.06, 10.14, 10.11, 10.26, 10.31, 10.36, 10.42, 10.14, 10.02, 10.08, - 10.42, 10.35, 10.70, 11.19, 11.31, 11.15, 11.33, 11.25, 11.07, 10.76, - 11.03, 10.89, 11.02, 10.57, 10.58, 10.65, 10.85, 10.84, 10.98, 11.05, - 11.10, 11.05, 11.32, 11.52, 11.56, 11.40, 11.32, 11.26, 11.27, 11.41, - 11.51, 11.52, 11.46, 11.27, 11.16, 11.48, 11.79, 11.74, 11.55, 11.67, - 12.31, 12.79, 12.55, 12.88, ]), - - 'high': np.asarray([ 11.25, 11.53, 11.63, 11.80, 11.95, 12.05, 12.18, 12.18, - 12.08, 12.26, 12.37, 12.72, 12.64, 12.84, 12.86, 12.98, 13.05, 12.53, - 12.44, 12.51, 12.75, 12.43, 12.84, 13.00, 12.97, 12.96, 12.90, 12.66, - 12.74, 12.58, 12.57, 12.77, 12.88, 12.76, 12.51, 12.44, 12.46, 12.36, - 12.35, 12.55, 12.77, 12.94, 12.68, 12.25, 12.30, 12.55, 12.73, 12.59, - 12.72, 12.90, 13.04, 12.90, 12.68, 12.61, 12.67, 12.54, 12.37, 12.50, - 12.61, 12.36, 12.52, 12.58, 12.65, 12.95, 12.52, 12.58, 12.29, 12.28, - 12.02, 12.13, 12.03, 12.05, 12.00, 11.85, 11.88, 11.72, 11.40, 11.61, - 11.75, 11.93, 12.04, 11.47, 11.34, 11.17, 11.15, 10.87, 10.79, 10.64, - 10.81, 10.86, 10.83, 10.53, 10.34, 10.43, 10.25, 10.18, 10.23, 10.40, - 10.45, 10.62, 10.68, 10.88, 10.75, 10.68, 10.37, 10.18, 10.24, 10.58, - 10.78, 10.68, 10.80, 10.55, 10.49, 10.45, 10.42, 10.40, 10.64, 10.74, - 10.68, 10.40, 10.18, 10.08, 10.10, 10.09, 9.98, 9.60, 9.79, 9.74, 9.52, - 9.47, 9.55, 9.38, 9.28, 9.32, 9.32, 9.35, 9.52, 9.50, 9.35, 9.21, 9.24, - 9.20, 9.11, 9.10, 9.18, 9.28, 9.42, 9.03, 9.15, 9.21, 9.39, 9.38, 9.46, - 9.36, 9.42, 9.66, 9.54, 9.67, 9.66, 9.64, 9.70, 9.56, 9.54, 9.52, 9.52, - 9.44, 9.40, 9.34, 9.43, 9.47, 9.62, 9.96, 10.23, 10.28, 10.25, 10.30, - 10.38, 10.57, 10.42, 10.45, 10.66, 10.52, 10.54, 10.40, 10.37, 10.12, - 10.18, 10.00, 10.08, 10.05, 10.02, 10.15, 10.28, 10.12, 10.25, 10.12, - 10.26, 10.25, 10.25, 10.32, 10.41, 10.57, 10.43, 10.24, 10.11, 10.29, - 10.49, 10.42, 11.17, 11.30, 11.38, 11.35, 11.59, 11.34, 11.23, 11.10, - 11.16, 11.10, 11.05, 10.80, 10.64, 10.90, 11.02, 11.00, 11.10, 11.14, - 11.27, 11.26, 11.53, 11.60, 11.70, 11.44, 11.40, 11.31, 11.50, 11.53, - 11.58, 11.56, 11.50, 11.27, 11.41, 11.68, 11.85, 11.80, 11.86, 12.40, - 12.79, 12.81, 12.88, 13.08, ]), - - 'low': np.asarray([ 10.99, 11.07, 11.24, 11.52, 11.70, 11.63, 11.65, 11.89, - 11.84, 11.96, 12.00, 12.43, 12.45, 12.55, 12.46, 12.70, 12.66, 11.79, - 12.00, 12.20, 12.29, 12.20, 12.39, 12.71, 12.83, 12.80, 12.67, 12.37, - 12.51, 12.34, 12.33, 12.38, 12.71, 12.46, 12.22, 12.16, 12.19, 11.99, - 12.20, 12.25, 12.45, 12.68, 12.41, 12.00, 12.15, 12.32, 12.48, 12.37, - 12.40, 12.63, 12.83, 12.51, 12.48, 12.39, 12.55, 12.24, 12.18, 12.39, - 12.30, 12.18, 12.24, 12.40, 12.44, 12.46, 12.32, 12.38, 12.11, 11.65, - 11.88, 11.86, 11.84, 11.83, 11.88, 11.72, 11.58, 11.39, 11.15, 11.36, - 11.43, 11.67, 11.52, 11.15, 11.11, 11.00, 10.85, 10.63, 10.52, 10.40, - 10.41, 10.66, 10.56, 10.30, 10.10, 10.15, 10.01, 9.96, 10.00, 10.15, - 10.22, 10.38, 10.51, 10.68, 10.52, 10.40, 10.06, 9.91, 9.97, 10.27, - 10.52, 10.38, 10.45, 10.31, 10.22, 10.21, 10.26, 10.26, 10.35, 10.52, - 10.25, 10.18, 9.95, 9.96, 9.97, 9.93, 9.46, 9.30, 9.49, 9.53, 9.40, - 9.31, 9.28, 9.26, 9.12, 9.14, 9.15, 9.12, 9.34, 9.33, 9.18, 9.05, 8.95, - 8.91, 8.83, 8.88, 9.01, 9.12, 8.99, 8.82, 8.96, 9.09, 9.18, 9.24, 9.30, - 9.23, 9.25, 9.42, 9.41, 9.49, 9.60, 9.51, 9.52, 9.40, 9.42, 9.41, 9.38, - 9.31, 9.29, 9.25, 9.31, 9.35, 9.39, 9.66, 9.93, 10.06, 10.13, 10.17, - 10.12, 10.39, 10.26, 10.28, 10.45, 10.35, 10.36, 10.26, 10.06, 9.86, - 10.02, 9.81, 9.88, 9.71, 9.76, 9.96, 10.13, 9.99, 10.02, 9.95, 10.05, - 10.09, 10.09, 10.22, 10.26, 10.33, 10.13, 10.03, 9.97, 10.01, 10.28, - 10.22, 10.60, 10.88, 11.15, 11.13, 11.26, 11.04, 10.89, 10.71, 10.96, - 10.86, 10.62, 10.46, 10.38, 10.65, 10.76, 10.80, 10.96, 10.97, 11.10, - 10.98, 11.32, 11.33, 11.40, 11.23, 11.18, 11.19, 11.26, 11.41, 11.40, - 11.43, 11.21, 11.03, 11.14, 11.40, 11.62, 11.58, 11.47, 11.67, 12.31, - 12.36, 12.52, 12.76, ]), - - 'close': np.asarray([ 11.13, 11.30, 11.59, 11.71, 11.80, 11.80, 12.07, 12.14, - 12.04, 12.02, 12.34, 12.61, 12.59, 12.66, 12.82, 12.93, 12.79, 12.21, - 12.29, 12.42, 12.33, 12.26, 12.79, 12.96, 12.88, 12.84, 12.69, 12.44, - 12.54, 12.48, 12.38, 12.74, 12.75, 12.53, 12.28, 12.40, 12.23, 12.30, - 12.25, 12.38, 12.66, 12.72, 12.46, 12.09, 12.24, 12.46, 12.58, 12.43, - 12.70, 12.88, 12.90, 12.51, 12.63, 12.54, 12.57, 12.32, 12.32, 12.48, - 12.32, 12.32, 12.50, 12.48, 12.62, 12.64, 12.51, 12.47, 12.22, 11.79, - 11.91, 12.07, 11.92, 11.88, 11.91, 11.79, 11.66, 11.41, 11.35, 11.39, - 11.73, 11.87, 11.60, 11.28, 11.23, 11.10, 10.92, 10.67, 10.66, 10.61, - 10.69, 10.71, 10.58, 10.32, 10.15, 10.16, 10.01, 10.01, 10.20, 10.19, - 10.41, 10.59, 10.60, 10.84, 10.66, 10.56, 10.12, 10.04, 10.19, 10.57, - 10.55, 10.66, 10.45, 10.50, 10.30, 10.41, 10.35, 10.34, 10.56, 10.65, - 10.27, 10.19, 10.01, 10.01, 10.02, 10.09, 9.59, 9.39, 9.60, 9.57, 9.50, - 9.45, 9.35, 9.33, 9.13, 9.27, 9.26, 9.34, 9.38, 9.35, 9.21, 9.17, 9.06, - 8.97, 8.96, 9.00, 9.10, 9.24, 9.04, 8.92, 9.09, 9.15, 9.31, 9.35, 9.34, - 9.35, 9.40, 9.44, 9.49, 9.59, 9.63, 9.63, 9.53, 9.49, 9.45, 9.49, 9.39, - 9.34, 9.32, 9.31, 9.34, 9.41, 9.57, 9.92, 10.14, 10.11, 10.15, 10.21, - 10.34, 10.53, 10.39, 10.42, 10.59, 10.44, 10.40, 10.32, 10.09, 10.01, - 10.02, 9.86, 9.93, 9.79, 9.94, 10.11, 10.16, 10.05, 10.10, 9.98, 10.14, - 10.12, 10.22, 10.30, 10.41, 10.43, 10.18, 10.17, 10.00, 10.17, 10.39, - 10.36, 11.16, 11.25, 11.17, 11.25, 11.42, 11.06, 10.90, 10.93, 10.97, - 11.00, 10.67, 10.57, 10.50, 10.83, 10.85, 10.92, 11.10, 11.11, 11.10, - 11.25, 11.53, 11.45, 11.41, 11.31, 11.31, 11.24, 11.48, 11.47, 11.49, - 11.47, 11.27, 11.10, 11.39, 11.67, 11.73, 11.77, 11.86, 12.40, 12.79, - 12.76, 12.87, 12.95, ]), - - 'volume': np.asarray([ 45709900, 79725200, 67877500, 59840700, 53981500, - 121750600, 63806000, 48687700, 46366700, 44398400, 47102700, 70894200, - 43705700, 49379700, 45768400, 54021600, 75470700, 142155300, 57752600, - 46412100, 71669000, 48347600, 78851200, 46363300, 39413500, 35352500, - 52290500, 52505500, 34474400, 39627900, 38174800, 49164400, 30778000, - 38409800, 43326000, 36747600, 31399300, 38703400, 30789000, 62093700, - 68262000, 49063500, 28433700, 57374500, 28440900, 37099100, 36159300, - 30275700, 42783600, 47578500, 55286600, 77119600, 52445700, 40214400, - 27521400, 50117100, 44755000, 26692200, 35070700, 41051700, 51039700, - 36381000, 43966900, 97034200, 51505000, 37939500, 42515300, 77370300, - 34724400, 26988800, 39675000, 31903500, 35981200, 32314000, 48169200, - 52631000, 31269200, 38615200, 45185400, 40889300, 83070300, 46156300, - 43959200, 48572900, 40238400, 53268400, 33235200, 46174500, 54501200, - 42526100, 36561300, 50225200, 41886500, 44321300, 49648900, 50572000, - 38134900, 44295700, 75647800, 45334100, 30430800, 43760600, 44592100, - 54297000, 68237000, 57305600, 38326200, 50458000, 33846100, 30811600, - 35811400, 35130800, 53471900, 37531800, 39442000, 27361000, 37155900, - 40810100, 40062800, 56427300, 44297600, 31871900, 33278900, 38648400, - 138138600, 63388600, 49629300, 31783900, 30355400, 37441600, 33516600, - 32028700, 55111000, 30248300, 28838200, 29510000, 31010000, 33615000, - 27968300, 33773800, 53519200, 44338200, 51798900, 67986800, 40958300, - 41360900, 65973000, 45326500, 38631400, 23819100, 43574500, 22630300, - 30909800, 19618800, 21122000, 21129500, 21308300, 34323700, 34533900, - 38923800, 26281100, 26965500, 23537700, 19574600, 22754200, 23084400, - 26115700, 16459400, 28029200, 37965000, 40608800, 67996400, 60617000, - 43381300, 28165300, 28046500, 50920200, 55934300, 31922200, 34937000, - 42403000, 28755100, 35459800, 28557900, 36866300, 44362600, 25740900, - 44586300, 33445600, 63630000, 51023800, 46855500, 40693900, 25473900, - 38235700, 33951600, 39328700, 24108500, 26466500, 32788400, 29346300, - 44041700, 40493000, 39149700, 32476500, 49339800, 59290900, 43485500, - 137960900, 88770100, 53399000, 37995000, 51232200, 56674900, 45948800, - 40703600, 25723100, 33342900, 45664700, 48879800, 45346200, 39359100, - 34739800, 21181700, 16032200, 26831700, 37610000, 38496900, 57289300, - 41329600, 47746300, 37760200, 33152400, 31065800, 38404500, 26025200, - 36326900, 31099900, 35443200, 36933500, 46983300, 61810400, 54884700, - 47750100, 94489300, 91734900, 140331900, 108315100, 95668600, 106908900 ]), - } - -series = np.array([ 91.50, 94.81, 94.38, 95.09, 93.78, 94.62, 92.53, 92.75, - 90.31, 92.47, 96.12, 97.25, 98.50, 89.88, 91.00, 92.81, 89.16, 89.34, - 91.62, 89.88, 88.38, 87.62, 84.78, 83.00, 83.50, 81.38, 84.44, 89.25, - 86.38, 86.25, 85.25, 87.12, 85.81, 88.97, 88.47, 86.88, 86.81, 84.88, - 84.19, 83.88, 83.38, 85.50, 89.19, 89.44, 91.09, 90.75, 91.44, 89.00, - 91.00, 90.50, 89.03, 88.81, 84.28, 83.50, 82.69, 84.75, 85.66, 86.19, - 88.94, 89.28, 88.62, 88.50, 91.97, 91.50, 93.25, 93.50, 93.16, 91.72, - 90.00, 89.69, 88.88, 85.19, 83.38, 84.88, 85.94, 97.25, 99.88, 104.94, - 106.00, 102.50, 102.41, 104.59, 106.12, 106.00, 106.06, 104.62, 108.62, - 109.31, 110.50, 112.75, 123.00, 119.62, 118.75, 119.25, 117.94, 116.44, - 115.19, 111.88, 110.59, 118.12, 116.00, 116.00, 112.00, 113.75, 112.94, - 116.00, 120.50, 116.62, 117.00, 115.25, 114.31, 115.50, 115.87, 120.69, - 120.19, 120.75, 124.75, 123.37, 122.94, 122.56, 123.12, 122.56, 124.62, - 129.25, 131.00, 132.25, 131.00, 132.81, 134.00, 137.38, 137.81, 137.88, - 137.25, 136.31, 136.25, 134.63, 128.25, 129.00, 123.87, 124.81, 123.00, - 126.25, 128.38, 125.37, 125.69, 122.25, 119.37, 118.50, 123.19, 123.50, - 122.19, 119.31, 123.31, 121.12, 123.37, 127.37, 128.50, 123.87, 122.94, - 121.75, 124.44, 122.00, 122.37, 122.94, 124.00, 123.19, 124.56, 127.25, - 125.87, 128.86, 132.00, 130.75, 134.75, 135.00, 132.38, 133.31, 131.94, - 130.00, 125.37, 130.13, 127.12, 125.19, 122.00, 125.00, 123.00, 123.50, - 120.06, 121.00, 117.75, 119.87, 122.00, 119.19, 116.37, 113.50, 114.25, - 110.00, 105.06, 107.00, 107.87, 107.00, 107.12, 107.00, 91.00, 93.94, - 93.87, 95.50, 93.00, 94.94, 98.25, 96.75, 94.81, 94.37, 91.56, 90.25, - 93.94, 93.62, 97.00, 95.00, 95.87, 94.06, 94.62, 93.75, 98.00, 103.94, - 107.87, 106.06, 104.50, 105.00, 104.19, 103.06, 103.42, 105.27, 111.87, - 116.00, 116.62, 118.28, 113.37, 109.00, 109.70, 109.25, 107.00, 109.19, - 110.00, 109.20, 110.12, 108.00, 108.62, 109.75, 109.81, 109.00, 108.75, - 107.87 ]) - -def assert_np_arrays_equal(expected, got): - for i, value in enumerate(expected): - if np.isnan(value): - assert np.isnan(got[i]) - else: - assert value == got[i] - -def assert_np_arrays_not_equal(expected, got): - ''' Verifies expected and got have the same number of leading nan fields, - followed by different floats. - ''' - nans = [] - equals = [] - for i, value in enumerate(expected): - if np.isnan(value): - assert np.isnan(got[i]) - nans.append(value) - else: - try: - assert value != got[i] - except AssertionError: - equals.append(got[i]) - if len(equals) == len(expected[len(nans):]): - raise AssertionError('Arrays were equal.') - elif equals: - print('Arrays had %i/%i equivalent values.' % (len(equals), len(expected[len(nans):]))) diff --git a/tests/test_func.py b/tests/test_func.py index 8b2a40a4e..643f1b504 100644 --- a/tests/test_func.py +++ b/tests/test_func.py @@ -1,21 +1,25 @@ import numpy as np +from numpy.testing import assert_array_equal import pytest import talib from talib import func -from talib.test_data import series, assert_np_arrays_equal, assert_np_arrays_not_equal + def test_talib_version(): assert talib.__ta_version__[:5] == b'0.4.0' + def test_num_functions(): assert len(talib.get_functions()) == 158 + def test_input_wrong_type(): a1 = np.arange(10, dtype=int) with pytest.raises(Exception): func.MOM(a1) + def test_input_lengths(): a1 = np.arange(10, dtype=float) a2 = np.arange(11, dtype=float) @@ -28,38 +32,42 @@ def test_input_lengths(): with pytest.raises(Exception): func.BOP(a1, a1, a1, a2) + def test_input_nans(): a1 = np.arange(10, dtype=float) a2 = np.arange(10, dtype=float) a2[0] = np.nan a2[1] = np.nan r1, r2 = func.AROON(a1, a2, 2) - assert_np_arrays_equal(r1, [np.nan, np.nan, np.nan, np.nan, 0, 0, 0, 0, 0, 0]) - assert_np_arrays_equal(r2, [np.nan, np.nan, np.nan, np.nan, 100, 100, 100, 100, 100, 100]) + assert_array_equal(r1, [np.nan, np.nan, np.nan, np.nan, 0, 0, 0, 0, 0, 0]) + assert_array_equal(r2, [np.nan, np.nan, np.nan, np.nan, 100, 100, 100, 100, 100, 100]) r1, r2 = func.AROON(a2, a1, 2) - assert_np_arrays_equal(r1, [np.nan, np.nan, np.nan, np.nan, 0, 0, 0, 0, 0, 0]) - assert_np_arrays_equal(r2, [np.nan, np.nan, np.nan, np.nan, 100, 100, 100, 100, 100, 100]) + assert_array_equal(r1, [np.nan, np.nan, np.nan, np.nan, 0, 0, 0, 0, 0, 0]) + assert_array_equal(r2, [np.nan, np.nan, np.nan, np.nan, 100, 100, 100, 100, 100, 100]) + def test_unstable_period(): a = np.arange(10, dtype=float) r = func.EMA(a, 3) - assert_np_arrays_equal(r, [np.nan, np.nan, 1, 2, 3, 4, 5, 6, 7, 8]) + assert_array_equal(r, [np.nan, np.nan, 1, 2, 3, 4, 5, 6, 7, 8]) talib.set_unstable_period('EMA', 5) r = func.EMA(a, 3) - assert_np_arrays_equal(r, [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 6, 7, 8]) + assert_array_equal(r, [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 6, 7, 8]) talib.set_unstable_period('EMA', 0) + def test_compatibility(): a = np.arange(10, dtype=float) talib.set_compatibility(0) r = func.EMA(a, 3) - assert_np_arrays_equal(r, [np.nan, np.nan, 1, 2, 3, 4, 5, 6, 7, 8]) + assert_array_equal(r, [np.nan, np.nan, 1, 2, 3, 4, 5, 6, 7, 8]) talib.set_compatibility(1) r = func.EMA(a, 3) - assert_np_arrays_equal(r, [np.nan, np.nan,1.25,2.125,3.0625,4.03125,5.015625,6.0078125,7.00390625,8.001953125]) + assert_array_equal(r, [np.nan, np.nan,1.25,2.125,3.0625,4.03125,5.015625,6.0078125,7.00390625,8.001953125]) talib.set_compatibility(0) -def test_MIN(): + +def test_MIN(series): result = func.MIN(series, timeperiod=4) i = np.where(~np.isnan(result))[0][0] assert len(series) == len(result) @@ -69,9 +77,10 @@ def test_MIN(): assert result[i + 4] == 92.530 values = np.array([np.nan, 5., 4., 3., 5., 7.]) result = func.MIN(values, timeperiod=2) - assert_np_arrays_equal(result, [np.nan, np.nan, 4, 3, 3, 5]) + assert_array_equal(result, [np.nan, np.nan, 4, 3, 3, 5]) + -def test_MAX(): +def test_MAX(series): result = func.MAX(series, timeperiod=4) i = np.where(~np.isnan(result))[0][0] assert len(series) == len(result) @@ -80,31 +89,38 @@ def test_MAX(): assert result[i + 4] == 94.620 assert result[i + 5] == 94.620 + def test_MOM(): values = np.array([90.0,88.0,89.0]) result = func.MOM(values, timeperiod=1) - assert_np_arrays_equal(result, [np.nan, -2, 1]) + assert_array_equal(result, [np.nan, -2, 1]) result = func.MOM(values, timeperiod=2) - assert_np_arrays_equal(result, [np.nan, np.nan, -1]) + assert_array_equal(result, [np.nan, np.nan, -1]) result = func.MOM(values, timeperiod=3) - assert_np_arrays_equal(result, [np.nan, np.nan, np.nan]) + assert_array_equal(result, [np.nan, np.nan, np.nan]) result = func.MOM(values, timeperiod=4) - assert_np_arrays_equal(result, [np.nan, np.nan, np.nan]) + assert_array_equal(result, [np.nan, np.nan, np.nan]) + -def test_BBANDS(): - upper, middle, lower = func.BBANDS(series, timeperiod=20, - nbdevup=2.0, nbdevdn=2.0, - matype=talib.MA_Type.EMA) +def test_BBANDS(series): + upper, middle, lower = func.BBANDS( + series, + timeperiod=20, + nbdevup=2.0, + nbdevdn=2.0, + matype=talib.MA_Type.EMA + ) i = np.where(~np.isnan(upper))[0][0] assert len(upper) == len(middle) == len(lower) == len(series) - #assert abs(upper[i + 0] - 98.0734) < 1e-3 + # assert abs(upper[i + 0] - 98.0734) < 1e-3 assert abs(middle[i + 0] - 92.8910) < 1e-3 assert abs(lower[i + 0] - 87.7086) < 1e-3 - #assert abs(upper[i + 13] - 93.674) < 1e-3 + # assert abs(upper[i + 13] - 93.674) < 1e-3 assert abs(middle[i + 13] - 87.679) < 1e-3 assert abs(lower[i + 13] - 81.685) < 1e-3 -def test_DEMA(): + +def test_DEMA(series): result = func.DEMA(series) i = np.where(~np.isnan(result))[0][0] assert len(series) == len(result) @@ -113,13 +129,15 @@ def test_DEMA(): assert abs(result[i + 3] - 87.089) < 1e-3 assert abs(result[i + 4] - 87.656) < 1e-3 -def test_EMAEMA(): + +def test_EMAEMA(series): result = func.EMA(series, timeperiod=2) result = func.EMA(result, timeperiod=2) i = np.where(~np.isnan(result))[0][0] assert len(series) == len(result) assert i == 2 + def test_CDL3BLACKCROWS(): o = np.array([39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 40.32, 40.51, 38.09, 35.00, 27.66, 30.80]) h = np.array([40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 41.69, 40.84, 38.12, 35.50, 31.74, 32.51]) @@ -127,7 +145,8 @@ def test_CDL3BLACKCROWS(): c = np.array([40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.29, 40.46, 37.08, 33.37, 30.03, 31.46, 28.31]) result = func.CDL3BLACKCROWS(o, h, l, c) - assert_np_arrays_equal(result, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0]) + assert_array_equal(result, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0]) + def test_RSI(): a = np.array([0.00000024, 0.00000024, 0.00000024, @@ -138,24 +157,26 @@ def test_RSI(): 0.00000024, 0.00000024, 0.00000023, 0.00000023, 0.00000023], dtype='float64') result = func.RSI(a, 10) - assert_np_arrays_equal(result, [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,0,0,0,0,0,0,0,0,0,0]) + assert_array_equal(result, [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,0,0,0,0,0,0,0,0,0,0]) result = func.RSI(a * 100000, 10) - assert_np_arrays_equal(result, [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,33.333333333333329,51.351351351351347,39.491916859122398,51.84807024709005,42.25953803191981,52.101824405061215,52.101824405061215,43.043664867691085,43.043664867691085,43.043664867691085]) + assert_array_equal(result, [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,33.333333333333329,51.351351351351347,39.491916859122398,51.84807024709005,42.25953803191981,52.101824405061215,52.101824405061215,43.043664867691085,43.043664867691085,43.043664867691085]) + def test_MAVP(): a = np.array([1,5,3,4,7,3,8,1,4,6], dtype=float) b = np.array([2,4,2,4,2,4,2,4,2,4], dtype=float) result = func.MAVP(a, b, minperiod=2, maxperiod=4) - assert_np_arrays_equal(result, [np.nan,np.nan,np.nan,3.25,5.5,4.25,5.5,4.75,2.5,4.75]) + assert_array_equal(result, [np.nan,np.nan,np.nan,3.25,5.5,4.25,5.5,4.75,2.5,4.75]) sma2 = func.SMA(a, 2) - assert_np_arrays_equal(result[4::2], sma2[4::2]) + assert_array_equal(result[4::2], sma2[4::2]) sma4 = func.SMA(a, 4) - assert_np_arrays_equal(result[3::2], sma4[3::2]) + assert_array_equal(result[3::2], sma4[3::2]) result = func.MAVP(a, b, minperiod=2, maxperiod=3) - assert_np_arrays_equal(result, [np.nan,np.nan,4,4,5.5,4.666666666666667,5.5,4,2.5,3.6666666666666665]) + assert_array_equal(result, [np.nan,np.nan,4,4,5.5,4.666666666666667,5.5,4,2.5,3.6666666666666665]) sma3 = func.SMA(a, 3) - assert_np_arrays_equal(result[2::2], sma2[2::2]) - assert_np_arrays_equal(result[3::2], sma3[3::2]) + assert_array_equal(result[2::2], sma2[2::2]) + assert_array_equal(result[3::2], sma3[3::2]) + def test_MAXINDEX(): import talib as func @@ -163,7 +184,7 @@ def test_MAXINDEX(): a = np.array([1., 2, 3, 4, 5, 6, 7, 8, 7, 7, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5, 15]) b = func.MA(a, 10) c = func.MAXINDEX(b, 10) - assert_np_arrays_equal(c, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,21]) + assert_array_equal(c, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,21]) d = np.array([1., 2, 3]) e = func.MAXINDEX(d, 10) - assert_np_arrays_equal(e, [0,0,0]) + assert_array_equal(e, [0,0,0]) diff --git a/tests/test_pandas.py b/tests/test_pandas.py index d1120ca0d..78f1a1236 100644 --- a/tests/test_pandas.py +++ b/tests/test_pandas.py @@ -1,49 +1,51 @@ import numpy as np +from numpy.testing import assert_array_equal import pandas as pd import talib -from talib.test_data import series, assert_np_arrays_equal + def test_MOM(): values = pd.Series([90.0,88.0,89.0], index=[10, 20, 30]) result = talib.MOM(values, timeperiod=1) assert isinstance(result, pd.Series) - assert_np_arrays_equal(result.values, [np.nan, -2, 1]) - assert_np_arrays_equal(result.index, [10, 20, 30]) + assert_array_equal(result.values, [np.nan, -2, 1]) + assert_array_equal(result.index, [10, 20, 30]) result = talib.MOM(values, timeperiod=2) assert isinstance(result, pd.Series) - assert_np_arrays_equal(result.values, [np.nan, np.nan, -1]) - assert_np_arrays_equal(result.index, [10, 20, 30]) + assert_array_equal(result.values, [np.nan, np.nan, -1]) + assert_array_equal(result.index, [10, 20, 30]) result = talib.MOM(values, timeperiod=3) assert isinstance(result, pd.Series) - assert_np_arrays_equal(result.values, [np.nan, np.nan, np.nan]) - assert_np_arrays_equal(result.index, [10, 20, 30]) + assert_array_equal(result.values, [np.nan, np.nan, np.nan]) + assert_array_equal(result.index, [10, 20, 30]) result = talib.MOM(values, timeperiod=4) assert isinstance(result, pd.Series) - assert_np_arrays_equal(result.values, [np.nan, np.nan, np.nan]) - assert_np_arrays_equal(result.index, [10, 20, 30]) + assert_array_equal(result.values, [np.nan, np.nan, np.nan]) + assert_array_equal(result.index, [10, 20, 30]) + def test_MAVP(): a = pd.Series([1,5,3,4,7,3,8,1,4,6], index=range(10, 20), dtype=float) b = pd.Series([2,4,2,4,2,4,2,4,2,4], index=range(20, 30), dtype=float) result = talib.MAVP(a, b, minperiod=2, maxperiod=4) assert isinstance(result, pd.Series) - assert_np_arrays_equal(result.values, [np.nan,np.nan,np.nan,3.25,5.5,4.25,5.5,4.75,2.5,4.75]) - assert_np_arrays_equal(result.index, range(10, 20)) + assert_array_equal(result.values, [np.nan,np.nan,np.nan,3.25,5.5,4.25,5.5,4.75,2.5,4.75]) + assert_array_equal(result.index, range(10, 20)) sma2 = talib.SMA(a, 2) assert isinstance(sma2, pd.Series) - assert_np_arrays_equal(sma2.index, range(10, 20)) - assert_np_arrays_equal(result.values[4::2], sma2.values[4::2]) + assert_array_equal(sma2.index, range(10, 20)) + assert_array_equal(result.values[4::2], sma2.values[4::2]) sma4 = talib.SMA(a, 4) assert isinstance(sma4, pd.Series) - assert_np_arrays_equal(sma4.index, range(10, 20)) - assert_np_arrays_equal(result.values[3::2], sma4.values[3::2]) + assert_array_equal(sma4.index, range(10, 20)) + assert_array_equal(result.values[3::2], sma4.values[3::2]) result = talib.MAVP(a, b, minperiod=2, maxperiod=3) assert isinstance(result, pd.Series) - assert_np_arrays_equal(result.values, [np.nan,np.nan,4,4,5.5,4.666666666666667,5.5,4,2.5,3.6666666666666665]) - assert_np_arrays_equal(result.index, range(10, 20)) + assert_array_equal(result.values, [np.nan,np.nan,4,4,5.5,4.666666666666667,5.5,4,2.5,3.6666666666666665]) + assert_array_equal(result.index, range(10, 20)) sma3 = talib.SMA(a, 3) assert isinstance(sma3, pd.Series) - assert_np_arrays_equal(sma3.index, range(10, 20)) - assert_np_arrays_equal(result.values[2::2], sma2.values[2::2]) - assert_np_arrays_equal(result.values[3::2], sma3.values[3::2]) + assert_array_equal(sma3.index, range(10, 20)) + assert_array_equal(result.values[2::2], sma2.values[2::2]) + assert_array_equal(result.values[3::2], sma3.values[3::2]) diff --git a/tests/test_polars.py b/tests/test_polars.py index 60f390e80..5bb7f7d24 100644 --- a/tests/test_polars.py +++ b/tests/test_polars.py @@ -1,44 +1,46 @@ import numpy as np +from numpy.testing import assert_array_equal import polars as pl import talib from talib import abstract -from talib.test_data import series, assert_np_arrays_equal def test_MOM(): values = pl.Series([90.0,88.0,89.0]) result = talib.MOM(values, timeperiod=1) assert isinstance(result, pl.Series) - assert_np_arrays_equal(result.to_numpy(), [np.nan, -2, 1]) + assert_array_equal(result.to_numpy(), [np.nan, -2, 1]) result = talib.MOM(values, timeperiod=2) assert isinstance(result, pl.Series) - assert_np_arrays_equal(result.to_numpy(), [np.nan, np.nan, -1]) + assert_array_equal(result.to_numpy(), [np.nan, np.nan, -1]) result = talib.MOM(values, timeperiod=3) assert isinstance(result, pl.Series) - assert_np_arrays_equal(result.to_numpy(), [np.nan, np.nan, np.nan]) + assert_array_equal(result.to_numpy(), [np.nan, np.nan, np.nan]) result = talib.MOM(values, timeperiod=4) assert isinstance(result, pl.Series) - assert_np_arrays_equal(result.to_numpy(), [np.nan, np.nan, np.nan]) + assert_array_equal(result.to_numpy(), [np.nan, np.nan, np.nan]) + def test_MAVP(): a = pl.Series([1,5,3,4,7,3,8,1,4,6], dtype=pl.Float64) b = pl.Series([2,4,2,4,2,4,2,4,2,4], dtype=pl.Float64) result = talib.MAVP(a, b, minperiod=2, maxperiod=4) assert isinstance(result, pl.Series) - assert_np_arrays_equal(result.to_numpy(), [np.nan,np.nan,np.nan,3.25,5.5,4.25,5.5,4.75,2.5,4.75]) + assert_array_equal(result.to_numpy(), [np.nan,np.nan,np.nan,3.25,5.5,4.25,5.5,4.75,2.5,4.75]) sma2 = talib.SMA(a, 2) assert isinstance(sma2, pl.Series) - assert_np_arrays_equal(result.to_numpy()[4::2], sma2.to_numpy()[4::2]) + assert_array_equal(result.to_numpy()[4::2], sma2.to_numpy()[4::2]) sma4 = talib.SMA(a, 4) assert isinstance(sma4, pl.Series) - assert_np_arrays_equal(result.to_numpy()[3::2], sma4.to_numpy()[3::2]) + assert_array_equal(result.to_numpy()[3::2], sma4.to_numpy()[3::2]) result = talib.MAVP(a, b, minperiod=2, maxperiod=3) assert isinstance(result, pl.Series) - assert_np_arrays_equal(result.to_numpy(), [np.nan,np.nan,4,4,5.5,4.666666666666667,5.5,4,2.5,3.6666666666666665]) + assert_array_equal(result.to_numpy(), [np.nan,np.nan,4,4,5.5,4.666666666666667,5.5,4,2.5,3.6666666666666665]) sma3 = talib.SMA(a, 3) assert isinstance(sma3, pl.Series) - assert_np_arrays_equal(result.to_numpy()[2::2], sma2.to_numpy()[2::2]) - assert_np_arrays_equal(result.to_numpy()[3::2], sma3.to_numpy()[3::2]) + assert_array_equal(result.to_numpy()[2::2], sma2.to_numpy()[2::2]) + assert_array_equal(result.to_numpy()[3::2], sma3.to_numpy()[3::2]) + def test_TEVA(): size = 50 @@ -57,7 +59,7 @@ def test_TEVA(): inputs = abstract.TEMA.get_input_arrays() assert inputs.columns == df.columns for column in df.columns: - assert_np_arrays_equal(inputs[column].to_numpy(), df[column].to_numpy()) + assert_array_equal(inputs[column].to_numpy(), df[column].to_numpy()) tema2 = abstract.TEMA(df, timeperiod=9) assert isinstance(tema2, pl.Series) @@ -65,6 +67,6 @@ def test_TEVA(): inputs = abstract.TEMA.get_input_arrays() assert inputs.columns == df.columns for column in df.columns: - assert_np_arrays_equal(inputs[column].to_numpy(), df[column].to_numpy()) + assert_array_equal(inputs[column].to_numpy(), df[column].to_numpy()) - assert_np_arrays_equal(tema1.to_numpy(), tema2.to_numpy()) + assert_array_equal(tema1.to_numpy(), tema2.to_numpy()) diff --git a/tests/test_stream.py b/tests/test_stream.py index 2374640b4..68fb18602 100644 --- a/tests/test_stream.py +++ b/tests/test_stream.py @@ -4,6 +4,7 @@ import talib from talib import stream + def test_streaming(): a = np.array([1,1,2,3,5,8,13], dtype=float) r = stream.MOM(a, timeperiod=1) @@ -21,6 +22,7 @@ def test_streaming(): r = stream.MOM(a, timeperiod=7) assert np.isnan(r) + def test_streaming_pandas(): a = pd.Series([1,1,2,3,5,8,13]) r = stream.MOM(a, timeperiod=1) @@ -38,6 +40,7 @@ def test_streaming_pandas(): r = stream.MOM(a, timeperiod=7) assert np.isnan(r) + def test_CDL3BLACKCROWS(): o = np.array([39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 40.32, 40.51, 38.09, 35.00]) h = np.array([40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 41.69, 40.84, 38.12, 35.50]) @@ -47,6 +50,7 @@ def test_CDL3BLACKCROWS(): r = stream.CDL3BLACKCROWS(o, h, l, c) assert r == -100 + def test_CDL3BLACKCROWS_pandas(): o = pd.Series([39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 39.00, 40.32, 40.51, 38.09, 35.00]) h = pd.Series([40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 40.84, 41.69, 40.84, 38.12, 35.50]) @@ -56,6 +60,7 @@ def test_CDL3BLACKCROWS_pandas(): r = stream.CDL3BLACKCROWS(o, h, l, c) assert r == -100 + def test_MAXINDEX(): a = np.array([1., 2, 3, 4, 5, 6, 7, 8, 7, 7, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5, 15]) r = stream.MAXINDEX(a, 10) From aa8db03a0ea1823d6683aa685fc2f3c7a941580c Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Sun, 13 Feb 2022 00:40:55 -0500 Subject: [PATCH 06/22] Working on release workflow. --- .github/workflows/release.yml | 42 ++++++++++++++++++++--------------- .github/workflows/tests.yml | 2 +- requirements_test.txt | 1 - tests/test_polars.py | 6 ++++- 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a26ac8ece..dfd828eef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,20 +1,31 @@ on: workflow_dispatch: push: - tags: - - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 + + # tags: + # - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 name: Creating release env: - CIBW_TEST_EXTRAS: test + CIBW_BEFORE_TEST: "pip install -r requirements_test.txt" CIBW_TEST_COMMAND: "pytest {project}/tests" CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" - CIBW_ARCHS_MACOS: "x86_64 universal2" - CIBW_BEFORE_BUILD_LINUX: "yum install -y gcc && curl -sL http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz && tar -zxvf ta-lib-0.4.0-src.tar.gz && rm ta-lib-0.4.0-src.tar.gz && cd ta-lib && ./configure && make && make install" + CIBW_ARCHS_MACOS: "x86_64 arm64" + CIBW_BEFORE_BUILD: "pip install -r requirements_dev.txt" + # Polars is needed for the test suite, and Polars currently is only building binary packages for py3.6. + # So, we have to install rust before every build. + CIBW_BEFORE_BUILD_LINUX: | + curl -L -s https://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -o ta.tar.gz && \ + tar -zxvf ta.tar.gz && \ + rm ta.tar.gz && \ + cd ta-lib && \ + ./configure && \ + make && \ + make install CIBW_BEFORE_BUILD_MACOS: "brew install ta-lib" - CIBW_BEFORE_BUILD_WINDOWS: "curl -sL http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip -o $HOME/ta-lib.zip --create-dirs && 7z x $HOME/ta-lib.zip -o/c/ta-lib && mv /c/ta-lib/ta-lib/* /c/ta-lib/ && rm -rf /c/ta-lib/ta-lib && cd /c/ta-lib/c/make/cdr/win32/msvc && nmake" - + CIBW_BEFORE_BUILD_WINDOWS: | + curl -L -s https://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip -o ta.zip && 7z x ta.zip -o/c/ta-lib && mv /c/ta-lib/ta-lib/* /c/ta-lib/ && rm -rf /c/ta-lib/ta-lib && cd /c/ta-lib/c/make/cdr/win32/msvc && nmake jobs: # Build & test simple source release before wasting hours building and @@ -32,18 +43,15 @@ jobs: - name: Installing python build dependencies run: | - python -m pip install --upgrade pip - python -m pip install --upgrade setuptools + python -m pip install --upgrade pip wheel + python -m pip install -r requirements.txt + python -m pip install -r requirements_test.txt + pip install flake8 pytest - name: Building source distribution run: | - pip install -e ".[release]" python setup.py sdist - - name: Ensuring documentation builds - run: | - cd docs && make clean && make html - - uses: actions/upload-artifact@v2 with: path: dist/*.tar.gz @@ -53,12 +61,10 @@ jobs: name: "[${{ strategy.job-index }}/${{ strategy.job-total }}] py${{ matrix.py }} on ${{ matrix.os }}" runs-on: ${{ matrix.os }} strategy: - fail-fast: true + fail-fast: false matrix: os: [ubuntu-20.04, windows-2019, macos-10.15] - # cp - CPython - # pp - PyPy - py: [cp37", "cp38", "cp39", "cp310", "pp37"] + py: ["cp37", "cp38", "cp39", "cp310"] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c067c716c..1b0b35cbf 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -37,7 +37,7 @@ jobs: python -m pip install --upgrade pip wheel python -m pip install -r requirements.txt python -m pip install -r requirements_test.txt - pip install flake8 pytest + pip install flake8 pytest polars env: DEPS_PATH: ${{ github.workspace }}/dependencies TA_INCLUDE_PATH: ${{ github.workspace }}/dependencies/include diff --git a/requirements_test.txt b/requirements_test.txt index 144e7c76c..dee812302 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,4 +1,3 @@ -r requirements.txt pandas pytest -polars diff --git a/tests/test_polars.py b/tests/test_polars.py index 5bb7f7d24..0b47355c6 100644 --- a/tests/test_polars.py +++ b/tests/test_polars.py @@ -1,10 +1,14 @@ import numpy as np +import pytest from numpy.testing import assert_array_equal -import polars as pl import talib from talib import abstract + +pl = pytest.importorskip('polars') + + def test_MOM(): values = pl.Series([90.0,88.0,89.0]) result = talib.MOM(values, timeperiod=1) From c6d0ae389ca89acc262cb71bffdb9486744bd677 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 09:21:37 -0400 Subject: [PATCH 07/22] Whatever github ci is running on gives less precise floating point results on ARM. --- tests/test_func.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_func.py b/tests/test_func.py index 643f1b504..5fffaad22 100644 --- a/tests/test_func.py +++ b/tests/test_func.py @@ -1,5 +1,5 @@ import numpy as np -from numpy.testing import assert_array_equal +from numpy.testing import assert_array_equal, assert_array_almost_equal import pytest import talib @@ -159,7 +159,7 @@ def test_RSI(): result = func.RSI(a, 10) assert_array_equal(result, [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,0,0,0,0,0,0,0,0,0,0]) result = func.RSI(a * 100000, 10) - assert_array_equal(result, [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,33.333333333333329,51.351351351351347,39.491916859122398,51.84807024709005,42.25953803191981,52.101824405061215,52.101824405061215,43.043664867691085,43.043664867691085,43.043664867691085]) + assert_array_almost_equal(result, [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,33.333333333333329,51.351351351351347,39.491916859122398,51.84807024709005,42.25953803191981,52.101824405061215,52.101824405061215,43.043664867691085,43.043664867691085,43.043664867691085]) def test_MAVP(): From 451747a205dbb4718547076f97d26779a32d3363 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 12:56:05 -0400 Subject: [PATCH 08/22] Try to simplify precision tests. --- tests/test_func.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/tests/test_func.py b/tests/test_func.py index 5fffaad22..7642fa0b4 100644 --- a/tests/test_func.py +++ b/tests/test_func.py @@ -1,5 +1,9 @@ import numpy as np -from numpy.testing import assert_array_equal, assert_array_almost_equal +from numpy.testing import ( + assert_array_equal, + assert_array_almost_equal, + assert_allclose +) import pytest import talib @@ -60,10 +64,10 @@ def test_compatibility(): a = np.arange(10, dtype=float) talib.set_compatibility(0) r = func.EMA(a, 3) - assert_array_equal(r, [np.nan, np.nan, 1, 2, 3, 4, 5, 6, 7, 8]) + assert_array_almost_equal(r, [np.nan, np.nan, 1, 2, 3, 4, 5, 6, 7, 8]) talib.set_compatibility(1) r = func.EMA(a, 3) - assert_array_equal(r, [np.nan, np.nan,1.25,2.125,3.0625,4.03125,5.015625,6.0078125,7.00390625,8.001953125]) + assert_array_almost_equal(r, [np.nan, np.nan,1.25,2.125,3.0625,4.03125,5.015625,6.0078125,7.00390625,8.001953125]) talib.set_compatibility(0) @@ -112,22 +116,20 @@ def test_BBANDS(series): ) i = np.where(~np.isnan(upper))[0][0] assert len(upper) == len(middle) == len(lower) == len(series) - # assert abs(upper[i + 0] - 98.0734) < 1e-3 - assert abs(middle[i + 0] - 92.8910) < 1e-3 - assert abs(lower[i + 0] - 87.7086) < 1e-3 - # assert abs(upper[i + 13] - 93.674) < 1e-3 - assert abs(middle[i + 13] - 87.679) < 1e-3 - assert abs(lower[i + 13] - 81.685) < 1e-3 + assert_allclose(middle[i + 0], 92.8910, atol=1e-3) + assert_allclose(lower[i + 0], 87.7086, atol=1e-3) + assert_allclose(middle[i + 13], 87.679, atol=1e-3) + assert_allclose(lower[i + 13], 81.685, atol=1e-3) def test_DEMA(series): result = func.DEMA(series) i = np.where(~np.isnan(result))[0][0] assert len(series) == len(result) - assert abs(result[i + 1] - 86.765) < 1e-3 - assert abs(result[i + 2] - 86.942) < 1e-3 - assert abs(result[i + 3] - 87.089) < 1e-3 - assert abs(result[i + 4] - 87.656) < 1e-3 + assert_allclose(result[i + 1], 86.765, atol=1e-3) + assert_allclose(result[i + 2], 86.942, atol=1e-3) + assert_allclose(result[i + 3], 87.089, atol=1e-3) + assert_allclose(result[i + 4], 87.656, atol=1e-3) def test_EMAEMA(series): @@ -166,16 +168,16 @@ def test_MAVP(): a = np.array([1,5,3,4,7,3,8,1,4,6], dtype=float) b = np.array([2,4,2,4,2,4,2,4,2,4], dtype=float) result = func.MAVP(a, b, minperiod=2, maxperiod=4) - assert_array_equal(result, [np.nan,np.nan,np.nan,3.25,5.5,4.25,5.5,4.75,2.5,4.75]) + assert_array_almost_equal(result, [np.nan,np.nan,np.nan,3.25,5.5,4.25,5.5,4.75,2.5,4.75]) sma2 = func.SMA(a, 2) - assert_array_equal(result[4::2], sma2[4::2]) + assert_array_almost_equal(result[4::2], sma2[4::2]) sma4 = func.SMA(a, 4) - assert_array_equal(result[3::2], sma4[3::2]) + assert_array_almost_equal(result[3::2], sma4[3::2]) result = func.MAVP(a, b, minperiod=2, maxperiod=3) - assert_array_equal(result, [np.nan,np.nan,4,4,5.5,4.666666666666667,5.5,4,2.5,3.6666666666666665]) + assert_array_almost_equal(result, [np.nan,np.nan,4,4,5.5,4.666666666666667,5.5,4,2.5,3.6666666666666665]) sma3 = func.SMA(a, 3) - assert_array_equal(result[2::2], sma2[2::2]) - assert_array_equal(result[3::2], sma3[3::2]) + assert_array_almost_equal(result[2::2], sma2[2::2]) + assert_array_almost_equal(result[3::2], sma3[3::2]) def test_MAXINDEX(): From 0b87c07bc229e49b8ee96dbc41d79c81d8a3ccdf Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 13:31:23 -0400 Subject: [PATCH 09/22] Squashed 'talib/upstream/' content from commit 4433a5b git-subtree-dir: talib/upstream git-subtree-split: 4433a5b186e36199d71a7b25c9e53fb90aa3db04 --- CHANGELOG.TXT | 32 + HISTORY.TXT | 115 + Makefile.am | 3 + Makefile.in | 661 + aclocal.m4 | 7231 +++++ autogen.sh | 11 + autom4te.cache/output.0 | 22212 ++++++++++++++++ autom4te.cache/output.1 | 22200 +++++++++++++++ autom4te.cache/requests | 210 + autom4te.cache/traces.0 | 9052 +++++++ autom4te.cache/traces.1 | 698 + config.guess | 1701 ++ config.sub | 1855 ++ configure | 22200 +++++++++++++++ configure.in | 47 + depcomp | 584 + include/Makefile.am | 11 + include/ta_abstract.h | 559 + include/ta_common.h | 149 + include/ta_config.h.in | 162 + include/ta_defs.h | 319 + include/ta_func.h | 5240 ++++ include/ta_libc.h | 51 + install-sh | 507 + ltmain.sh | 6871 +++++ missing | 367 + src/Makefile.am | 14 + src/Makefile.in | 560 + src/ta_abstract/Makefile.am | 49 + src/ta_abstract/Makefile.in | 1061 + src/ta_abstract/excel_glue.c | 202 + src/ta_abstract/frames/ta_frame.c | 3407 +++ src/ta_abstract/frames/ta_frame.h | 1481 ++ src/ta_abstract/ta_abstract.c | 1313 + src/ta_abstract/ta_def_ui.c | 554 + src/ta_abstract/ta_def_ui.h | 291 + src/ta_abstract/ta_frame_priv.h | 128 + src/ta_abstract/ta_func_api.c | 8962 +++++++ src/ta_abstract/ta_group_idx.c | 447 + src/ta_abstract/ta_java_defs.h | 360 + src/ta_abstract/tables/table_a.c | 373 + src/ta_abstract/tables/table_b.c | 196 + src/ta_abstract/tables/table_c.c | 1885 ++ src/ta_abstract/tables/table_d.c | 129 + src/ta_abstract/tables/table_e.c | 102 + src/ta_abstract/tables/table_f.c | 76 + src/ta_abstract/tables/table_g.c | 72 + src/ta_abstract/tables/table_h.c | 246 + src/ta_abstract/tables/table_i.c | 72 + src/ta_abstract/tables/table_j.c | 72 + src/ta_abstract/tables/table_k.c | 98 + src/ta_abstract/tables/table_l.c | 188 + src/ta_abstract/tables/table_m.c | 739 + src/ta_abstract/tables/table_n.c | 127 + src/ta_abstract/tables/table_o.c | 96 + src/ta_abstract/tables/table_p.c | 186 + src/ta_abstract/tables/table_q.c | 72 + src/ta_abstract/tables/table_r.c | 206 + src/ta_abstract/tables/table_s.c | 630 + src/ta_abstract/tables/table_t.c | 277 + src/ta_abstract/tables/table_u.c | 142 + src/ta_abstract/tables/table_v.c | 98 + src/ta_abstract/tables/table_w.c | 149 + src/ta_abstract/tables/table_x.c | 72 + src/ta_abstract/tables/table_y.c | 72 + src/ta_abstract/tables/table_z.c | 72 + .../templates/CoreAnnotated.java.template | 69 + .../templates/Makefile.am.template | 13 + .../templates/excel_glue.c.template | 45 + src/ta_abstract/templates/ta_frame.c.template | 63 + src/ta_abstract/templates/ta_frame.h.template | 60 + src/ta_abstract/templates/ta_func.h.template | 66 + .../templates/ta_func.swg.template | 45 + .../templates/ta_func_api.c.template | 55 + .../templates/ta_group_idx.c.template | 56 + .../templates/ta_java_defs.h.template | 45 + .../templates/ta_retcode.c.template | 92 + src/ta_abstract/templates/ta_x.c.template | 84 + src/ta_common/Makefile.am | 15 + src/ta_common/Makefile.in | 479 + src/ta_common/ta_global.c | 178 + src/ta_common/ta_global.h | 119 + src/ta_common/ta_magic_nb.h | 31 + src/ta_common/ta_memory.h | 341 + src/ta_common/ta_pragma.h | 87 + src/ta_common/ta_retcode.c | 109 + src/ta_common/ta_retcode.csv | 18 + src/ta_common/ta_version.c | 77 + src/ta_func/Makefile.am | 170 + src/ta_func/Makefile.in | 837 + src/ta_func/ta_ACOS.c | 241 + src/ta_func/ta_AD.c | 314 + src/ta_func/ta_ADD.c | 250 + src/ta_func/ta_ADOSC.c | 480 + src/ta_func/ta_ADX.c | 785 + src/ta_func/ta_ADXR.c | 374 + src/ta_func/ta_APO.c | 597 + src/ta_func/ta_AROON.c | 450 + src/ta_func/ta_AROONOSC.c | 456 + src/ta_func/ta_ASIN.c | 241 + src/ta_func/ta_ATAN.c | 241 + src/ta_func/ta_ATR.c | 453 + src/ta_func/ta_AVGPRICE.c | 278 + src/ta_func/ta_BBANDS.c | 643 + src/ta_func/ta_BETA.c | 484 + src/ta_func/ta_BOP.c | 279 + src/ta_func/ta_CCI.c | 416 + src/ta_func/ta_CDL2CROWS.c | 356 + src/ta_func/ta_CDL3BLACKCROWS.c | 384 + src/ta_func/ta_CDL3INSIDE.c | 375 + src/ta_func/ta_CDL3LINESTRIKE.c | 396 + src/ta_func/ta_CDL3OUTSIDE.c | 334 + src/ta_func/ta_CDL3STARSINSOUTH.c | 452 + src/ta_func/ta_CDL3WHITESOLDIERS.c | 476 + src/ta_func/ta_CDLABANDONEDBABY.c | 450 + src/ta_func/ta_CDLADVANCEBLOCK.c | 548 + src/ta_func/ta_CDLBELTHOLD.c | 376 + src/ta_func/ta_CDLBREAKAWAY.c | 383 + src/ta_func/ta_CDLCLOSINGMARUBOZU.c | 376 + src/ta_func/ta_CDLCONCEALBABYSWALL.c | 384 + src/ta_func/ta_CDLCOUNTERATTACK.c | 378 + src/ta_func/ta_CDLDARKCLOUDCOVER.c | 384 + src/ta_func/ta_CDLDOJI.c | 337 + src/ta_func/ta_CDLDOJISTAR.c | 368 + src/ta_func/ta_CDLDRAGONFLYDOJI.c | 365 + src/ta_func/ta_CDLENGULFING.c | 329 + src/ta_func/ta_CDLEVENINGDOJISTAR.c | 426 + src/ta_func/ta_CDLEVENINGSTAR.c | 412 + src/ta_func/ta_CDLGAPSIDESIDEWHITE.c | 385 + src/ta_func/ta_CDLGRAVESTONEDOJI.c | 365 + src/ta_func/ta_CDLHAMMER.c | 414 + src/ta_func/ta_CDLHANGINGMAN.c | 414 + src/ta_func/ta_CDLHARAMI.c | 366 + src/ta_func/ta_CDLHARAMICROSS.c | 366 + src/ta_func/ta_CDLHIGHWAVE.c | 359 + src/ta_func/ta_CDLHIKKAKE.c | 399 + src/ta_func/ta_CDLHIKKAKEMOD.c | 457 + src/ta_func/ta_CDLHOMINGPIGEON.c | 370 + src/ta_func/ta_CDLIDENTICAL3CROWS.c | 419 + src/ta_func/ta_CDLINNECK.c | 373 + src/ta_func/ta_CDLINVERTEDHAMMER.c | 389 + src/ta_func/ta_CDLKICKING.c | 406 + src/ta_func/ta_CDLKICKINGBYLENGTH.c | 407 + src/ta_func/ta_CDLLADDERBOTTOM.c | 361 + src/ta_func/ta_CDLLONGLEGGEDDOJI.c | 365 + src/ta_func/ta_CDLLONGLINE.c | 358 + src/ta_func/ta_CDLMARUBOZU.c | 360 + src/ta_func/ta_CDLMATCHINGLOW.c | 346 + src/ta_func/ta_CDLMATHOLD.c | 455 + src/ta_func/ta_CDLMORNINGDOJISTAR.c | 425 + src/ta_func/ta_CDLMORNINGSTAR.c | 411 + src/ta_func/ta_CDLONNECK.c | 373 + src/ta_func/ta_CDLPIERCING.c | 363 + src/ta_func/ta_CDLRICKSHAWMAN.c | 396 + src/ta_func/ta_CDLRISEFALL3METHODS.c | 422 + src/ta_func/ta_CDLSEPARATINGLINES.c | 406 + src/ta_func/ta_CDLSHOOTINGSTAR.c | 389 + src/ta_func/ta_CDLSHORTLINE.c | 359 + src/ta_func/ta_CDLSPINNINGTOP.c | 343 + src/ta_func/ta_CDLSTALLEDPATTERN.c | 456 + src/ta_func/ta_CDLSTICKSANDWICH.c | 353 + src/ta_func/ta_CDLTAKURI.c | 387 + src/ta_func/ta_CDLTASUKIGAP.c | 385 + src/ta_func/ta_CDLTHRUSTING.c | 375 + src/ta_func/ta_CDLTRISTAR.c | 366 + src/ta_func/ta_CDLUNIQUE3RIVER.c | 375 + src/ta_func/ta_CDLUPSIDEGAP2CROWS.c | 377 + src/ta_func/ta_CDLXSIDEGAP3METHODS.c | 350 + src/ta_func/ta_CEIL.c | 241 + src/ta_func/ta_CMO.c | 595 + src/ta_func/ta_CORREL.c | 404 + src/ta_func/ta_COS.c | 241 + src/ta_func/ta_COSH.c | 241 + src/ta_func/ta_DEMA.c | 487 + src/ta_func/ta_DIV.c | 250 + src/ta_func/ta_DX.c | 692 + src/ta_func/ta_EMA.c | 493 + src/ta_func/ta_EXP.c | 241 + src/ta_func/ta_FLOOR.c | 241 + src/ta_func/ta_HT_DCPERIOD.c | 561 + src/ta_func/ta_HT_DCPHASE.c | 679 + src/ta_func/ta_HT_PHASOR.c | 581 + src/ta_func/ta_HT_SINE.c | 695 + src/ta_func/ta_HT_TRENDLINE.c | 641 + src/ta_func/ta_HT_TRENDMODE.c | 794 + src/ta_func/ta_KAMA.c | 497 + src/ta_func/ta_LINEARREG.c | 354 + src/ta_func/ta_LINEARREG_ANGLE.c | 354 + src/ta_func/ta_LINEARREG_INTERCEPT.c | 352 + src/ta_func/ta_LINEARREG_SLOPE.c | 348 + src/ta_func/ta_LN.c | 241 + src/ta_func/ta_LOG10.c | 241 + src/ta_func/ta_MA.c | 476 + src/ta_func/ta_MACD.c | 783 + src/ta_func/ta_MACDEXT.c | 703 + src/ta_func/ta_MACDFIX.c | 301 + src/ta_func/ta_MAMA.c | 714 + src/ta_func/ta_MAVP.c | 492 + src/ta_func/ta_MAX.c | 373 + src/ta_func/ta_MAXINDEX.c | 368 + src/ta_func/ta_MEDPRICE.c | 264 + src/ta_func/ta_MFI.c | 572 + src/ta_func/ta_MIDPOINT.c | 345 + src/ta_func/ta_MIDPRICE.c | 357 + src/ta_func/ta_MIN.c | 373 + src/ta_func/ta_MININDEX.c | 368 + src/ta_func/ta_MINMAX.c | 429 + src/ta_func/ta_MINMAXINDEX.c | 429 + src/ta_func/ta_MINUS_DI.c | 703 + src/ta_func/ta_MINUS_DM.c | 579 + src/ta_func/ta_MOM.c | 335 + src/ta_func/ta_MULT.c | 250 + src/ta_func/ta_NATR.c | 486 + src/ta_func/ta_NVI.c | 197 + src/ta_func/ta_OBV.c | 280 + src/ta_func/ta_PLUS_DI.c | 703 + src/ta_func/ta_PLUS_DM.c | 580 + src/ta_func/ta_PPO.c | 354 + src/ta_func/ta_PVI.c | 197 + src/ta_func/ta_ROC.c | 346 + src/ta_func/ta_ROCP.c | 347 + src/ta_func/ta_ROCR.c | 348 + src/ta_func/ta_ROCR100.c | 347 + src/ta_func/ta_RSI.c | 599 + src/ta_func/ta_SAR.c | 711 + src/ta_func/ta_SAREXT.c | 985 + src/ta_func/ta_SIN.c | 252 + src/ta_func/ta_SINH.c | 241 + src/ta_func/ta_SMA.c | 411 + src/ta_func/ta_SQRT.c | 241 + src/ta_func/ta_STDDEV.c | 497 + src/ta_func/ta_STOCH.c | 802 + src/ta_func/ta_STOCHF.c | 722 + src/ta_func/ta_STOCHRSI.c | 507 + src/ta_func/ta_SUB.c | 250 + src/ta_func/ta_SUM.c | 333 + src/ta_func/ta_T3.c | 524 + src/ta_func/ta_TAN.c | 241 + src/ta_func/ta_TANH.c | 241 + src/ta_func/ta_TEMA.c | 481 + src/ta_func/ta_TRANGE.c | 328 + src/ta_func/ta_TRIMA.c | 648 + src/ta_func/ta_TRIX.c | 449 + src/ta_func/ta_TSF.c | 354 + src/ta_func/ta_TYPPRICE.c | 271 + src/ta_func/ta_ULTOSC.c | 579 + src/ta_func/ta_VAR.c | 477 + src/ta_func/ta_WCLPRICE.c | 270 + src/ta_func/ta_WILLR.c | 453 + src/ta_func/ta_WMA.c | 418 + src/ta_func/ta_utility.c | 134 + src/ta_func/ta_utility.h | 365 + src/tools/Makefile.am | 2 + src/tools/Makefile.in | 482 + src/tools/gen_code/Makefile.am | 14 + src/tools/gen_code/Makefile.in | 456 + src/tools/gen_code/gen_code.c | 4648 ++++ src/tools/gen_code/java/Main.java | 89 + src/tools/gen_code/java/PrettyCode.java | 224 + src/tools/gen_code/mcpp.exe | Bin 0 -> 135168 bytes src/tools/ta_regtest/Makefile.am | 38 + src/tools/ta_regtest/Makefile.in | 860 + src/tools/ta_regtest/ReadMe.txt | 12 + src/tools/ta_regtest/ta_error_number.h | 297 + src/tools/ta_regtest/ta_gDataClose.c | 723 + src/tools/ta_regtest/ta_gDataHigh.c | 723 + src/tools/ta_regtest/ta_gDataLow.c | 719 + src/tools/ta_regtest/ta_gDataOpen.c | 667 + src/tools/ta_regtest/ta_regtest.c | 296 + src/tools/ta_regtest/ta_test_func.h | 27 + .../ta_regtest/ta_test_func/test_1in_1out.c | 507 + .../ta_regtest/ta_test_func/test_1in_2out.c | 469 + src/tools/ta_regtest/ta_test_func/test_adx.c | 682 + .../ta_regtest/ta_test_func/test_bbands.c | 533 + .../ta_test_func/test_candlestick.c | 744 + src/tools/ta_regtest/ta_test_func/test_ma.c | 816 + src/tools/ta_regtest/ta_test_func/test_macd.c | 603 + .../ta_regtest/ta_test_func/test_minmax.c | 833 + src/tools/ta_regtest/ta_test_func/test_mom.c | 553 + .../ta_regtest/ta_test_func/test_per_ema.c | 306 + .../ta_regtest/ta_test_func/test_per_hl.c | 640 + .../ta_regtest/ta_test_func/test_per_hlc.c | 542 + .../ta_regtest/ta_test_func/test_per_hlcv.c | 710 + .../ta_regtest/ta_test_func/test_per_ohlc.c | 527 + src/tools/ta_regtest/ta_test_func/test_po.c | 440 + src/tools/ta_regtest/ta_test_func/test_rsi.c | 507 + src/tools/ta_regtest/ta_test_func/test_sar.c | 301 + .../ta_regtest/ta_test_func/test_stddev.c | 265 + .../ta_regtest/ta_test_func/test_stoch.c | 794 + .../ta_regtest/ta_test_func/test_trange.c | 349 + src/tools/ta_regtest/ta_test_priv.h | 210 + src/tools/ta_regtest/test_abstract.c | 762 + src/tools/ta_regtest/test_data.c | 145 + src/tools/ta_regtest/test_internals.c | 274 + src/tools/ta_regtest/test_util.c | 1338 + ta-lib-config.in | 28 + ta-lib.dpkg.in | 16 + ta-lib.spec.in | 25 + 298 files changed, 223037 insertions(+) create mode 100755 CHANGELOG.TXT create mode 100755 HISTORY.TXT create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 aclocal.m4 create mode 100755 autogen.sh create mode 100644 autom4te.cache/output.0 create mode 100644 autom4te.cache/output.1 create mode 100644 autom4te.cache/requests create mode 100644 autom4te.cache/traces.0 create mode 100644 autom4te.cache/traces.1 create mode 100755 config.guess create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.in create mode 100755 depcomp create mode 100644 include/Makefile.am create mode 100644 include/ta_abstract.h create mode 100644 include/ta_common.h create mode 100644 include/ta_config.h.in create mode 100644 include/ta_defs.h create mode 100644 include/ta_func.h create mode 100644 include/ta_libc.h create mode 100755 install-sh create mode 100644 ltmain.sh create mode 100755 missing create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/ta_abstract/Makefile.am create mode 100644 src/ta_abstract/Makefile.in create mode 100644 src/ta_abstract/excel_glue.c create mode 100644 src/ta_abstract/frames/ta_frame.c create mode 100644 src/ta_abstract/frames/ta_frame.h create mode 100644 src/ta_abstract/ta_abstract.c create mode 100644 src/ta_abstract/ta_def_ui.c create mode 100644 src/ta_abstract/ta_def_ui.h create mode 100644 src/ta_abstract/ta_frame_priv.h create mode 100644 src/ta_abstract/ta_func_api.c create mode 100644 src/ta_abstract/ta_group_idx.c create mode 100644 src/ta_abstract/ta_java_defs.h create mode 100644 src/ta_abstract/tables/table_a.c create mode 100644 src/ta_abstract/tables/table_b.c create mode 100644 src/ta_abstract/tables/table_c.c create mode 100644 src/ta_abstract/tables/table_d.c create mode 100644 src/ta_abstract/tables/table_e.c create mode 100644 src/ta_abstract/tables/table_f.c create mode 100644 src/ta_abstract/tables/table_g.c create mode 100644 src/ta_abstract/tables/table_h.c create mode 100644 src/ta_abstract/tables/table_i.c create mode 100644 src/ta_abstract/tables/table_j.c create mode 100644 src/ta_abstract/tables/table_k.c create mode 100644 src/ta_abstract/tables/table_l.c create mode 100644 src/ta_abstract/tables/table_m.c create mode 100644 src/ta_abstract/tables/table_n.c create mode 100644 src/ta_abstract/tables/table_o.c create mode 100644 src/ta_abstract/tables/table_p.c create mode 100644 src/ta_abstract/tables/table_q.c create mode 100644 src/ta_abstract/tables/table_r.c create mode 100644 src/ta_abstract/tables/table_s.c create mode 100644 src/ta_abstract/tables/table_t.c create mode 100644 src/ta_abstract/tables/table_u.c create mode 100644 src/ta_abstract/tables/table_v.c create mode 100644 src/ta_abstract/tables/table_w.c create mode 100644 src/ta_abstract/tables/table_x.c create mode 100644 src/ta_abstract/tables/table_y.c create mode 100644 src/ta_abstract/tables/table_z.c create mode 100644 src/ta_abstract/templates/CoreAnnotated.java.template create mode 100644 src/ta_abstract/templates/Makefile.am.template create mode 100644 src/ta_abstract/templates/excel_glue.c.template create mode 100644 src/ta_abstract/templates/ta_frame.c.template create mode 100644 src/ta_abstract/templates/ta_frame.h.template create mode 100644 src/ta_abstract/templates/ta_func.h.template create mode 100644 src/ta_abstract/templates/ta_func.swg.template create mode 100644 src/ta_abstract/templates/ta_func_api.c.template create mode 100644 src/ta_abstract/templates/ta_group_idx.c.template create mode 100644 src/ta_abstract/templates/ta_java_defs.h.template create mode 100644 src/ta_abstract/templates/ta_retcode.c.template create mode 100644 src/ta_abstract/templates/ta_x.c.template create mode 100644 src/ta_common/Makefile.am create mode 100644 src/ta_common/Makefile.in create mode 100644 src/ta_common/ta_global.c create mode 100644 src/ta_common/ta_global.h create mode 100644 src/ta_common/ta_magic_nb.h create mode 100644 src/ta_common/ta_memory.h create mode 100644 src/ta_common/ta_pragma.h create mode 100644 src/ta_common/ta_retcode.c create mode 100644 src/ta_common/ta_retcode.csv create mode 100644 src/ta_common/ta_version.c create mode 100644 src/ta_func/Makefile.am create mode 100644 src/ta_func/Makefile.in create mode 100644 src/ta_func/ta_ACOS.c create mode 100644 src/ta_func/ta_AD.c create mode 100644 src/ta_func/ta_ADD.c create mode 100644 src/ta_func/ta_ADOSC.c create mode 100644 src/ta_func/ta_ADX.c create mode 100644 src/ta_func/ta_ADXR.c create mode 100644 src/ta_func/ta_APO.c create mode 100644 src/ta_func/ta_AROON.c create mode 100644 src/ta_func/ta_AROONOSC.c create mode 100644 src/ta_func/ta_ASIN.c create mode 100644 src/ta_func/ta_ATAN.c create mode 100644 src/ta_func/ta_ATR.c create mode 100644 src/ta_func/ta_AVGPRICE.c create mode 100644 src/ta_func/ta_BBANDS.c create mode 100644 src/ta_func/ta_BETA.c create mode 100644 src/ta_func/ta_BOP.c create mode 100644 src/ta_func/ta_CCI.c create mode 100644 src/ta_func/ta_CDL2CROWS.c create mode 100644 src/ta_func/ta_CDL3BLACKCROWS.c create mode 100644 src/ta_func/ta_CDL3INSIDE.c create mode 100644 src/ta_func/ta_CDL3LINESTRIKE.c create mode 100644 src/ta_func/ta_CDL3OUTSIDE.c create mode 100644 src/ta_func/ta_CDL3STARSINSOUTH.c create mode 100644 src/ta_func/ta_CDL3WHITESOLDIERS.c create mode 100644 src/ta_func/ta_CDLABANDONEDBABY.c create mode 100644 src/ta_func/ta_CDLADVANCEBLOCK.c create mode 100644 src/ta_func/ta_CDLBELTHOLD.c create mode 100644 src/ta_func/ta_CDLBREAKAWAY.c create mode 100644 src/ta_func/ta_CDLCLOSINGMARUBOZU.c create mode 100644 src/ta_func/ta_CDLCONCEALBABYSWALL.c create mode 100644 src/ta_func/ta_CDLCOUNTERATTACK.c create mode 100644 src/ta_func/ta_CDLDARKCLOUDCOVER.c create mode 100644 src/ta_func/ta_CDLDOJI.c create mode 100644 src/ta_func/ta_CDLDOJISTAR.c create mode 100644 src/ta_func/ta_CDLDRAGONFLYDOJI.c create mode 100644 src/ta_func/ta_CDLENGULFING.c create mode 100644 src/ta_func/ta_CDLEVENINGDOJISTAR.c create mode 100644 src/ta_func/ta_CDLEVENINGSTAR.c create mode 100644 src/ta_func/ta_CDLGAPSIDESIDEWHITE.c create mode 100644 src/ta_func/ta_CDLGRAVESTONEDOJI.c create mode 100644 src/ta_func/ta_CDLHAMMER.c create mode 100644 src/ta_func/ta_CDLHANGINGMAN.c create mode 100644 src/ta_func/ta_CDLHARAMI.c create mode 100644 src/ta_func/ta_CDLHARAMICROSS.c create mode 100644 src/ta_func/ta_CDLHIGHWAVE.c create mode 100644 src/ta_func/ta_CDLHIKKAKE.c create mode 100644 src/ta_func/ta_CDLHIKKAKEMOD.c create mode 100644 src/ta_func/ta_CDLHOMINGPIGEON.c create mode 100644 src/ta_func/ta_CDLIDENTICAL3CROWS.c create mode 100644 src/ta_func/ta_CDLINNECK.c create mode 100644 src/ta_func/ta_CDLINVERTEDHAMMER.c create mode 100644 src/ta_func/ta_CDLKICKING.c create mode 100644 src/ta_func/ta_CDLKICKINGBYLENGTH.c create mode 100644 src/ta_func/ta_CDLLADDERBOTTOM.c create mode 100644 src/ta_func/ta_CDLLONGLEGGEDDOJI.c create mode 100644 src/ta_func/ta_CDLLONGLINE.c create mode 100644 src/ta_func/ta_CDLMARUBOZU.c create mode 100644 src/ta_func/ta_CDLMATCHINGLOW.c create mode 100644 src/ta_func/ta_CDLMATHOLD.c create mode 100644 src/ta_func/ta_CDLMORNINGDOJISTAR.c create mode 100644 src/ta_func/ta_CDLMORNINGSTAR.c create mode 100644 src/ta_func/ta_CDLONNECK.c create mode 100644 src/ta_func/ta_CDLPIERCING.c create mode 100644 src/ta_func/ta_CDLRICKSHAWMAN.c create mode 100644 src/ta_func/ta_CDLRISEFALL3METHODS.c create mode 100644 src/ta_func/ta_CDLSEPARATINGLINES.c create mode 100644 src/ta_func/ta_CDLSHOOTINGSTAR.c create mode 100644 src/ta_func/ta_CDLSHORTLINE.c create mode 100644 src/ta_func/ta_CDLSPINNINGTOP.c create mode 100644 src/ta_func/ta_CDLSTALLEDPATTERN.c create mode 100644 src/ta_func/ta_CDLSTICKSANDWICH.c create mode 100644 src/ta_func/ta_CDLTAKURI.c create mode 100644 src/ta_func/ta_CDLTASUKIGAP.c create mode 100644 src/ta_func/ta_CDLTHRUSTING.c create mode 100644 src/ta_func/ta_CDLTRISTAR.c create mode 100644 src/ta_func/ta_CDLUNIQUE3RIVER.c create mode 100644 src/ta_func/ta_CDLUPSIDEGAP2CROWS.c create mode 100644 src/ta_func/ta_CDLXSIDEGAP3METHODS.c create mode 100644 src/ta_func/ta_CEIL.c create mode 100644 src/ta_func/ta_CMO.c create mode 100644 src/ta_func/ta_CORREL.c create mode 100644 src/ta_func/ta_COS.c create mode 100644 src/ta_func/ta_COSH.c create mode 100644 src/ta_func/ta_DEMA.c create mode 100644 src/ta_func/ta_DIV.c create mode 100644 src/ta_func/ta_DX.c create mode 100644 src/ta_func/ta_EMA.c create mode 100644 src/ta_func/ta_EXP.c create mode 100644 src/ta_func/ta_FLOOR.c create mode 100644 src/ta_func/ta_HT_DCPERIOD.c create mode 100644 src/ta_func/ta_HT_DCPHASE.c create mode 100644 src/ta_func/ta_HT_PHASOR.c create mode 100644 src/ta_func/ta_HT_SINE.c create mode 100644 src/ta_func/ta_HT_TRENDLINE.c create mode 100644 src/ta_func/ta_HT_TRENDMODE.c create mode 100644 src/ta_func/ta_KAMA.c create mode 100644 src/ta_func/ta_LINEARREG.c create mode 100644 src/ta_func/ta_LINEARREG_ANGLE.c create mode 100644 src/ta_func/ta_LINEARREG_INTERCEPT.c create mode 100644 src/ta_func/ta_LINEARREG_SLOPE.c create mode 100644 src/ta_func/ta_LN.c create mode 100644 src/ta_func/ta_LOG10.c create mode 100644 src/ta_func/ta_MA.c create mode 100644 src/ta_func/ta_MACD.c create mode 100644 src/ta_func/ta_MACDEXT.c create mode 100644 src/ta_func/ta_MACDFIX.c create mode 100644 src/ta_func/ta_MAMA.c create mode 100644 src/ta_func/ta_MAVP.c create mode 100644 src/ta_func/ta_MAX.c create mode 100644 src/ta_func/ta_MAXINDEX.c create mode 100644 src/ta_func/ta_MEDPRICE.c create mode 100644 src/ta_func/ta_MFI.c create mode 100644 src/ta_func/ta_MIDPOINT.c create mode 100644 src/ta_func/ta_MIDPRICE.c create mode 100644 src/ta_func/ta_MIN.c create mode 100644 src/ta_func/ta_MININDEX.c create mode 100644 src/ta_func/ta_MINMAX.c create mode 100644 src/ta_func/ta_MINMAXINDEX.c create mode 100644 src/ta_func/ta_MINUS_DI.c create mode 100644 src/ta_func/ta_MINUS_DM.c create mode 100644 src/ta_func/ta_MOM.c create mode 100644 src/ta_func/ta_MULT.c create mode 100644 src/ta_func/ta_NATR.c create mode 100644 src/ta_func/ta_NVI.c create mode 100644 src/ta_func/ta_OBV.c create mode 100644 src/ta_func/ta_PLUS_DI.c create mode 100644 src/ta_func/ta_PLUS_DM.c create mode 100644 src/ta_func/ta_PPO.c create mode 100644 src/ta_func/ta_PVI.c create mode 100644 src/ta_func/ta_ROC.c create mode 100644 src/ta_func/ta_ROCP.c create mode 100644 src/ta_func/ta_ROCR.c create mode 100644 src/ta_func/ta_ROCR100.c create mode 100644 src/ta_func/ta_RSI.c create mode 100644 src/ta_func/ta_SAR.c create mode 100644 src/ta_func/ta_SAREXT.c create mode 100644 src/ta_func/ta_SIN.c create mode 100644 src/ta_func/ta_SINH.c create mode 100644 src/ta_func/ta_SMA.c create mode 100644 src/ta_func/ta_SQRT.c create mode 100644 src/ta_func/ta_STDDEV.c create mode 100644 src/ta_func/ta_STOCH.c create mode 100644 src/ta_func/ta_STOCHF.c create mode 100644 src/ta_func/ta_STOCHRSI.c create mode 100644 src/ta_func/ta_SUB.c create mode 100644 src/ta_func/ta_SUM.c create mode 100644 src/ta_func/ta_T3.c create mode 100644 src/ta_func/ta_TAN.c create mode 100644 src/ta_func/ta_TANH.c create mode 100644 src/ta_func/ta_TEMA.c create mode 100644 src/ta_func/ta_TRANGE.c create mode 100644 src/ta_func/ta_TRIMA.c create mode 100644 src/ta_func/ta_TRIX.c create mode 100644 src/ta_func/ta_TSF.c create mode 100644 src/ta_func/ta_TYPPRICE.c create mode 100644 src/ta_func/ta_ULTOSC.c create mode 100644 src/ta_func/ta_VAR.c create mode 100644 src/ta_func/ta_WCLPRICE.c create mode 100644 src/ta_func/ta_WILLR.c create mode 100644 src/ta_func/ta_WMA.c create mode 100644 src/ta_func/ta_utility.c create mode 100644 src/ta_func/ta_utility.h create mode 100644 src/tools/Makefile.am create mode 100644 src/tools/Makefile.in create mode 100644 src/tools/gen_code/Makefile.am create mode 100644 src/tools/gen_code/Makefile.in create mode 100644 src/tools/gen_code/gen_code.c create mode 100644 src/tools/gen_code/java/Main.java create mode 100644 src/tools/gen_code/java/PrettyCode.java create mode 100644 src/tools/gen_code/mcpp.exe create mode 100644 src/tools/ta_regtest/Makefile.am create mode 100644 src/tools/ta_regtest/Makefile.in create mode 100644 src/tools/ta_regtest/ReadMe.txt create mode 100644 src/tools/ta_regtest/ta_error_number.h create mode 100644 src/tools/ta_regtest/ta_gDataClose.c create mode 100644 src/tools/ta_regtest/ta_gDataHigh.c create mode 100644 src/tools/ta_regtest/ta_gDataLow.c create mode 100644 src/tools/ta_regtest/ta_gDataOpen.c create mode 100644 src/tools/ta_regtest/ta_regtest.c create mode 100644 src/tools/ta_regtest/ta_test_func.h create mode 100644 src/tools/ta_regtest/ta_test_func/test_1in_1out.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_1in_2out.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_adx.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_bbands.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_candlestick.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_ma.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_macd.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_minmax.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_mom.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_per_ema.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_per_hl.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_per_hlc.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_per_hlcv.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_per_ohlc.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_po.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_rsi.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_sar.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_stddev.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_stoch.c create mode 100644 src/tools/ta_regtest/ta_test_func/test_trange.c create mode 100644 src/tools/ta_regtest/ta_test_priv.h create mode 100644 src/tools/ta_regtest/test_abstract.c create mode 100644 src/tools/ta_regtest/test_data.c create mode 100644 src/tools/ta_regtest/test_internals.c create mode 100644 src/tools/ta_regtest/test_util.c create mode 100644 ta-lib-config.in create mode 100644 ta-lib.dpkg.in create mode 100644 ta-lib.spec.in diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT new file mode 100755 index 000000000..3c22b399e --- /dev/null +++ b/CHANGELOG.TXT @@ -0,0 +1,32 @@ +Version 0.4 (September 2007) + +New Features +============ +- Java TA-Abstract interface +- Moving Average with Variable Periods (MAVP) +- UpperLimit/LowerLimit flags for BBANDS. +- Vector Trigonometric Functions: COS, SIN, TAN, + COSH, SINH, TANH, ACOS, ASIN, ATAN +- Vector Arithmetic Functions: ADD, DIV, SUB, MULT +- Other Vector Functions: CEIL, FLOOR, EXP, SQRT, LN, LOG10 + +Fixes +===== +#1656623 : TA_FUNC_FLG_OVERLAP on MININDEX, MAXINDEX and MINMAXINDEX +#1660327 : "A parameter is out of range" problem with Excel +#1727704 : MFI logic bug when no price movement + +Other Changes +============= +- Comment clean-up for parameter ranges of internal functions. +- Mac OS X : xcode and makefiles fixes. +- Linux: Better Perl library detection +- Solve warnings for Intel C++ compiler. +- Automatic benchmarking by ta_regtest (WIN32 only). + +Thanks to all contributors. + +See HISTORY.TXT for summary of previous versions. + +Info: http://ta-lib.org + diff --git a/HISTORY.TXT b/HISTORY.TXT new file mode 100755 index 000000000..97d91d9ae --- /dev/null +++ b/HISTORY.TXT @@ -0,0 +1,115 @@ +V0.4 (September 2007) + - Java TA-Abstract interface. + - MAVP, COS, SIN, TAN, COSH, SINH, TANH, ACOS, ASIN, ATAN. + - ADD, DIV, SUB, MULT, CEIL, FLOOR, EXP, SQRT, LN, LOG10. + - UpperLimit/LowerLimit flags for BBANDS. + - Automatic benchmarking by ta_regtest (WIN32 only). + - Fix #1656623,1660327,1727704 + +V0.3 (January 2007) + - New .NET and Java naming convention. + - XML interface description (See TA_FunctionDescription). + - Volume amd open interest now of double type. + - Add: BETA, MINMAX, MINMAXINDEX, MININDEX, MAXINDEX. + - New RPM, Debian, JAR and unmanaged library with VS2005. + - Fix #1526632,1544555 + +V0.2 (June 2006) + - Many bug fix for Java. + - New ULTOSC and NATR functions. + - Major clean-up. Removal of TA-PM and TA-Data. + - Fix #1434450 + +V0.1.5 (January 2006) + - Java ports of all TA functions. + - New BOP, CMO and Hikkake functions. + - .NET assembly now verifiable. + - Support for end-of-period. + - Portable random generator. + - Fix #1117656,1117866,1199526,1200995,1229243,1238365,1241498 + - Fix #1293953,1359452,1365319,1367155,1367269 + +V0.1.4 (April 2005) + - 64 bits support. + - Partial Python support. + - New TA_DISABLE_PRICE_VALIDATION flag. + - 26 new candlestick functions. + - Fix #1117866,1117656 + +V0.1.3 (January 2005) + - 12 new candlestick functions. + - Excel now handles default values. + - Add Visual Studio 2005 support. + - Fix #1090231,1089506,1072276,1023151 + +V0.1.2 (November 2004) + - New: Perl interface, candlestick functions. + - New: price bar validation and intraday conversion. + - Add TA_YAHOO_ONE_SYMBOL, CSI and CSIM data source. + - Add MacOS X and FreeBSD support. + - Fix #927808,917085,888470,881950,873879,960230,965557,978056 + - Fix #1039601,1042729 + +V0.1.1 (January 2004) + - New SQL/ODBC and MySQL data source. + - Add: TA_CORREL, TA_STOCHRSI, TA_SAREXT + - Add split/dividend adjustment for Yahoo! + - Add CygWin support + +V0.1.0 (September 2003) + - New .NET/Mono interface (Core namespace) + - TA functions now accept single precision inputs. + - Add: TSF, LINEARREG, LINEARREG_INTERCEPT + - Add: LINEARREG_ANGLE, LINEARREG_SLOPE + - Now do intra-day conversion to daily, weekly etc... + - Add TA-PM trade-by-trade report. + - Fix #724662,731857,736095,736196,748163,767653,792298 + +V0.0.8 (April 2003) + - Add: AD,ADOSC,AROON,AROONOSC,KAMA,T3,HT_TRENDLINE,MAMA + - Add: HT_DCPHASE,HT_PHASOR,HT_SINE,HT_TRENDMODE,HT_DCPERIOD + - Fix #701060 + +V0.0.7 (January 2003) + - Excel Add-In implemented. + - Add: MFI,MIDPRICE,MIDPOINT,TRIMA,MACDEXT,ROCP,STOCHF,AVGPRICE + - Fix #660248,660250,660449,644512 + +V0.0.6 (October 2002) + - Add Functions: SAR,ADX,ADXR,DX,+DI,-DI,+DM,-DM + - Add many european Yahoo! data source. + - Fix#609753 for Yahoo! data source. + - STDDEV,VAR,BBANDS speed optimization + +V0.0.5 (June 2002) + - Add: OBV + performance measurement infrastructure. + - Fix #537806 + some Yahoo! data source fix. + +V0.0.4 (March 2002) + - Add: TEMA, DEMA, TRIX + - Interface changes to all the TA functions: + 1) nbInputElement has been removed. + 2) startIdx and endIdx cannot be -1 anymore. + 3) only one outBegIdx and outNbElement output per function. + - A "Lookback" function is now provided for each TA function. + - Improve ta_regtest + Make better HTML parsing in gen_rdata. + +V0.0.3 (December 2001) + - Port to Linux/g++ completed. + - Add: BBANDS,WMA,MOM,ROC,ROCR,STDDEV,VAR,STOCH + - Add TA_SetUnstablePeriod. + - Code and MSVC project clean-up. + +V0.0.2 (October 2001) + - Add: EMA,SMA,APO,MACD,PPO,RSI,ATR,TRANGE,WCLPRICE + - Add: MEDPRICE,TYPPRICE + - Add compatibility flag + some Win32 binaries. + - Add support for US/CAN indices to the Yahoo! data source. + +V0.0.1 (September 2001) + - Alpha Release on Windows. + - Include ta_yahoo.exe demo application. + +Info: http://ta-lib.org +Forum: http://tadoc.org/forum + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..269267110 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,3 @@ +AUTOMAKE_OPTIONS = foreign 1.4 +SUBDIRS = src src/tools +bin_SCRIPTS = ta-lib-config diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 000000000..c6459db1e --- /dev/null +++ b/Makefile.in @@ -0,0 +1,661 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/ta-lib-config.in \ + $(srcdir)/ta-lib.dpkg.in $(srcdir)/ta-lib.spec.in \ + $(top_srcdir)/configure $(top_srcdir)/include/ta_config.h.in \ + config.guess config.sub depcomp install-sh ltmain.sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/ta_config.h +CONFIG_CLEAN_FILES = ta-lib-config ta-lib.spec ta-lib.dpkg +am__installdirs = "$(DESTDIR)$(bindir)" +binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TALIB_LIBRARY_VERSION = @TALIB_LIBRARY_VERSION@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign 1.4 +SUBDIRS = src src/tools +bin_SCRIPTS = ta-lib-config +all: all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ + cd $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +include/ta_config.h: include/stamp-h1 + @if test ! -f $@; then \ + rm -f include/stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) include/stamp-h1; \ + else :; fi + +include/stamp-h1: $(top_srcdir)/include/ta_config.h.in $(top_builddir)/config.status + @rm -f include/stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status include/ta_config.h +$(top_srcdir)/include/ta_config.h.in: $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f include/stamp-h1 + touch $@ + +distclean-hdr: + -rm -f include/ta_config.h include/stamp-h1 +ta-lib-config: $(top_builddir)/config.status $(srcdir)/ta-lib-config.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +ta-lib.spec: $(top_builddir)/config.status $(srcdir)/ta-lib.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +ta-lib.dpkg: $(top_builddir)/config.status $(srcdir)/ta-lib.dpkg.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d $(distdir) || mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(SCRIPTS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: install-binSCRIPTS + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-binSCRIPTS + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-binSCRIPTS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-binSCRIPTS + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 000000000..af80e49e4 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,7231 @@ +# generated automatically by aclocal 1.10 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_if(m4_PACKAGE_VERSION, [2.61],, +[m4_fatal([this file was generated for autoconf 2.61. +You have another version of autoconf. If you want to use that, +you should regenerate the build system entirely.], [63])]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- + +# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +AC_DEFUN([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +AC_DEFUN([_LT_COMPILER_BOILERPLATE], +[ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +AC_DEFUN([_LT_LINKER_BOILERPLATE], +[ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* +])# _LT_LINKER_BOILERPLATE + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) LD="${LD-ld} -64" ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# ------------------ +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# --------------------------------------------------------------------- +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ---------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + if test -z "$LTCFLAGS"; then + eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 DLLs +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +# set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix3*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +])# AC_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that +# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, +# it is assumed to be `libltdl'. LIBLTDL will be prefixed with +# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' +# (note the single quotes!). If your package is not flat and you're not +# using automake, define top_builddir and top_srcdir appropriately in +# the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that +# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, +# and an installed libltdl is not found, it is assumed to be `libltdl'. +# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and top_srcdir +# appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + +# _LT_AC_PROG_CXXCPP +# ------------------ +AC_DEFUN([_LT_AC_PROG_CXXCPP], +[ +AC_REQUIRE([AC_PROG_CXX]) +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +fi +])# _LT_AC_PROG_CXXCPP + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# ------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF + +# Report which library types will actually be built +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + $as_unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + $as_unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + ;; + *) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + interix3*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc*) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC*) + # Portland Group C++ compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + # So that behaviour is only enabled if SCOABSPATH is set to a + # non-empty value in the environment. Most likely only useful for + # creating official distributions of packages. + # This is a hack until libtool officially supports absolute path + # names for shared libraries. + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) +# ------------------------------------ +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux* | k*bsd*-gnu) + if test "$host_cpu" = ia64; then + symcode='[[ABCDGIRSTW]]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc* | ecpc*) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC*) + # Portland Group C++ compiler. + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + _LT_CC_BASENAME([$compiler]) + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix3*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi[[45]]*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + *) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_MSG_RESULT([$SED]) +]) + +# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.10' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.10])dnl +_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.60])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 000000000..180eccfdb --- /dev/null +++ b/autogen.sh @@ -0,0 +1,11 @@ +#!/bin/sh +echo aclocal +aclocal || exit +echo autoheader +autoheader || exit +echo libtoolize --copy --force +libtoolize --copy --force || exit +echo automake -a -c +automake -a -c || exit +echo autoconf +autoconf || exit diff --git a/autom4te.cache/output.0 b/autom4te.cache/output.0 new file mode 100644 index 000000000..03702e454 --- /dev/null +++ b/autom4te.cache/output.0 @@ -0,0 +1,22212 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.61 for ta-lib 0.4.0. +@%:@ +@%:@ Report bugs to . +@%:@ +@%:@ (c) TicTacTec 2005, 2006 +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +@%:@ This configure script is free software; the Free Software Foundation +@%:@ gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME='ta-lib' +PACKAGE_TARNAME='ta-lib' +PACKAGE_VERSION='0.4.0' +PACKAGE_STRING='ta-lib 0.4.0' +PACKAGE_BUGREPORT='http://sourceforge.net/tracker/?group_id=8903&atid=108903' + +ac_unique_file="src/ta_func/ta_AD.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +am__isrc +CYGPATH_W +PACKAGE +VERSION +ACLOCAL +AUTOCONF +AUTOMAKE +AUTOHEADER +MAKEINFO +install_sh +STRIP +INSTALL_STRIP_PROGRAM +mkdir_p +AWK +SET_MAKE +am__leading_dot +AMTAR +am__tar +am__untar +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +DEPDIR +am__include +am__quote +AMDEP_TRUE +AMDEP_FALSE +AMDEPBACKSLASH +CCDEPMODE +am__fastdepCC_TRUE +am__fastdepCC_FALSE +build +build_cpu +build_vendor +build_os +host +host_cpu +host_vendor +host_os +GREP +EGREP +LN_S +ECHO +AR +RANLIB +CPP +CXX +CXXFLAGS +ac_ct_CXX +CXXDEPMODE +am__fastdepCXX_TRUE +am__fastdepCXX_FALSE +CXXCPP +F77 +FFLAGS +ac_ct_F77 +LIBTOOL +POW_LIB +LIB@&t@OBJS +TALIB_LIBRARY_VERSION +LTLIBOBJS' +ac_subst_files='' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CXX +CXXFLAGS +CCC +CXXCPP +F77 +FFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute directory names. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$0" || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures ta-lib 0.4.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root @<:@DATAROOTDIR/doc/ta-lib@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of ta-lib 0.4.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-pic try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-tags@<:@=TAGS@:>@ include additional configurations @<:@automatic@:>@ + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +ta-lib configure 0.4.0 +generated by GNU Autoconf 2.61 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. + +(c) TicTacTec 2005, 2006 +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by ta-lib $as_me 0.4.0, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +@%:@@%:@ --------- @%:@@%:@ +@%:@@%:@ Platform. @%:@@%:@ +@%:@@%:@ --------- @%:@@%:@ + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +@%:@@%:@ ----------- @%:@@%:@ +@%:@@%:@ Core tests. @%:@@%:@ +@%:@@%:@ ----------- @%:@@%:@ + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +@%:@@%:@ ---------------- @%:@@%:@ +@%:@@%:@ Cache variables. @%:@@%:@ +@%:@@%:@ ---------------- @%:@@%:@ +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +@%:@@%:@ ----------------- @%:@@%:@ +@%:@@%:@ Output variables. @%:@@%:@ +@%:@@%:@ ----------------- @%:@@%:@ +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +@%:@@%:@ ------------------- @%:@@%:@ +@%:@@%:@ File substitutions. @%:@@%:@ +@%:@@%:@ ------------------- @%:@@%:@ +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +@%:@@%:@ ----------- @%:@@%:@ +@%:@@%:@ confdefs.h. @%:@@%:@ +@%:@@%:@ ----------- @%:@@%:@ +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + set x "$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + set x "$prefix/share/config.site" "$prefix/etc/config.site" +else + set x "$ac_default_prefix/share/config.site" \ + "$ac_default_prefix/etc/config.site" +fi +shift +for ac_site_file +do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_headers="$ac_config_headers include/ta_config.h" + +am__api_version='1.10' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done +IFS=$as_save_IFS + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm -f conftest.sed + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +echo "${ECHO_T}$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } +set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + SET_MAKE= +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=ta-lib + VERSION=0.4.0 + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +# +# List of possible output files, starting from the most likely. +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) +# only as a last resort. b.out is created by i960 compilers. +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' +# +# The IRIX 6 linker writes into existing files which may not be +# executable, retaining their permissions. Remove them first so a +# subsequent execution test works. +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6; } +if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6; } + +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +{ echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + +# Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6; } +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6; } +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done + +fi + +SED=$lt_cv_path_SED +{ echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6; } + +{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Extract the first word of "grep ggrep" to use in msg output +if test -z "$GREP"; then +set dummy grep ggrep; ac_prog_name=$2 +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_GREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + # Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +GREP="$ac_cv_path_GREP" +if test -z "$GREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_GREP=$GREP +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +echo "${ECHO_T}$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + # Extract the first word of "egrep" to use in msg output +if test -z "$EGREP"; then +set dummy egrep; ac_prog_name=$2 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_EGREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + # Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +EGREP="$ac_cv_path_EGREP" +if test -z "$EGREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_EGREP=$EGREP +fi + + + fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + +{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi +{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6; } +NM="$lt_cv_path_NM" + +{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6; } +fi + +{ echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump'. + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix3*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line __oline__ "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_cc_needs_belf=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) LD="${LD-ld} -64" ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + + +esac + +need_locks="$enable_libtool_lock" + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +@%:@define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +@%:@include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +@%:@include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +@%:@@%:@ ------------------------------------------------------------------------ @%:@@%:@ +@%:@@%:@ Report this to http://sourceforge.net/tracker/?group_id=8903&atid=108903 @%:@@%:@ +@%:@@%:@ ------------------------------------------------------------------------ @%:@@%:@ +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CXXFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 +echo "${ECHO_T}$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +fi + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { echo "$as_me:$LINENO: result: $F77" >&5 +echo "${ECHO_T}$F77" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_F77="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +echo "${ECHO_T}$ac_ct_F77" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_f77_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_f77_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_f77_g=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +G77=`test $ac_compiler_gnu = yes && echo yes` +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } +else + { echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6; } +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux* | k*bsd*-gnu) + if test "$host_cpu" = ia64; then + symcode='[ABCDGIRSTW]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6; } +else + { echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6; } +fi + +{ echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=no +enable_win32_dll=no + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic='-qnocommon' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } + +if test x"$lt_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works=yes + fi + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix3*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs=no + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var" || \ + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6; } + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + ;; + *) + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + { echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# Report which library types will actually be built +{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +{ echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +{ echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6; } + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +# Check whether --with-tags was given. +if test "${with_tags+set}" = set; then + withval=$with_tags; tagnames="$withval" +fi + + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + fi + fi + if test -z "$LTCFLAGS"; then + eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + $as_unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + $as_unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +compiler_CXX=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_CXX=yes + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_CXX=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + interix3*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc*) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC*) + # Portland Group C++ compiler + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + openbsd*) + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ + $rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + # So that behaviour is only enabled if SCOABSPATH is set to a + # non-empty value in the environment. Most likely only useful for + # creating official distributions of packages. + # This is a hack until libtool officially supports absolute path + # names for shared libraries. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; +esac +{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$rm -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix3*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +solaris*) + case $cc_basename in + CC*) + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + postdeps_CXX='-lCstd -lCrun' + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_CXX='-qnocommon' + lt_prog_compiler_wl_CXX='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc* | ecpc*) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC*) + # Portland Group C++ compiler. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_CXX=yes + fi + else + lt_prog_compiler_static_works_CXX=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var_CXX" || \ + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_CXX +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_CXX" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +{ echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +{ echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6; } + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_F77='-qnocommon' + lt_prog_compiler_wl_F77='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-fpic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_F77='-Qoption ld ';; + *) + lt_prog_compiler_wl_F77='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_can_build_shared_F77=no + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_F77=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_F77=yes + fi + else + lt_prog_compiler_static_works_F77=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; } + +if test x"$lt_prog_compiler_static_works_F77" = xyes; then + : +else + lt_prog_compiler_static_F77= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_F77=no + fi + ;; + + interix3*) + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs_F77=no + else + ld_shlibs_F77=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_F77=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = no; then + runpath_var= + hardcode_libdir_flag_spec_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77='$convenience' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_F77='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_F77=no + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='' + link_all_deplibs_F77=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_F77=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + *) + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag_F77='${wl}-z,text' + archive_cmds_need_lc_F77=no + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_F77='${wl}-z,text' + allow_undefined_flag_F77='${wl}-z,nodefs' + archive_cmds_need_lc_F77=no + hardcode_shlibpath_var_F77=no + hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6; } +test "$ld_shlibs_F77" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + pic_flag=$lt_prog_compiler_pic_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var_F77" || \ + test "X$hardcode_automatic_F77" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6; } + +if test "$hardcode_action_F77" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_F77 +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_F77 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + +old_archive_cmds_GCJ=$old_archive_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_GCJ='-qnocommon' + lt_prog_compiler_wl_GCJ='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-fpic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_GCJ='-Qoption ld ';; + *) + lt_prog_compiler_wl_GCJ='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_can_build_shared_GCJ=no + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_GCJ=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_GCJ=yes + fi + else + lt_prog_compiler_static_works_GCJ=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; } + +if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then + : +else + lt_prog_compiler_static_GCJ= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_GCJ=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_GCJ= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_GCJ=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + interix3*) + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs_GCJ=no + else + ld_shlibs_GCJ=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_GCJ=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = no; then + runpath_var= + hardcode_libdir_flag_spec_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_GCJ=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_GCJ=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ='$convenience' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec_GCJ=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_GCJ=' ' + allow_undefined_flag_GCJ=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_GCJ=no + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='' + link_all_deplibs_GCJ=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_GCJ=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + *) + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs_GCJ=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z,text' + archive_cmds_need_lc_GCJ=no + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_GCJ='${wl}-z,text' + allow_undefined_flag_GCJ='${wl}-z,nodefs' + archive_cmds_need_lc_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } +test "$ld_shlibs_GCJ" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + pic_flag=$lt_prog_compiler_pic_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var_GCJ" || \ + test "X$hardcode_automatic_GCJ" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6; } + +if test "$hardcode_action_GCJ" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_GCJ + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_GCJ +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_GCJ +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_GCJ + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_GCJ + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_GCJ + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_RC +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_RC + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + + +# Checks for libraries. + +{ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + + +{ echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 +echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; } +if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_pthread_pthread_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_pthread_pthread_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5 +echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6; } +if test $ac_cv_lib_pthread_pthread_create = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +fi + + +# Checks for header files. +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +@%:@define STDC_HEADERS 1 +_ACEOF + +fi + + + + + + + + + + + + +for ac_header in float.h inttypes.h limits.h locale.h stddef.h stdint.h stdlib.h string.h unistd.h wchar.h wctype.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +@%:@include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +@%:@@%:@ ------------------------------------------------------------------------ @%:@@%:@ +@%:@@%:@ Report this to http://sourceforge.net/tracker/?group_id=8903&atid=108903 @%:@@%:@ +@%:@@%:@ ------------------------------------------------------------------------ @%:@@%:@ +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +# Checks for typedefs, structures, and compiler characteristics. +{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_const=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +@%:@define const +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef size_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_size_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6; } +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +@%:@define size_t unsigned int +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 +echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; } +if test "${ac_cv_struct_tm+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +struct tm tm; + int *p = &tm.tm_sec; + return !p; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_struct_tm=time.h +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_struct_tm=sys/time.h +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 +echo "${ECHO_T}$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then + +cat >>confdefs.h <<\_ACEOF +@%:@define TM_IN_SYS_TIME 1 +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for working volatile" >&5 +echo $ECHO_N "checking for working volatile... $ECHO_C" >&6; } +if test "${ac_cv_c_volatile+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + +volatile int x; +int * volatile y = (int *) 0; +return !x && !y; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_volatile=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_volatile=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5 +echo "${ECHO_T}$ac_cv_c_volatile" >&6; } +if test $ac_cv_c_volatile = no; then + +cat >>confdefs.h <<\_ACEOF +@%:@define volatile +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for ptrdiff_t" >&5 +echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6; } +if test "${ac_cv_type_ptrdiff_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef ptrdiff_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_ptrdiff_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_ptrdiff_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5 +echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6; } +if test $ac_cv_type_ptrdiff_t = yes; then + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE_PTRDIFF_T 1 +_ACEOF + + +fi + + +# Checks for library functions. +{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5 +echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; } +if test "${ac_cv_type_signal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_signal=int +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_signal=void +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 +echo "${ECHO_T}$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +@%:@define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +{ echo "$as_me:$LINENO: checking for working strcoll" >&5 +echo $ECHO_N "checking for working strcoll... $ECHO_C" >&6; } +if test "${ac_cv_func_strcoll_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_strcoll_works=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +return (strcoll ("abc", "def") >= 0 || + strcoll ("ABC", "DEF") >= 0 || + strcoll ("123", "456") >= 0) + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_strcoll_works=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_strcoll_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strcoll_works" >&5 +echo "${ECHO_T}$ac_cv_func_strcoll_works" >&6; } +if test $ac_cv_func_strcoll_works = yes; then + +cat >>confdefs.h <<\_ACEOF +@%:@define HAVE_STRCOLL 1 +_ACEOF + +fi + + +for ac_func in strftime +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + # strftime is in -lintl on SCO UNIX. +{ echo "$as_me:$LINENO: checking for strftime in -lintl" >&5 +echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6; } +if test "${ac_cv_lib_intl_strftime+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strftime (); +int +main () +{ +return strftime (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_intl_strftime=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_intl_strftime=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6; } +if test $ac_cv_lib_intl_strftime = yes; then + cat >>confdefs.h <<\_ACEOF +@%:@define HAVE_STRFTIME 1 +_ACEOF + +LIBS="-lintl $LIBS" +fi + +fi +done + +{ echo "$as_me:$LINENO: checking for working strtod" >&5 +echo $ECHO_N "checking for working strtod... $ECHO_C" >&6; } +if test "${ac_cv_func_strtod+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_strtod=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +$ac_includes_default +#ifndef strtod +double strtod (); +#endif +int +main() +{ + { + /* Some versions of Linux strtod mis-parse strings with leading '+'. */ + char *string = " +69"; + char *term; + double value; + value = strtod (string, &term); + if (value != 69 || term != (string + 4)) + return 1; + } + + { + /* Under Solaris 2.4, strtod returns the wrong value for the + terminating character under some conditions. */ + char *string = "NaN"; + char *term; + strtod (string, &term); + if (term != string && *(term - 1) == 0) + return 1; + } + return 0; +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_strtod=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_strtod=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strtod" >&5 +echo "${ECHO_T}$ac_cv_func_strtod" >&6; } +if test $ac_cv_func_strtod = no; then + case " $LIB@&t@OBJS " in + *" strtod.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strtod.$ac_objext" + ;; +esac + +{ echo "$as_me:$LINENO: checking for pow" >&5 +echo $ECHO_N "checking for pow... $ECHO_C" >&6; } +if test "${ac_cv_func_pow+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define pow to an innocuous variant, in case declares pow. + For example, HP-UX 11i declares gettimeofday. */ +#define pow innocuous_pow + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char pow (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef pow + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pow (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_pow || defined __stub___pow +choke me +#endif + +int +main () +{ +return pow (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_pow=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_pow=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_pow" >&5 +echo "${ECHO_T}$ac_cv_func_pow" >&6; } + +if test $ac_cv_func_pow = no; then + { echo "$as_me:$LINENO: checking for pow in -lm" >&5 +echo $ECHO_N "checking for pow in -lm... $ECHO_C" >&6; } +if test "${ac_cv_lib_m_pow+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pow (); +int +main () +{ +return pow (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_m_pow=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_pow=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_pow" >&5 +echo "${ECHO_T}$ac_cv_lib_m_pow" >&6; } +if test $ac_cv_lib_m_pow = yes; then + POW_LIB=-lm +else + { echo "$as_me:$LINENO: WARNING: cannot find library containing definition of pow" >&5 +echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} +fi + +fi + +fi + + +for ac_func in vprintf +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +{ echo "$as_me:$LINENO: checking for _doprnt" >&5 +echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; } +if test "${ac_cv_func__doprnt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define _doprnt to an innocuous variant, in case declares _doprnt. + For example, HP-UX 11i declares gettimeofday. */ +#define _doprnt innocuous__doprnt + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char _doprnt (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef _doprnt + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char _doprnt (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub__doprnt || defined __stub____doprnt +choke me +#endif + +int +main () +{ +return _doprnt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func__doprnt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func__doprnt=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 +echo "${ECHO_T}$ac_cv_func__doprnt" >&6; } +if test $ac_cv_func__doprnt = yes; then + +cat >>confdefs.h <<\_ACEOF +@%:@define HAVE_DOPRNT 1 +_ACEOF + +fi + +fi +done + + + + + + + + + + + + + + + + + + + +for ac_func in floor isascii localeconv mblen memmove memset modf pow sqrt strcasecmp strchr strerror strncasecmp strrchr strstr strtol strtoul +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# Versioning: +# Only change this if library is no longer +# ABI compatible with previous version +# (e.g. function declaration changed) +TALIB_LIBRARY_VERSION=0:0:0 + + + +ac_config_files="$ac_config_files Makefile src/Makefile src/ta_abstract/Makefile src/ta_common/Makefile src/ta_func/Makefile src/tools/Makefile src/tools/gen_code/Makefile src/tools/ta_regtest/Makefile ta-lib-config ta-lib.spec ta-lib.dpkg" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by ta-lib $as_me 0.4.0, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +ta-lib config.status 0.4.0 +configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2006 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "include/ta_config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/ta_config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "src/ta_abstract/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_abstract/Makefile" ;; + "src/ta_common/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_common/Makefile" ;; + "src/ta_func/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_func/Makefile" ;; + "src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; + "src/tools/gen_code/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/gen_code/Makefile" ;; + "src/tools/ta_regtest/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/ta_regtest/Makefile" ;; + "ta-lib-config") CONFIG_FILES="$CONFIG_FILES ta-lib-config" ;; + "ta-lib.spec") CONFIG_FILES="$CONFIG_FILES ta-lib.spec" ;; + "ta-lib.dpkg") CONFIG_FILES="$CONFIG_FILES ta-lib.dpkg" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# +# Set up the sed scripts for CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + +_ACEOF + + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +SHELL!$SHELL$ac_delim +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim +PACKAGE_NAME!$PACKAGE_NAME$ac_delim +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim +PACKAGE_STRING!$PACKAGE_STRING$ac_delim +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim +exec_prefix!$exec_prefix$ac_delim +prefix!$prefix$ac_delim +program_transform_name!$program_transform_name$ac_delim +bindir!$bindir$ac_delim +sbindir!$sbindir$ac_delim +libexecdir!$libexecdir$ac_delim +datarootdir!$datarootdir$ac_delim +datadir!$datadir$ac_delim +sysconfdir!$sysconfdir$ac_delim +sharedstatedir!$sharedstatedir$ac_delim +localstatedir!$localstatedir$ac_delim +includedir!$includedir$ac_delim +oldincludedir!$oldincludedir$ac_delim +docdir!$docdir$ac_delim +infodir!$infodir$ac_delim +htmldir!$htmldir$ac_delim +dvidir!$dvidir$ac_delim +pdfdir!$pdfdir$ac_delim +psdir!$psdir$ac_delim +libdir!$libdir$ac_delim +localedir!$localedir$ac_delim +mandir!$mandir$ac_delim +DEFS!$DEFS$ac_delim +ECHO_C!$ECHO_C$ac_delim +ECHO_N!$ECHO_N$ac_delim +ECHO_T!$ECHO_T$ac_delim +LIBS!$LIBS$ac_delim +build_alias!$build_alias$ac_delim +host_alias!$host_alias$ac_delim +target_alias!$target_alias$ac_delim +INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim +INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim +INSTALL_DATA!$INSTALL_DATA$ac_delim +am__isrc!$am__isrc$ac_delim +CYGPATH_W!$CYGPATH_W$ac_delim +PACKAGE!$PACKAGE$ac_delim +VERSION!$VERSION$ac_delim +ACLOCAL!$ACLOCAL$ac_delim +AUTOCONF!$AUTOCONF$ac_delim +AUTOMAKE!$AUTOMAKE$ac_delim +AUTOHEADER!$AUTOHEADER$ac_delim +MAKEINFO!$MAKEINFO$ac_delim +install_sh!$install_sh$ac_delim +STRIP!$STRIP$ac_delim +INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim +mkdir_p!$mkdir_p$ac_delim +AWK!$AWK$ac_delim +SET_MAKE!$SET_MAKE$ac_delim +am__leading_dot!$am__leading_dot$ac_delim +AMTAR!$AMTAR$ac_delim +am__tar!$am__tar$ac_delim +am__untar!$am__untar$ac_delim +CC!$CC$ac_delim +CFLAGS!$CFLAGS$ac_delim +LDFLAGS!$LDFLAGS$ac_delim +CPPFLAGS!$CPPFLAGS$ac_delim +ac_ct_CC!$ac_ct_CC$ac_delim +EXEEXT!$EXEEXT$ac_delim +OBJEXT!$OBJEXT$ac_delim +DEPDIR!$DEPDIR$ac_delim +am__include!$am__include$ac_delim +am__quote!$am__quote$ac_delim +AMDEP_TRUE!$AMDEP_TRUE$ac_delim +AMDEP_FALSE!$AMDEP_FALSE$ac_delim +AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim +CCDEPMODE!$CCDEPMODE$ac_delim +am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim +am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim +build!$build$ac_delim +build_cpu!$build_cpu$ac_delim +build_vendor!$build_vendor$ac_delim +build_os!$build_os$ac_delim +host!$host$ac_delim +host_cpu!$host_cpu$ac_delim +host_vendor!$host_vendor$ac_delim +host_os!$host_os$ac_delim +GREP!$GREP$ac_delim +EGREP!$EGREP$ac_delim +LN_S!$LN_S$ac_delim +ECHO!$ECHO$ac_delim +AR!$AR$ac_delim +RANLIB!$RANLIB$ac_delim +CPP!$CPP$ac_delim +CXX!$CXX$ac_delim +CXXFLAGS!$CXXFLAGS$ac_delim +ac_ct_CXX!$ac_ct_CXX$ac_delim +CXXDEPMODE!$CXXDEPMODE$ac_delim +am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim +am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim +CXXCPP!$CXXCPP$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +CEOF$ac_eof +_ACEOF + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +F77!$F77$ac_delim +FFLAGS!$FFLAGS$ac_delim +ac_ct_F77!$ac_ct_F77$ac_delim +LIBTOOL!$LIBTOOL$ac_delim +POW_LIB!$POW_LIB$ac_delim +LIB@&t@OBJS!$LIB@&t@OBJS$ac_delim +TALIB_LIBRARY_VERSION!$TALIB_LIBRARY_VERSION$ac_delim +LTLIBOBJS!$LTLIBOBJS$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 8; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + :H) + # + # CONFIG_HEADER + # +_ACEOF + +# Transform confdefs.h into a sed script `conftest.defines', that +# substitutes the proper values into config.h.in to produce config.h. +rm -f conftest.defines conftest.tail +# First, append a space to every undef/define line, to ease matching. +echo 's/$/ /' >conftest.defines +# Then, protect against being on the right side of a sed subst, or in +# an unquoted here document, in config.status. If some macros were +# called several times there might be several #defines for the same +# symbol, which is useless. But do not sort them, since the last +# AC_DEFINE must be honored. +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where +# NAME is the cpp macro being defined, VALUE is the value it is being given. +# PARAMS is the parameter list in the macro definition--in most cases, it's +# just an empty string. +ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' +ac_dB='\\)[ (].*,\\1define\\2' +ac_dC=' ' +ac_dD=' ,' + +uniq confdefs.h | + sed -n ' + t rset + :rset + s/^[ ]*#[ ]*define[ ][ ]*// + t ok + d + :ok + s/[\\&,]/\\&/g + s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p + s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p + ' >>conftest.defines + +# Remove the space that was appended to ease matching. +# Then replace #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +# (The regexp can be short, since the line contains either #define or #undef.) +echo 's/ $// +s,^[ #]*u.*,/* & */,' >>conftest.defines + +# Break up conftest.defines: +ac_max_sed_lines=50 + +# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" +# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" +# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" +# et cetera. +ac_in='$ac_file_inputs' +ac_out='"$tmp/out1"' +ac_nxt='"$tmp/out2"' + +while : +do + # Write a here document: + cat >>$CONFIG_STATUS <<_ACEOF + # First, check the format of the line: + cat >"\$tmp/defines.sed" <<\\CEOF +/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def +/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def +b +:def +_ACEOF + sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS + ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in + sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail + grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines conftest.tail + +echo "ac_result=$ac_in" >>$CONFIG_STATUS +cat >>$CONFIG_STATUS <<\_ACEOF + if test x"$ac_file" != x-; then + echo "/* $configure_input */" >"$tmp/config.h" + cat "$ac_result" >>"$tmp/config.h" + if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f $ac_file + mv "$tmp/config.h" $ac_file + fi + else + echo "/* $configure_input */" + cat "$ac_result" + fi + rm -f "$tmp/out12" +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| . 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 +echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/autom4te.cache/output.1 b/autom4te.cache/output.1 new file mode 100644 index 000000000..6f729429f --- /dev/null +++ b/autom4te.cache/output.1 @@ -0,0 +1,22200 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.61 for ta-lib 0.4.0. +@%:@ +@%:@ Report bugs to . +@%:@ +@%:@ (c) TicTacTec 2005, 2006 +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +@%:@ This configure script is free software; the Free Software Foundation +@%:@ gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME='ta-lib' +PACKAGE_TARNAME='ta-lib' +PACKAGE_VERSION='0.4.0' +PACKAGE_STRING='ta-lib 0.4.0' +PACKAGE_BUGREPORT='http://sourceforge.net/tracker/?group_id=8903&atid=108903' + +ac_unique_file="src/ta_func/ta_AD.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +am__isrc +CYGPATH_W +PACKAGE +VERSION +ACLOCAL +AUTOCONF +AUTOMAKE +AUTOHEADER +MAKEINFO +install_sh +STRIP +INSTALL_STRIP_PROGRAM +mkdir_p +AWK +SET_MAKE +am__leading_dot +AMTAR +am__tar +am__untar +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +DEPDIR +am__include +am__quote +AMDEP_TRUE +AMDEP_FALSE +AMDEPBACKSLASH +CCDEPMODE +am__fastdepCC_TRUE +am__fastdepCC_FALSE +build +build_cpu +build_vendor +build_os +host +host_cpu +host_vendor +host_os +GREP +EGREP +LN_S +ECHO +AR +RANLIB +CPP +CXX +CXXFLAGS +ac_ct_CXX +CXXDEPMODE +am__fastdepCXX_TRUE +am__fastdepCXX_FALSE +CXXCPP +F77 +FFLAGS +ac_ct_F77 +LIBTOOL +POW_LIB +LIB@&t@OBJS +TALIB_LIBRARY_VERSION +LTLIBOBJS' +ac_subst_files='' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CXX +CXXFLAGS +CCC +CXXCPP +F77 +FFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute directory names. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$0" || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures ta-lib 0.4.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root @<:@DATAROOTDIR/doc/ta-lib@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of ta-lib 0.4.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-pic try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-tags@<:@=TAGS@:>@ include additional configurations @<:@automatic@:>@ + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +ta-lib configure 0.4.0 +generated by GNU Autoconf 2.61 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. + +(c) TicTacTec 2005, 2006 +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by ta-lib $as_me 0.4.0, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +@%:@@%:@ --------- @%:@@%:@ +@%:@@%:@ Platform. @%:@@%:@ +@%:@@%:@ --------- @%:@@%:@ + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +@%:@@%:@ ----------- @%:@@%:@ +@%:@@%:@ Core tests. @%:@@%:@ +@%:@@%:@ ----------- @%:@@%:@ + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +@%:@@%:@ ---------------- @%:@@%:@ +@%:@@%:@ Cache variables. @%:@@%:@ +@%:@@%:@ ---------------- @%:@@%:@ +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +@%:@@%:@ ----------------- @%:@@%:@ +@%:@@%:@ Output variables. @%:@@%:@ +@%:@@%:@ ----------------- @%:@@%:@ +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +@%:@@%:@ ------------------- @%:@@%:@ +@%:@@%:@ File substitutions. @%:@@%:@ +@%:@@%:@ ------------------- @%:@@%:@ +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +@%:@@%:@ ----------- @%:@@%:@ +@%:@@%:@ confdefs.h. @%:@@%:@ +@%:@@%:@ ----------- @%:@@%:@ +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + set x "$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + set x "$prefix/share/config.site" "$prefix/etc/config.site" +else + set x "$ac_default_prefix/share/config.site" \ + "$ac_default_prefix/etc/config.site" +fi +shift +for ac_site_file +do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_headers="$ac_config_headers include/ta_config.h" + +am__api_version='1.10' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done +IFS=$as_save_IFS + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm -f conftest.sed + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +echo "${ECHO_T}$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } +set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + SET_MAKE= +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=ta-lib + VERSION=0.4.0 + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +# +# List of possible output files, starting from the most likely. +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) +# only as a last resort. b.out is created by i960 compilers. +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' +# +# The IRIX 6 linker writes into existing files which may not be +# executable, retaining their permissions. Remove them first so a +# subsequent execution test works. +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6; } +if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6; } + +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +{ echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + +# Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6; } +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6; } +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done + +fi + +SED=$lt_cv_path_SED +{ echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6; } + +{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Extract the first word of "grep ggrep" to use in msg output +if test -z "$GREP"; then +set dummy grep ggrep; ac_prog_name=$2 +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_GREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + # Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +GREP="$ac_cv_path_GREP" +if test -z "$GREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_GREP=$GREP +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +echo "${ECHO_T}$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + # Extract the first word of "egrep" to use in msg output +if test -z "$EGREP"; then +set dummy egrep; ac_prog_name=$2 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_EGREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + # Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +EGREP="$ac_cv_path_EGREP" +if test -z "$EGREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_EGREP=$EGREP +fi + + + fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + +{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi +{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6; } +NM="$lt_cv_path_NM" + +{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6; } +fi + +{ echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump'. + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix3*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line __oline__ "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_cc_needs_belf=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) LD="${LD-ld} -64" ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + + +esac + +need_locks="$enable_libtool_lock" + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +@%:@define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +@%:@include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +@%:@include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +@%:@@%:@ ------------------------------------------------------------------------ @%:@@%:@ +@%:@@%:@ Report this to http://sourceforge.net/tracker/?group_id=8903&atid=108903 @%:@@%:@ +@%:@@%:@ ------------------------------------------------------------------------ @%:@@%:@ +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CXXFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 +echo "${ECHO_T}$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +fi + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { echo "$as_me:$LINENO: result: $F77" >&5 +echo "${ECHO_T}$F77" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_F77="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +echo "${ECHO_T}$ac_ct_F77" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_f77_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_f77_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_f77_g=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +G77=`test $ac_compiler_gnu = yes && echo yes` +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } +else + { echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6; } +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux* | k*bsd*-gnu) + if test "$host_cpu" = ia64; then + symcode='[ABCDGIRSTW]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6; } +else + { echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6; } +fi + +{ echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=no +enable_win32_dll=no + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic='-qnocommon' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } + +if test x"$lt_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works=yes + fi + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix3*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs=no + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var" || \ + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6; } + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + ;; + *) + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + { echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# Report which library types will actually be built +{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +{ echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +{ echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6; } + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +# Check whether --with-tags was given. +if test "${with_tags+set}" = set; then + withval=$with_tags; tagnames="$withval" +fi + + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + fi + fi + if test -z "$LTCFLAGS"; then + eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + $as_unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + $as_unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +compiler_CXX=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_CXX=yes + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_CXX=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + interix3*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc*) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC*) + # Portland Group C++ compiler + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + openbsd*) + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ + $rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + # So that behaviour is only enabled if SCOABSPATH is set to a + # non-empty value in the environment. Most likely only useful for + # creating official distributions of packages. + # This is a hack until libtool officially supports absolute path + # names for shared libraries. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; +esac +{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$rm -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix3*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +solaris*) + case $cc_basename in + CC*) + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + postdeps_CXX='-lCstd -lCrun' + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_CXX='-qnocommon' + lt_prog_compiler_wl_CXX='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc* | ecpc*) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC*) + # Portland Group C++ compiler. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_CXX=yes + fi + else + lt_prog_compiler_static_works_CXX=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var_CXX" || \ + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_CXX +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_CXX" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +{ echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +{ echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6; } + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_F77='-qnocommon' + lt_prog_compiler_wl_F77='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-fpic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_F77='-Qoption ld ';; + *) + lt_prog_compiler_wl_F77='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_can_build_shared_F77=no + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_F77=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_F77=yes + fi + else + lt_prog_compiler_static_works_F77=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; } + +if test x"$lt_prog_compiler_static_works_F77" = xyes; then + : +else + lt_prog_compiler_static_F77= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_F77=no + fi + ;; + + interix3*) + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs_F77=no + else + ld_shlibs_F77=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_F77=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = no; then + runpath_var= + hardcode_libdir_flag_spec_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77='$convenience' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_F77='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_F77=no + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='' + link_all_deplibs_F77=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_F77=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + *) + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag_F77='${wl}-z,text' + archive_cmds_need_lc_F77=no + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_F77='${wl}-z,text' + allow_undefined_flag_F77='${wl}-z,nodefs' + archive_cmds_need_lc_F77=no + hardcode_shlibpath_var_F77=no + hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6; } +test "$ld_shlibs_F77" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + pic_flag=$lt_prog_compiler_pic_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var_F77" || \ + test "X$hardcode_automatic_F77" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6; } + +if test "$hardcode_action_F77" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_F77 +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_F77 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + +old_archive_cmds_GCJ=$old_archive_cmds + + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_GCJ='-qnocommon' + lt_prog_compiler_wl_GCJ='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-fpic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_GCJ='-Qoption ld ';; + *) + lt_prog_compiler_wl_GCJ='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_can_build_shared_GCJ=no + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_GCJ=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_GCJ=yes + fi + else + lt_prog_compiler_static_works_GCJ=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; } + +if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then + : +else + lt_prog_compiler_static_GCJ= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_GCJ=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_GCJ= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_GCJ=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + interix3*) + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs_GCJ=no + else + ld_shlibs_GCJ=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_GCJ=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = no; then + runpath_var= + hardcode_libdir_flag_spec_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_GCJ=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_GCJ=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ='$convenience' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec_GCJ=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_GCJ=' ' + allow_undefined_flag_GCJ=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_GCJ=no + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='' + link_all_deplibs_GCJ=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_GCJ=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + *) + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs_GCJ=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z,text' + archive_cmds_need_lc_GCJ=no + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_GCJ='${wl}-z,text' + allow_undefined_flag_GCJ='${wl}-z,nodefs' + archive_cmds_need_lc_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } +test "$ld_shlibs_GCJ" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + pic_flag=$lt_prog_compiler_pic_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var_GCJ" || \ + test "X$hardcode_automatic_GCJ" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6; } + +if test "$hardcode_action_GCJ" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_GCJ + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_GCJ +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_GCJ +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_GCJ + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_GCJ + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_GCJ + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_RC +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_RC + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + + +# Checks for libraries. + +{ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + + +{ echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 +echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; } +if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_pthread_pthread_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_pthread_pthread_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5 +echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6; } +if test $ac_cv_lib_pthread_pthread_create = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +fi + + +# Checks for header files. +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +@%:@define STDC_HEADERS 1 +_ACEOF + +fi + + + + + + + + + + + + +for ac_header in float.h inttypes.h limits.h locale.h stddef.h stdint.h stdlib.h string.h unistd.h wchar.h wctype.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +@%:@include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +@%:@include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +@%:@@%:@ ------------------------------------------------------------------------ @%:@@%:@ +@%:@@%:@ Report this to http://sourceforge.net/tracker/?group_id=8903&atid=108903 @%:@@%:@ +@%:@@%:@ ------------------------------------------------------------------------ @%:@@%:@ +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +# Checks for typedefs, structures, and compiler characteristics. +{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_const=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +@%:@define const +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef size_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_size_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6; } +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +@%:@define size_t unsigned int +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 +echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; } +if test "${ac_cv_struct_tm+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +struct tm tm; + int *p = &tm.tm_sec; + return !p; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_struct_tm=time.h +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_struct_tm=sys/time.h +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 +echo "${ECHO_T}$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then + +cat >>confdefs.h <<\_ACEOF +@%:@define TM_IN_SYS_TIME 1 +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for working volatile" >&5 +echo $ECHO_N "checking for working volatile... $ECHO_C" >&6; } +if test "${ac_cv_c_volatile+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + +volatile int x; +int * volatile y = (int *) 0; +return !x && !y; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_volatile=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_volatile=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5 +echo "${ECHO_T}$ac_cv_c_volatile" >&6; } +if test $ac_cv_c_volatile = no; then + +cat >>confdefs.h <<\_ACEOF +@%:@define volatile +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for ptrdiff_t" >&5 +echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6; } +if test "${ac_cv_type_ptrdiff_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef ptrdiff_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_ptrdiff_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_ptrdiff_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5 +echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6; } +if test $ac_cv_type_ptrdiff_t = yes; then + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE_PTRDIFF_T 1 +_ACEOF + + +fi + + +# Checks for library functions. +{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5 +echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; } +if test "${ac_cv_type_signal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_signal=int +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_signal=void +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 +echo "${ECHO_T}$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +@%:@define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +{ echo "$as_me:$LINENO: checking for working strcoll" >&5 +echo $ECHO_N "checking for working strcoll... $ECHO_C" >&6; } +if test "${ac_cv_func_strcoll_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_strcoll_works=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +return (strcoll ("abc", "def") >= 0 || + strcoll ("ABC", "DEF") >= 0 || + strcoll ("123", "456") >= 0) + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_strcoll_works=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_strcoll_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strcoll_works" >&5 +echo "${ECHO_T}$ac_cv_func_strcoll_works" >&6; } +if test $ac_cv_func_strcoll_works = yes; then + +cat >>confdefs.h <<\_ACEOF +@%:@define HAVE_STRCOLL 1 +_ACEOF + +fi + + +for ac_func in strftime +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + # strftime is in -lintl on SCO UNIX. +{ echo "$as_me:$LINENO: checking for strftime in -lintl" >&5 +echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6; } +if test "${ac_cv_lib_intl_strftime+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strftime (); +int +main () +{ +return strftime (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_intl_strftime=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_intl_strftime=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6; } +if test $ac_cv_lib_intl_strftime = yes; then + cat >>confdefs.h <<\_ACEOF +@%:@define HAVE_STRFTIME 1 +_ACEOF + +LIBS="-lintl $LIBS" +fi + +fi +done + +{ echo "$as_me:$LINENO: checking for working strtod" >&5 +echo $ECHO_N "checking for working strtod... $ECHO_C" >&6; } +if test "${ac_cv_func_strtod+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_strtod=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +$ac_includes_default +#ifndef strtod +double strtod (); +#endif +int +main() +{ + { + /* Some versions of Linux strtod mis-parse strings with leading '+'. */ + char *string = " +69"; + char *term; + double value; + value = strtod (string, &term); + if (value != 69 || term != (string + 4)) + return 1; + } + + { + /* Under Solaris 2.4, strtod returns the wrong value for the + terminating character under some conditions. */ + char *string = "NaN"; + char *term; + strtod (string, &term); + if (term != string && *(term - 1) == 0) + return 1; + } + return 0; +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_strtod=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_strtod=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strtod" >&5 +echo "${ECHO_T}$ac_cv_func_strtod" >&6; } +if test $ac_cv_func_strtod = no; then + case " $LIB@&t@OBJS " in + *" strtod.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strtod.$ac_objext" + ;; +esac + +{ echo "$as_me:$LINENO: checking for pow" >&5 +echo $ECHO_N "checking for pow... $ECHO_C" >&6; } +if test "${ac_cv_func_pow+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define pow to an innocuous variant, in case declares pow. + For example, HP-UX 11i declares gettimeofday. */ +#define pow innocuous_pow + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char pow (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef pow + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pow (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_pow || defined __stub___pow +choke me +#endif + +int +main () +{ +return pow (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_pow=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_pow=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_pow" >&5 +echo "${ECHO_T}$ac_cv_func_pow" >&6; } + +if test $ac_cv_func_pow = no; then + { echo "$as_me:$LINENO: checking for pow in -lm" >&5 +echo $ECHO_N "checking for pow in -lm... $ECHO_C" >&6; } +if test "${ac_cv_lib_m_pow+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pow (); +int +main () +{ +return pow (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_m_pow=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_pow=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_pow" >&5 +echo "${ECHO_T}$ac_cv_lib_m_pow" >&6; } +if test $ac_cv_lib_m_pow = yes; then + POW_LIB=-lm +else + { echo "$as_me:$LINENO: WARNING: cannot find library containing definition of pow" >&5 +echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} +fi + +fi + +fi + + +for ac_func in vprintf +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +{ echo "$as_me:$LINENO: checking for _doprnt" >&5 +echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; } +if test "${ac_cv_func__doprnt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define _doprnt to an innocuous variant, in case declares _doprnt. + For example, HP-UX 11i declares gettimeofday. */ +#define _doprnt innocuous__doprnt + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char _doprnt (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef _doprnt + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char _doprnt (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub__doprnt || defined __stub____doprnt +choke me +#endif + +int +main () +{ +return _doprnt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func__doprnt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func__doprnt=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 +echo "${ECHO_T}$ac_cv_func__doprnt" >&6; } +if test $ac_cv_func__doprnt = yes; then + +cat >>confdefs.h <<\_ACEOF +@%:@define HAVE_DOPRNT 1 +_ACEOF + +fi + +fi +done + + + + + + + + + + + + + + + + + + + +for ac_func in floor isascii localeconv mblen memmove memset modf pow sqrt strcasecmp strchr strerror strncasecmp strrchr strstr strtol strtoul +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# Versioning: +# Only change this if library is no longer +# ABI compatible with previous version +# (e.g. function declaration changed) +TALIB_LIBRARY_VERSION=0:0:0 + + + +ac_config_files="$ac_config_files Makefile src/Makefile src/ta_abstract/Makefile src/ta_common/Makefile src/ta_func/Makefile src/tools/Makefile src/tools/gen_code/Makefile src/tools/ta_regtest/Makefile ta-lib-config ta-lib.spec ta-lib.dpkg" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by ta-lib $as_me 0.4.0, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +ta-lib config.status 0.4.0 +configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2006 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "include/ta_config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/ta_config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "src/ta_abstract/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_abstract/Makefile" ;; + "src/ta_common/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_common/Makefile" ;; + "src/ta_func/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_func/Makefile" ;; + "src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; + "src/tools/gen_code/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/gen_code/Makefile" ;; + "src/tools/ta_regtest/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/ta_regtest/Makefile" ;; + "ta-lib-config") CONFIG_FILES="$CONFIG_FILES ta-lib-config" ;; + "ta-lib.spec") CONFIG_FILES="$CONFIG_FILES ta-lib.spec" ;; + "ta-lib.dpkg") CONFIG_FILES="$CONFIG_FILES ta-lib.dpkg" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# +# Set up the sed scripts for CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + +_ACEOF + + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +SHELL!$SHELL$ac_delim +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim +PACKAGE_NAME!$PACKAGE_NAME$ac_delim +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim +PACKAGE_STRING!$PACKAGE_STRING$ac_delim +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim +exec_prefix!$exec_prefix$ac_delim +prefix!$prefix$ac_delim +program_transform_name!$program_transform_name$ac_delim +bindir!$bindir$ac_delim +sbindir!$sbindir$ac_delim +libexecdir!$libexecdir$ac_delim +datarootdir!$datarootdir$ac_delim +datadir!$datadir$ac_delim +sysconfdir!$sysconfdir$ac_delim +sharedstatedir!$sharedstatedir$ac_delim +localstatedir!$localstatedir$ac_delim +includedir!$includedir$ac_delim +oldincludedir!$oldincludedir$ac_delim +docdir!$docdir$ac_delim +infodir!$infodir$ac_delim +htmldir!$htmldir$ac_delim +dvidir!$dvidir$ac_delim +pdfdir!$pdfdir$ac_delim +psdir!$psdir$ac_delim +libdir!$libdir$ac_delim +localedir!$localedir$ac_delim +mandir!$mandir$ac_delim +DEFS!$DEFS$ac_delim +ECHO_C!$ECHO_C$ac_delim +ECHO_N!$ECHO_N$ac_delim +ECHO_T!$ECHO_T$ac_delim +LIBS!$LIBS$ac_delim +build_alias!$build_alias$ac_delim +host_alias!$host_alias$ac_delim +target_alias!$target_alias$ac_delim +INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim +INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim +INSTALL_DATA!$INSTALL_DATA$ac_delim +am__isrc!$am__isrc$ac_delim +CYGPATH_W!$CYGPATH_W$ac_delim +PACKAGE!$PACKAGE$ac_delim +VERSION!$VERSION$ac_delim +ACLOCAL!$ACLOCAL$ac_delim +AUTOCONF!$AUTOCONF$ac_delim +AUTOMAKE!$AUTOMAKE$ac_delim +AUTOHEADER!$AUTOHEADER$ac_delim +MAKEINFO!$MAKEINFO$ac_delim +install_sh!$install_sh$ac_delim +STRIP!$STRIP$ac_delim +INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim +mkdir_p!$mkdir_p$ac_delim +AWK!$AWK$ac_delim +SET_MAKE!$SET_MAKE$ac_delim +am__leading_dot!$am__leading_dot$ac_delim +AMTAR!$AMTAR$ac_delim +am__tar!$am__tar$ac_delim +am__untar!$am__untar$ac_delim +CC!$CC$ac_delim +CFLAGS!$CFLAGS$ac_delim +LDFLAGS!$LDFLAGS$ac_delim +CPPFLAGS!$CPPFLAGS$ac_delim +ac_ct_CC!$ac_ct_CC$ac_delim +EXEEXT!$EXEEXT$ac_delim +OBJEXT!$OBJEXT$ac_delim +DEPDIR!$DEPDIR$ac_delim +am__include!$am__include$ac_delim +am__quote!$am__quote$ac_delim +AMDEP_TRUE!$AMDEP_TRUE$ac_delim +AMDEP_FALSE!$AMDEP_FALSE$ac_delim +AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim +CCDEPMODE!$CCDEPMODE$ac_delim +am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim +am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim +build!$build$ac_delim +build_cpu!$build_cpu$ac_delim +build_vendor!$build_vendor$ac_delim +build_os!$build_os$ac_delim +host!$host$ac_delim +host_cpu!$host_cpu$ac_delim +host_vendor!$host_vendor$ac_delim +host_os!$host_os$ac_delim +GREP!$GREP$ac_delim +EGREP!$EGREP$ac_delim +LN_S!$LN_S$ac_delim +ECHO!$ECHO$ac_delim +AR!$AR$ac_delim +RANLIB!$RANLIB$ac_delim +CPP!$CPP$ac_delim +CXX!$CXX$ac_delim +CXXFLAGS!$CXXFLAGS$ac_delim +ac_ct_CXX!$ac_ct_CXX$ac_delim +CXXDEPMODE!$CXXDEPMODE$ac_delim +am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim +am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim +CXXCPP!$CXXCPP$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +CEOF$ac_eof +_ACEOF + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +F77!$F77$ac_delim +FFLAGS!$FFLAGS$ac_delim +ac_ct_F77!$ac_ct_F77$ac_delim +LIBTOOL!$LIBTOOL$ac_delim +POW_LIB!$POW_LIB$ac_delim +LIB@&t@OBJS!$LIB@&t@OBJS$ac_delim +TALIB_LIBRARY_VERSION!$TALIB_LIBRARY_VERSION$ac_delim +LTLIBOBJS!$LTLIBOBJS$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 8; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + :H) + # + # CONFIG_HEADER + # +_ACEOF + +# Transform confdefs.h into a sed script `conftest.defines', that +# substitutes the proper values into config.h.in to produce config.h. +rm -f conftest.defines conftest.tail +# First, append a space to every undef/define line, to ease matching. +echo 's/$/ /' >conftest.defines +# Then, protect against being on the right side of a sed subst, or in +# an unquoted here document, in config.status. If some macros were +# called several times there might be several #defines for the same +# symbol, which is useless. But do not sort them, since the last +# AC_DEFINE must be honored. +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where +# NAME is the cpp macro being defined, VALUE is the value it is being given. +# PARAMS is the parameter list in the macro definition--in most cases, it's +# just an empty string. +ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' +ac_dB='\\)[ (].*,\\1define\\2' +ac_dC=' ' +ac_dD=' ,' + +uniq confdefs.h | + sed -n ' + t rset + :rset + s/^[ ]*#[ ]*define[ ][ ]*// + t ok + d + :ok + s/[\\&,]/\\&/g + s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p + s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p + ' >>conftest.defines + +# Remove the space that was appended to ease matching. +# Then replace #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +# (The regexp can be short, since the line contains either #define or #undef.) +echo 's/ $// +s,^[ #]*u.*,/* & */,' >>conftest.defines + +# Break up conftest.defines: +ac_max_sed_lines=50 + +# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" +# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" +# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" +# et cetera. +ac_in='$ac_file_inputs' +ac_out='"$tmp/out1"' +ac_nxt='"$tmp/out2"' + +while : +do + # Write a here document: + cat >>$CONFIG_STATUS <<_ACEOF + # First, check the format of the line: + cat >"\$tmp/defines.sed" <<\\CEOF +/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def +/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def +b +:def +_ACEOF + sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS + ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in + sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail + grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines conftest.tail + +echo "ac_result=$ac_in" >>$CONFIG_STATUS +cat >>$CONFIG_STATUS <<\_ACEOF + if test x"$ac_file" != x-; then + echo "/* $configure_input */" >"$tmp/config.h" + cat "$ac_result" >>"$tmp/config.h" + if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f $ac_file + mv "$tmp/config.h" $ac_file + fi + else + echo "/* $configure_input */" + cat "$ac_result" + fi + rm -f "$tmp/out12" +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| . 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 +echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/autom4te.cache/requests b/autom4te.cache/requests new file mode 100644 index 000000000..d6b70b091 --- /dev/null +++ b/autom4te.cache/requests @@ -0,0 +1,210 @@ +# This file was generated by Autom4te Wed Dec 20 15:07:46 UTC 2006. +# It contains the lists of macros which have been traced. +# It can be safely removed. + +@request = ( + bless( [ + '0', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + '/usr/share/aclocal/libtool.m4', + '/usr/share/aclocal-1.10/amversion.m4', + '/usr/share/aclocal-1.10/auxdir.m4', + '/usr/share/aclocal-1.10/cond.m4', + '/usr/share/aclocal-1.10/depend.m4', + '/usr/share/aclocal-1.10/depout.m4', + '/usr/share/aclocal-1.10/init.m4', + '/usr/share/aclocal-1.10/install-sh.m4', + '/usr/share/aclocal-1.10/lead-dot.m4', + '/usr/share/aclocal-1.10/make.m4', + '/usr/share/aclocal-1.10/missing.m4', + '/usr/share/aclocal-1.10/mkdirp.m4', + '/usr/share/aclocal-1.10/options.m4', + '/usr/share/aclocal-1.10/runlog.m4', + '/usr/share/aclocal-1.10/sanity.m4', + '/usr/share/aclocal-1.10/strip.m4', + '/usr/share/aclocal-1.10/substnot.m4', + '/usr/share/aclocal-1.10/tar.m4', + 'configure.in' + ], + { + '_LT_AC_TAGCONFIG' => 1, + 'AM_ENABLE_STATIC' => 1, + 'm4_pattern_forbid' => 1, + 'AC_LIBTOOL_COMPILER_OPTION' => 1, + 'AC_LIBTOOL_LANG_RC_CONFIG' => 1, + '_LT_AC_SHELL_INIT' => 1, + 'AC_DISABLE_SHARED' => 1, + 'AC_DEFUN' => 1, + '_LT_COMPILER_BOILERPLATE' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AC_LIBTOOL_SETUP' => 1, + 'AC_LIBTOOL_WIN32_DLL' => 1, + '_LT_AC_LANG_CXX_CONFIG' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'AC_PROG_LD_RELOAD_FLAG' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'AM_MISSING_HAS_RUN' => 1, + 'AM_MISSING_PROG' => 1, + 'AC_LIBTOOL_DLOPEN_SELF' => 1, + 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1, + '_LT_AC_LANG_C_CONFIG' => 1, + 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + '_m4_warn' => 1, + 'AC_LIBTOOL_OBJDIR' => 1, + 'AM_SANITY_CHECK' => 1, + 'AC_LIBTOOL_LINKER_OPTION' => 1, + 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, + 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, + '_LT_AC_CHECK_DLFCN' => 1, + 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1, + 'AC_LIBTOOL_CXX' => 1, + 'LT_AC_PROG_RC' => 1, + '_AM_PROG_TAR' => 1, + 'LT_AC_PROG_GCJ' => 1, + 'AC_LIBTOOL_GCJ' => 1, + 'AM_DEP_TRACK' => 1, + '_LT_AC_PROG_CXXCPP' => 1, + 'AM_DISABLE_STATIC' => 1, + '_AC_PROG_LIBTOOL' => 1, + '_LT_AC_LANG_F77' => 1, + 'AC_LIBTOOL_CONFIG' => 1, + '_AM_IF_OPTION' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'AC_PATH_TOOL_PREFIX' => 1, + 'AC_LIBTOOL_F77' => 1, + '_AM_AUTOCONF_VERSION' => 1, + 'm4_pattern_allow' => 1, + 'AM_DISABLE_SHARED' => 1, + 'AM_SET_LEADING_DOT' => 1, + '_LT_AC_LANG_CXX' => 1, + 'AM_PROG_LIBTOOL' => 1, + '_AM_DEPENDENCIES' => 1, + '_LT_AC_FILE_LTDLL_C' => 1, + 'AM_PROG_LD' => 1, + 'AC_LIBTOOL_LANG_C_CONFIG' => 1, + '_LT_AC_SYS_COMPILER' => 1, + 'AM_PROG_NM' => 1, + 'AU_DEFUN' => 1, + 'AC_PROG_NM' => 1, + 'AC_LIBTOOL_DLOPEN' => 1, + 'AC_LIBLTDL_CONVENIENCE' => 1, + 'AC_PROG_LD' => 1, + 'AC_PROG_LD_GNU' => 1, + 'AC_ENABLE_FAST_INSTALL' => 1, + 'AC_DEPLIBS_CHECK_METHOD' => 1, + 'AC_LIBLTDL_INSTALLABLE' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, + '_AM_SET_OPTION' => 1, + '_LT_LINKER_BOILERPLATE' => 1, + 'AC_LIBTOOL_PROG_CC_C_O' => 1, + 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_DISABLE_STATIC' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AC_DEFUN_ONCE' => 1, + '_LT_AC_LOCK' => 1, + '_LT_AC_LANG_RC_CONFIG' => 1, + '_LT_AC_LANG_GCJ' => 1, + 'AC_LIBTOOL_RC' => 1, + '_LT_AC_PROG_ECHO_BACKSLASH' => 1, + 'AC_DISABLE_FAST_INSTALL' => 1, + 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, + '_LT_AC_TRY_DLOPEN_SELF' => 1, + '_LT_AC_SYS_LIBPATH_AIX' => 1, + 'include' => 1, + 'LT_AC_PROG_SED' => 1, + 'AM_ENABLE_SHARED' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + '_LT_AC_LANG_GCJ_CONFIG' => 1, + 'AC_ENABLE_SHARED' => 1, + 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, + '_LT_AC_LANG_F77_CONFIG' => 1, + '_AM_SET_OPTIONS' => 1, + 'AM_RUN_LOG' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AC_LIBTOOL_PICMODE' => 1, + 'AC_ENABLE_STATIC' => 1, + 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, + 'AC_CHECK_LIBM' => 1, + '_LT_AC_TAGVAR' => 1, + 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, + '_AM_MANGLE_OPTION' => 1, + 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, + 'AM_CONDITIONAL' => 1, + 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, + 'AM_SET_DEPDIR' => 1, + '_LT_CC_BASENAME' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'm4_include' => 1, + 'AC_PROG_EGREP' => 1, + 'AC_PATH_MAGIC' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AM_MAKE_INCLUDE' => 1 + } + ], 'Autom4te::Request' ), + bless( [ + '1', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + 'aclocal.m4', + 'configure.in' + ], + { + '_LT_AC_TAGCONFIG' => 1, + 'AM_PROG_F77_C_O' => 1, + 'AC_INIT' => 1, + 'm4_pattern_forbid' => 1, + 'AC_CANONICAL_TARGET' => 1, + 'AC_SUBST' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, + 'AC_FC_SRCEXT' => 1, + 'AC_CANONICAL_HOST' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_CONFIG_SUBDIRS' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_REQUIRE_AUX_FILE' => 1, + 'AC_CONFIG_LINKS' => 1, + 'm4_sinclude' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'AM_MAINTAINER_MODE' => 1, + 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + '_m4_warn' => 1, + 'AM_PROG_CXX_C_O' => 1, + 'AM_ENABLE_MULTILIB' => 1, + 'AC_CONFIG_FILES' => 1, + 'include' => 1, + 'LT_INIT' => 1, + 'AM_GNU_GETTEXT' => 1, + 'AC_LIBSOURCE' => 1, + 'AM_PROG_FC_C_O' => 1, + 'AC_CANONICAL_BUILD' => 1, + 'AC_FC_FREEFORM' => 1, + 'AH_OUTPUT' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'AC_CONFIG_AUX_DIR' => 1, + 'sinclude' => 1, + 'AM_PROG_CC_C_O' => 1, + 'm4_pattern_allow' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'AM_CONDITIONAL' => 1, + 'AC_CONFIG_HEADERS' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, + 'm4_include' => 1, + 'AC_SUBST_TRACE' => 1 + } + ], 'Autom4te::Request' ) + ); + diff --git a/autom4te.cache/traces.0 b/autom4te.cache/traces.0 new file mode 100644 index 000000000..58bc6c1b7 --- /dev/null +++ b/autom4te.cache/traces.0 @@ -0,0 +1,9052 @@ +m4trace:/usr/share/aclocal/libtool.m4:25: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote AM_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or AM_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])]) +m4trace:/usr/share/aclocal/libtool.m4:60: -1- AC_DEFUN([_AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +]) +m4trace:/usr/share/aclocal/libtool.m4:80: -1- AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +]) +m4trace:/usr/share/aclocal/libtool.m4:225: -1- AC_DEFUN([_LT_AC_SYS_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +]) +m4trace:/usr/share/aclocal/libtool.m4:242: -1- AC_DEFUN([_LT_CC_BASENAME], [for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) +m4trace:/usr/share/aclocal/libtool.m4:259: -1- AC_DEFUN([_LT_COMPILER_BOILERPLATE], [ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* +]) +m4trace:/usr/share/aclocal/libtool.m4:272: -1- AC_DEFUN([_LT_LINKER_BOILERPLATE], [ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* +]) +m4trace:/usr/share/aclocal/libtool.m4:289: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], [AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +]) +m4trace:/usr/share/aclocal/libtool.m4:302: -1- AC_DEFUN([_LT_AC_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +]) +m4trace:/usr/share/aclocal/libtool.m4:315: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], [_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])]) +m4trace:/usr/share/aclocal/libtool.m4:469: -1- AC_DEFUN([_LT_AC_LOCK], [AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) LD="${LD-ld} -64" ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +]) +m4trace:/usr/share/aclocal/libtool.m4:615: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:660: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:695: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:810: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h)dnl +]) +m4trace:/usr/share/aclocal/libtool.m4:818: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +]) +m4trace:/usr/share/aclocal/libtool.m4:908: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1022: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +]) +m4trace:/usr/share/aclocal/libtool.m4:1073: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1099: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +]) +m4trace:/usr/share/aclocal/libtool.m4:1117: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1157: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], [striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1187: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1775: -1- AC_DEFUN([_LT_AC_TAGCONFIG], [AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + if test -z "$LTCFLAGS"; then + eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1880: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +]) +m4trace:/usr/share/aclocal/libtool.m4:1888: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +]) +m4trace:/usr/share/aclocal/libtool.m4:1897: -1- AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]AC_ENABLE_SHARED_DEFAULT) +]) +m4trace:/usr/share/aclocal/libtool.m4:1926: -1- AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +]) +m4trace:/usr/share/aclocal/libtool.m4:1936: -1- AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]AC_ENABLE_STATIC_DEFAULT) +]) +m4trace:/usr/share/aclocal/libtool.m4:1965: -1- AC_DEFUN([AC_DISABLE_STATIC], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +]) +m4trace:/usr/share/aclocal/libtool.m4:1975: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) +]) +m4trace:/usr/share/aclocal/libtool.m4:2004: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +]) +m4trace:/usr/share/aclocal/libtool.m4:2014: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +]) +m4trace:/usr/share/aclocal/libtool.m4:2038: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_REQUIRE([AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:2101: -1- AC_DEFUN([AC_PATH_MAGIC], [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:2116: -1- AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix3*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown +]) +m4trace:/usr/share/aclocal/libtool.m4:2428: -1- AC_DEFUN([AC_PROG_NM], [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +]) +m4trace:/usr/share/aclocal/libtool.m4:2480: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +]) +m4trace:/usr/share/aclocal/libtool.m4:2509: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +]) +m4trace:/usr/share/aclocal/libtool.m4:2535: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +]) +m4trace:/usr/share/aclocal/libtool.m4:2562: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_REQUIRE([_LT_AC_LANG_CXX]) +]) +m4trace:/usr/share/aclocal/libtool.m4:2569: -1- AC_DEFUN([_LT_AC_LANG_CXX], [AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +]) +m4trace:/usr/share/aclocal/libtool.m4:2577: -1- AC_DEFUN([_LT_AC_PROG_CXXCPP], [ +AC_REQUIRE([AC_PROG_CXX]) +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:2590: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_REQUIRE([_LT_AC_LANG_F77]) +]) +m4trace:/usr/share/aclocal/libtool.m4:2597: -1- AC_DEFUN([_LT_AC_LANG_F77], [AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +]) +m4trace:/usr/share/aclocal/libtool.m4:2606: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_REQUIRE([_LT_AC_LANG_GCJ]) +]) +m4trace:/usr/share/aclocal/libtool.m4:2613: -1- AC_DEFUN([_LT_AC_LANG_GCJ], [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +]) +m4trace:/usr/share/aclocal/libtool.m4:2627: -1- AC_DEFUN([AC_LIBTOOL_RC], [AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +]) +m4trace:/usr/share/aclocal/libtool.m4:2638: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +m4trace:/usr/share/aclocal/libtool.m4:2639: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG], [lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF + +# Report which library types will actually be built +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +]) +m4trace:/usr/share/aclocal/libtool.m4:2719: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +m4trace:/usr/share/aclocal/libtool.m4:2720: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], [AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + $as_unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + $as_unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + ;; + *) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + interix3*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc*) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC*) + # Portland Group C++ compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + # So that behaviour is only enabled if SCOABSPATH is set to a + # non-empty value in the environment. Most likely only useful for + # creating official distributions of packages. + # This is a hack until libtool officially supports absolute path + # names for shared libraries. + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +]) +m4trace:/usr/share/aclocal/libtool.m4:3727: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP], [ +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:4583: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:4601: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux* | k*bsd*-gnu) + if test "$host_cpu" = ia64; then + symcode='[[ABCDGIRSTW]]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:4803: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc* | ecpc*) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC*) + # Portland Group C++ compiler. + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) +]) +m4trace:/usr/share/aclocal/libtool.m4:5330: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + _LT_CC_BASENAME([$compiler]) + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix3*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi[[45]]*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + *) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +]) +m4trace:/usr/share/aclocal/libtool.m4:6264: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +]) +m4trace:/usr/share/aclocal/libtool.m4:6303: -1- AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) +m4trace:/usr/share/aclocal/libtool.m4:6307: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +m4trace:/usr/share/aclocal/libtool.m4:6308: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/libtool.m4:6309: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/libtool.m4:6310: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/libtool.m4:6311: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/libtool.m4:6312: -1- AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +m4trace:/usr/share/aclocal/libtool.m4:6313: -1- AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) +m4trace:/usr/share/aclocal/libtool.m4:6318: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) +m4trace:/usr/share/aclocal/libtool.m4:6324: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_CHECK_TOOL(RC, windres, no) +]) +m4trace:/usr/share/aclocal/libtool.m4:6338: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_MSG_RESULT([$SED]) +]) +m4trace:/usr/share/aclocal-1.10/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.10' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) +m4trace:/usr/share/aclocal-1.10/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.10])dnl +_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) +m4trace:/usr/share/aclocal-1.10/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) +m4trace:/usr/share/aclocal-1.10/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) +m4trace:/usr/share/aclocal-1.10/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) +m4trace:/usr/share/aclocal-1.10/depend.m4:139: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) +m4trace:/usr/share/aclocal-1.10/depend.m4:147: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.10/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +]) +m4trace:/usr/share/aclocal-1.10/depout.m4:64: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) +m4trace:/usr/share/aclocal-1.10/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.60])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +]) +m4trace:/usr/share/aclocal-1.10/init.m4:113: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +m4trace:/usr/share/aclocal-1.10/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) +m4trace:/usr/share/aclocal-1.10/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) +m4trace:/usr/share/aclocal-1.10/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) +m4trace:/usr/share/aclocal-1.10/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) +m4trace:/usr/share/aclocal-1.10/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) +m4trace:/usr/share/aclocal-1.10/mkdirp.m4:11: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) +m4trace:/usr/share/aclocal-1.10/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) +m4trace:/usr/share/aclocal-1.10/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +m4trace:/usr/share/aclocal-1.10/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +m4trace:/usr/share/aclocal-1.10/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +m4trace:/usr/share/aclocal-1.10/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) +m4trace:/usr/share/aclocal-1.10/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) +m4trace:/usr/share/aclocal-1.10/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) +m4trace:/usr/share/aclocal-1.10/substnot.m4:12: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) +m4trace:/usr/share/aclocal-1.10/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.in:6: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.in:6: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.in:6: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.in:6: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.in:9: -1- AM_INIT_AUTOMAKE([ta-lib], [0.4.0]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.in:9: -1- AM_SET_CURRENT_AUTOMAKE_VERSION +m4trace:configure.in:9: -1- AM_AUTOMAKE_VERSION([1.10]) +m4trace:configure.in:9: -1- _AM_AUTOCONF_VERSION([2.61]) +m4trace:configure.in:9: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.in:9: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.in:9: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.in:9: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) +m4trace:configure.in:9: -2- _AM_MANGLE_OPTION([no-define]) +m4trace:configure.in:9: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.in:9: -1- AM_SANITY_CHECK +m4trace:configure.in:9: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +m4trace:configure.in:9: -1- AM_MISSING_HAS_RUN +m4trace:configure.in:9: -1- AM_AUX_DIR_EXPAND +m4trace:configure.in:9: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.in:9: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.in:9: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.in:9: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.in:9: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) +m4trace:configure.in:9: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.in:9: -1- AM_PROG_INSTALL_SH +m4trace:configure.in:9: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.in:9: -1- AM_PROG_INSTALL_STRIP +m4trace:configure.in:9: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.in:9: -1- AM_PROG_MKDIR_P +m4trace:configure.in:9: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.in:9: -1- AM_SET_LEADING_DOT +m4trace:configure.in:9: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.in:9: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +m4trace:configure.in:9: -2- _AM_MANGLE_OPTION([tar-ustar]) +m4trace:configure.in:9: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) +m4trace:configure.in:9: -2- _AM_MANGLE_OPTION([tar-pax]) +m4trace:configure.in:9: -1- _AM_PROG_TAR([v7]) +m4trace:configure.in:9: -1- AM_MISSING_PROG([AMTAR], [tar]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.in:9: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.in:9: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +m4trace:configure.in:9: -2- _AM_MANGLE_OPTION([no-dependencies]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.in:12: -1- _AM_DEPENDENCIES([CC]) +m4trace:configure.in:12: -1- AM_SET_DEPDIR +m4trace:configure.in:12: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.in:12: -1- AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.in:12: -1- AM_MAKE_INCLUDE +m4trace:configure.in:12: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.in:12: -1- AM_DEP_TRACK +m4trace:configure.in:12: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.in:12: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.in:12: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.in:12: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.in:12: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.in:12: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.in:13: -1- AC_PROG_LIBTOOL +m4trace:configure.in:13: -1- _AC_PROG_LIBTOOL +m4trace:configure.in:13: -1- AC_LIBTOOL_SETUP +m4trace:configure.in:13: -1- AC_ENABLE_SHARED +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1364: AC_ARG_ENABLE is expanded from... +/usr/share/aclocal/libtool.m4:1897: AC_ENABLE_SHARED is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_ENABLE_STATIC +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1364: AC_ARG_ENABLE is expanded from... +/usr/share/aclocal/libtool.m4:1936: AC_ENABLE_STATIC is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_ENABLE_FAST_INSTALL +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1364: AC_ARG_ENABLE is expanded from... +/usr/share/aclocal/libtool.m4:1975: AC_ENABLE_FAST_INSTALL is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- m4_pattern_allow([^build$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^host$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.in:13: -1- AC_PROG_LD +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1382: AC_ARG_WITH is expanded from... +/usr/share/aclocal/libtool.m4:2116: AC_PROG_LD is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- LT_AC_PROG_SED +m4trace:configure.in:13: -1- AC_PROG_LD_GNU +m4trace:configure.in:13: -1- AC_PROG_EGREP +m4trace:configure.in:13: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.in:13: -1- AC_PROG_LD_RELOAD_FLAG +m4trace:configure.in:13: -1- AC_PROG_NM +m4trace:configure.in:13: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.in:13: -1- AC_DEPLIBS_CHECK_METHOD +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_MAX_CMD_LEN +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_OBJDIR +m4trace:configure.in:13: -1- _LT_AC_SYS_COMPILER +m4trace:configure.in:13: -1- _LT_AC_PROG_ECHO_BACKSLASH +m4trace:configure.in:13: -1- _LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +]) +m4trace:configure.in:13: -1- m4_pattern_allow([^ECHO$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^AR$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.in:13: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:13: -1- AC_PATH_MAGIC +m4trace:configure.in:13: -1- AC_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.in:13: -1- AC_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1364: AC_ARG_ENABLE is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1382: AC_ARG_WITH is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_LIBTOOL_LANG_C_CONFIG +m4trace:configure.in:13: -1- _LT_AC_LANG_C_CONFIG +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([objext], []) +m4trace:configure.in:13: -1- _LT_AC_SYS_COMPILER +m4trace:configure.in:13: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_COMPILER_NO_RTTI([]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_COMPILER_PIC([]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([lt_prog_compiler_pic_works], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, ) works], [lt_prog_compiler_pic_works], [$_LT_AC_TAGVAR(lt_prog_compiler_pic, )ifelse([],[],[ -DPIC],[ifelse([],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, ) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, )=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, )" ;; + esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, )= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, )=no]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([lt_prog_compiler_static_works], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_AC_TAGVAR(lt_prog_compiler_static, )=]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_CC_C_O([]) +m4trace:configure.in:13: -3- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -3- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_HARD_LINK_LOCKS([]) +m4trace:configure.in:13: -1- _LT_AC_LOCK +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2414: AC_TRY_LINK is expanded from... +../../lib/m4sugar/m4sh.m4:516: AS_IF is expanded from... +../../lib/autoconf/general.m4:1898: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:1911: AC_CACHE_CHECK is expanded from... +/usr/share/aclocal/libtool.m4:469: _LT_AC_LOCK is expanded from... +/usr/share/aclocal/libtool.m4:1073: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from... +/usr/share/aclocal/libtool.m4:2639: _LT_AC_LANG_C_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:2638: AC_LIBTOOL_LANG_C_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_LD_SHLIBS([]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], []) +m4trace:configure.in:13: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_SYS_LIBPATH_AIX +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_SYS_LIBPATH_AIX +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([fix_srcfile_path], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([reload_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_DYNAMIC_LINKER([]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([runpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], []) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_LIB_STRIP +m4trace:configure.in:13: -1- AC_LIBTOOL_DLOPEN_SELF +m4trace:configure.in:13: -1- _LT_AC_CHECK_DLFCN +m4trace:configure.in:13: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.in:13: -1- _LT_AC_TRY_DLOPEN_SELF([lt_cv_dlopen_self=yes], [lt_cv_dlopen_self=yes], [lt_cv_dlopen_self=no], [lt_cv_dlopen_self=cross]) +m4trace:configure.in:13: -1- _LT_AC_TRY_DLOPEN_SELF([lt_cv_dlopen_self_static=yes], [lt_cv_dlopen_self_static=yes], [lt_cv_dlopen_self_static=no], [lt_cv_dlopen_self_static=cross]) +m4trace:configure.in:13: -1- AC_LIBTOOL_CONFIG([]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([CC], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postinstall_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postuninstall_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([GCC], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([fix_srcfile_path], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], []) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], []) +m4trace:configure.in:13: -1- _LT_AC_TAGCONFIG +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1382: AC_ARG_WITH is expanded from... +/usr/share/aclocal/libtool.m4:1775: _LT_AC_TAGCONFIG is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [back quotes and double quotes must not be escaped in: $as_me:$LINENO: error: tag name \"$tagname\" already exists], [/usr/share/aclocal/libtool.m4:1775: _LT_AC_TAGCONFIG is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [back quotes and double quotes must not be escaped in: $as_me: error: tag name \"$tagname\" already exists], [/usr/share/aclocal/libtool.m4:1775: _LT_AC_TAGCONFIG is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_LIBTOOL_LANG_CXX_CONFIG +m4trace:configure.in:13: -1- _LT_AC_LANG_CXX_CONFIG([CXX]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.in:13: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.in:13: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.in:13: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.in:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.in:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.in:13: -1- _LT_AC_PROG_CXXCPP +m4trace:configure.in:13: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([objext], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_SYS_COMPILER +m4trace:configure.in:13: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [CXX]) +m4trace:configure.in:13: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [CXX]) +m4trace:configure.in:13: -1- AC_PROG_LD +m4trace:configure.in:13: -1- AC_PROG_LD_GNU +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_SYS_LIBPATH_AIX +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_SYS_LIBPATH_AIX +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([GCC], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_POSTDEP_PREDEP([CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_COMPILER_PIC([CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([lt_prog_compiler_pic_works], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, CXX) works], [lt_prog_compiler_pic_works_CXX], [$_LT_AC_TAGVAR(lt_prog_compiler_pic, CXX)ifelse([CXX],[],[ -DPIC],[ifelse([CXX],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, CXX) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, CXX)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, CXX)" ;; + esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, CXX)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, CXX)=no]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([lt_prog_compiler_static_works], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_prog_compiler_static_works_CXX], [$lt_tmp_static_flag], [], [_LT_AC_TAGVAR(lt_prog_compiler_static, CXX)=]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_CC_C_O([CXX]) +m4trace:configure.in:13: -3- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -3- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_HARD_LINK_LOCKS([CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_LD_SHLIBS([CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_DYNAMIC_LINKER([CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([runpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_CONFIG([CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([CC], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postinstall_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postuninstall_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([GCC], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([fix_srcfile_path], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [CXX]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_LANG_F77_CONFIG +m4trace:configure.in:13: -1- _LT_AC_LANG_F77_CONFIG([F77]) +m4trace:configure.in:13: -1- m4_pattern_allow([^F77$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^FFLAGS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^F77$]) +m4trace:configure.in:13: -1- m4_pattern_allow([^ac_ct_F77$]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([objext], [F77]) +m4trace:configure.in:13: -1- _LT_AC_SYS_COMPILER +m4trace:configure.in:13: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [F77]) +m4trace:configure.in:13: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([GCC], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_COMPILER_PIC([F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([lt_prog_compiler_pic_works], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, F77) works], [lt_prog_compiler_pic_works_F77], [$_LT_AC_TAGVAR(lt_prog_compiler_pic, F77)ifelse([F77],[],[ -DPIC],[ifelse([F77],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, F77) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, F77)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, F77)" ;; + esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, F77)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, F77)=no]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([lt_prog_compiler_static_works], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_prog_compiler_static_works_F77], [$lt_tmp_static_flag], [], [_LT_AC_TAGVAR(lt_prog_compiler_static, F77)=]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_CC_C_O([F77]) +m4trace:configure.in:13: -3- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -3- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_HARD_LINK_LOCKS([F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_LD_SHLIBS([F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [F77]) +m4trace:configure.in:13: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_SYS_LIBPATH_AIX +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_SYS_LIBPATH_AIX +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([fix_srcfile_path], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([reload_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_DYNAMIC_LINKER([F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([runpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_CONFIG([F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([CC], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postinstall_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postuninstall_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([GCC], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([fix_srcfile_path], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [F77]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [F77]) +m4trace:configure.in:13: -1- AC_LIBTOOL_LANG_GCJ_CONFIG +m4trace:configure.in:13: -1- _LT_AC_LANG_GCJ_CONFIG([GCJ]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:167: AC_LANG_SAVE is expanded from... +/usr/share/aclocal/libtool.m4:3989: _LT_AC_LANG_GCJ_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:3988: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:1775: _LT_AC_TAGCONFIG is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([objext], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_SYS_COMPILER +m4trace:configure.in:13: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [GCJ]) +m4trace:configure.in:13: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_COMPILER_NO_RTTI([GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, GCJ)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, GCJ) -fno-rtti -fno-exceptions"]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_COMPILER_PIC([GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([lt_prog_compiler_pic_works], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, GCJ) works], [lt_prog_compiler_pic_works_GCJ], [$_LT_AC_TAGVAR(lt_prog_compiler_pic, GCJ)ifelse([GCJ],[],[ -DPIC],[ifelse([GCJ],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, GCJ) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, GCJ)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, GCJ)" ;; + esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, GCJ)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, GCJ)=no]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_can_build_shared], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([lt_prog_compiler_static_works], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_prog_compiler_static_works_GCJ], [$lt_tmp_static_flag], [], [_LT_AC_TAGVAR(lt_prog_compiler_static, GCJ)=]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_CC_C_O([GCJ]) +m4trace:configure.in:13: -3- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -3- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_HARD_LINK_LOCKS([GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_LD_SHLIBS([GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [GCJ]) +m4trace:configure.in:13: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_SYS_LIBPATH_AIX +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_SYS_LIBPATH_AIX +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([fix_srcfile_path], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_From_new_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([reload_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([ld_shlibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -2- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_SYS_DYNAMIC_LINKER([GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([runpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [GCJ]) +m4trace:configure.in:13: -1- AC_LIBTOOL_CONFIG([GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([CC], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postinstall_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postuninstall_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([GCC], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([fix_srcfile_path], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [GCJ]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [GCJ]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:176: AC_LANG_RESTORE is expanded from... +/usr/share/aclocal/libtool.m4:3989: _LT_AC_LANG_GCJ_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:3988: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:1775: _LT_AC_TAGCONFIG is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_LIBTOOL_LANG_RC_CONFIG +m4trace:configure.in:13: -1- _LT_AC_LANG_RC_CONFIG([RC]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:167: AC_LANG_SAVE is expanded from... +/usr/share/aclocal/libtool.m4:4049: _LT_AC_LANG_RC_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:4048: AC_LIBTOOL_LANG_RC_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:1775: _LT_AC_TAGCONFIG is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([objext], [RC]) +m4trace:configure.in:13: -1- _LT_AC_SYS_COMPILER +m4trace:configure.in:13: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [RC]) +m4trace:configure.in:13: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [RC]) +m4trace:configure.in:13: -1- AC_LIBTOOL_CONFIG([RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([CC], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postinstall_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postuninstall_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds_need_lc], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([enable_shared_with_static_runtimes], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([GCC], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([LD], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_wl], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_pic], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_cv_prog_compiler_c_o], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_static], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([lt_prog_compiler_no_builtin_flag], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_dynamic_flag_spec], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([whole_archive_flag_spec], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([thread_safe_flag_spec], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_new_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([old_archive_from_expsyms_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([archive_expsym_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([module_expsym_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predep_objects], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdep_objects], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([predeps], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([postdeps], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([compiler_lib_search_path], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([allow_undefined_flag], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([no_undefined_flag], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_action], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_flag_spec_ld], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_libdir_separator], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_direct], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_minus_L], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_shlibpath_var], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([hardcode_automatic], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([link_all_deplibs], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([fix_srcfile_path], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([always_export_symbols], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([export_symbols_cmds], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([exclude_expsyms], [RC]) +m4trace:configure.in:13: -1- _LT_AC_TAGVAR([include_expsyms], [RC]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:176: AC_LANG_RESTORE is expanded from... +/usr/share/aclocal/libtool.m4:4049: _LT_AC_LANG_RC_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:4048: AC_LIBTOOL_LANG_RC_CONFIG is expanded from... +/usr/share/aclocal/libtool.m4:1775: _LT_AC_TAGCONFIG is expanded from... +/usr/share/aclocal/libtool.m4:80: AC_LIBTOOL_SETUP is expanded from... +/usr/share/aclocal/libtool.m4:60: _AC_PROG_LIBTOOL is expanded from... +/usr/share/aclocal/libtool.m4:25: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.in:13: -1- AC_LIBTOOL_CXX +m4trace:configure.in:13: -1- _LT_AC_LANG_CXX +m4trace:configure.in:13: -1- _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +m4trace:configure.in:13: -1- AC_LIBTOOL_F77 +m4trace:configure.in:13: -1- _LT_AC_LANG_F77 +m4trace:configure.in:13: -1- _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +m4trace:configure.in:16: -1- m4_pattern_allow([^HAVE_LIBDL$]) +m4trace:configure.in:17: -1- m4_pattern_allow([^HAVE_LIBPTHREAD$]) +m4trace:configure.in:20: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^const$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^TM_IN_SYS_TIME$]) +m4trace:configure.in:27: -1- m4_pattern_allow([^volatile$]) +m4trace:configure.in:28: -1- m4_pattern_allow([^HAVE_PTRDIFF_T$]) +m4trace:configure.in:31: -1- m4_pattern_allow([^RETSIGTYPE$]) +m4trace:configure.in:32: -1- m4_pattern_allow([^HAVE_STRCOLL$]) +m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_STRFTIME$]) +m4trace:configure.in:34: -1- m4_pattern_allow([^POW_LIB$]) +m4trace:configure.in:34: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:35: -1- m4_pattern_allow([^HAVE_DOPRNT$]) +m4trace:configure.in:44: -1- m4_pattern_allow([^TALIB_LIBRARY_VERSION$]) +m4trace:configure.in:47: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:47: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.in:47: -1- _AC_AM_CONFIG_HEADER_HOOK([$ac_file]) +m4trace:configure.in:47: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS diff --git a/autom4te.cache/traces.1 b/autom4te.cache/traces.1 new file mode 100644 index 000000000..81f5f0f84 --- /dev/null +++ b/autom4te.cache/traces.1 @@ -0,0 +1,698 @@ +m4trace:configure.in:6: -1- AC_INIT([ta-lib], [0.4.0], [http://sourceforge.net/tracker/?group_id=8903&atid=108903]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.in:6: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.in:6: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.in:6: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.in:6: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([SHELL]) +m4trace:configure.in:6: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.in:6: -1- AC_SUBST([PATH_SEPARATOR]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_NAME]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_STRING]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.in:6: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.in:6: -1- AC_SUBST([exec_prefix], [NONE]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([exec_prefix]) +m4trace:configure.in:6: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.in:6: -1- AC_SUBST([prefix], [NONE]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([prefix]) +m4trace:configure.in:6: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.in:6: -1- AC_SUBST([program_transform_name], [s,x,x,]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([program_transform_name]) +m4trace:configure.in:6: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.in:6: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([bindir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.in:6: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([sbindir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.in:6: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([libexecdir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.in:6: -1- AC_SUBST([datarootdir], ['${prefix}/share']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([datarootdir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.in:6: -1- AC_SUBST([datadir], ['${datarootdir}']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([datadir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.in:6: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([sysconfdir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.in:6: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([sharedstatedir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.in:6: -1- AC_SUBST([localstatedir], ['${prefix}/var']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([localstatedir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.in:6: -1- AC_SUBST([includedir], ['${prefix}/include']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([includedir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.in:6: -1- AC_SUBST([oldincludedir], ['/usr/include']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([oldincludedir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.in:6: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], + ['${datarootdir}/doc/${PACKAGE_TARNAME}'], + ['${datarootdir}/doc/${PACKAGE}'])]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([docdir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.in:6: -1- AC_SUBST([infodir], ['${datarootdir}/info']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([infodir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.in:6: -1- AC_SUBST([htmldir], ['${docdir}']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([htmldir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.in:6: -1- AC_SUBST([dvidir], ['${docdir}']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([dvidir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.in:6: -1- AC_SUBST([pdfdir], ['${docdir}']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([pdfdir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.in:6: -1- AC_SUBST([psdir], ['${docdir}']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([psdir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.in:6: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([libdir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.in:6: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([localedir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.in:6: -1- AC_SUBST([mandir], ['${datarootdir}/man']) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([mandir]) +m4trace:configure.in:6: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ +#undef PACKAGE_NAME]) +m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME]) +m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ +#undef PACKAGE_VERSION]) +m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING]) +m4trace:configure.in:6: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) +m4trace:configure.in:6: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.in:6: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT]) +m4trace:configure.in:6: -1- AC_SUBST([DEFS]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([DEFS]) +m4trace:configure.in:6: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.in:6: -1- AC_SUBST([ECHO_C]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([ECHO_C]) +m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.in:6: -1- AC_SUBST([ECHO_N]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([ECHO_N]) +m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.in:6: -1- AC_SUBST([ECHO_T]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([ECHO_T]) +m4trace:configure.in:6: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.in:6: -1- AC_SUBST([LIBS]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.in:6: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:6: -1- AC_SUBST([build_alias]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([build_alias]) +m4trace:configure.in:6: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.in:6: -1- AC_SUBST([host_alias]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([host_alias]) +m4trace:configure.in:6: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.in:6: -1- AC_SUBST([target_alias]) +m4trace:configure.in:6: -1- AC_SUBST_TRACE([target_alias]) +m4trace:configure.in:6: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.in:8: -1- AC_CONFIG_HEADERS([include/ta_config.h]) +m4trace:configure.in:9: -1- AM_INIT_AUTOMAKE([ta-lib], [0.4.0]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.in:9: -1- AM_AUTOMAKE_VERSION([1.10]) +m4trace:configure.in:9: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.in:9: -1- AC_SUBST([INSTALL_PROGRAM]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) +m4trace:configure.in:9: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.in:9: -1- AC_SUBST([INSTALL_SCRIPT]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) +m4trace:configure.in:9: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.in:9: -1- AC_SUBST([INSTALL_DATA]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([INSTALL_DATA]) +m4trace:configure.in:9: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.in:9: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([am__isrc]) +m4trace:configure.in:9: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.in:9: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.in:9: -1- AC_SUBST([CYGPATH_W]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([CYGPATH_W]) +m4trace:configure.in:9: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.in:9: -1- AC_SUBST([PACKAGE], [ta-lib]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([PACKAGE]) +m4trace:configure.in:9: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.in:9: -1- AC_SUBST([VERSION], [0.4.0]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([VERSION]) +m4trace:configure.in:9: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.in:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) +m4trace:configure.in:9: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.in:9: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ +#undef PACKAGE]) +m4trace:configure.in:9: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) +m4trace:configure.in:9: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.in:9: -1- AH_OUTPUT([VERSION], [/* Version number of package */ +#undef VERSION]) +m4trace:configure.in:9: -1- AC_REQUIRE_AUX_FILE([missing]) +m4trace:configure.in:9: -1- AC_SUBST([ACLOCAL]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([ACLOCAL]) +m4trace:configure.in:9: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.in:9: -1- AC_SUBST([AUTOCONF]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([AUTOCONF]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.in:9: -1- AC_SUBST([AUTOMAKE]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([AUTOMAKE]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.in:9: -1- AC_SUBST([AUTOHEADER]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([AUTOHEADER]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.in:9: -1- AC_SUBST([MAKEINFO]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([MAKEINFO]) +m4trace:configure.in:9: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.in:9: -1- AC_SUBST([install_sh]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([install_sh]) +m4trace:configure.in:9: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.in:9: -1- AC_SUBST([STRIP]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.in:9: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.in:9: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) +m4trace:configure.in:9: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.in:9: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.in:9: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([mkdir_p]) +m4trace:configure.in:9: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.in:9: -1- AC_SUBST([AWK]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([AWK]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.in:9: -1- AC_SUBST([SET_MAKE]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([SET_MAKE]) +m4trace:configure.in:9: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.in:9: -1- AC_SUBST([am__leading_dot]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([am__leading_dot]) +m4trace:configure.in:9: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.in:9: -1- AC_SUBST([AMTAR]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([AMTAR]) +m4trace:configure.in:9: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.in:9: -1- AC_SUBST([am__tar]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([am__tar]) +m4trace:configure.in:9: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.in:9: -1- AC_SUBST([am__untar]) +m4trace:configure.in:9: -1- AC_SUBST_TRACE([am__untar]) +m4trace:configure.in:9: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.in:12: -1- AC_SUBST([CC]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- AC_SUBST([CFLAGS]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([CFLAGS]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.in:12: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.in:12: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:12: -1- AC_SUBST([LIBS]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.in:12: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:12: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:12: -1- AC_SUBST([CC]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- AC_SUBST([CC]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- AC_SUBST([CC]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- AC_SUBST([CC]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:12: -1- AC_SUBST([ac_ct_CC]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([ac_ct_CC]) +m4trace:configure.in:12: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.in:12: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([EXEEXT]) +m4trace:configure.in:12: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.in:12: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([OBJEXT]) +m4trace:configure.in:12: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.in:12: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([DEPDIR]) +m4trace:configure.in:12: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.in:12: -1- AC_SUBST([am__include]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([am__include]) +m4trace:configure.in:12: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.in:12: -1- AC_SUBST([am__quote]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([am__quote]) +m4trace:configure.in:12: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.in:12: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.in:12: -1- AC_SUBST([AMDEP_TRUE]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([AMDEP_TRUE]) +m4trace:configure.in:12: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.in:12: -1- AC_SUBST([AMDEP_FALSE]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([AMDEP_FALSE]) +m4trace:configure.in:12: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.in:12: -1- AC_SUBST([AMDEPBACKSLASH]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) +m4trace:configure.in:12: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.in:12: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([CCDEPMODE]) +m4trace:configure.in:12: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.in:12: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.in:12: -1- AC_SUBST([am__fastdepCC_TRUE]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) +m4trace:configure.in:12: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.in:12: -1- AC_SUBST([am__fastdepCC_FALSE]) +m4trace:configure.in:12: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) +m4trace:configure.in:12: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.in:13: -1- AC_PROG_LIBTOOL +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1364: AC_ARG_ENABLE is expanded from... +aclocal.m4:1908: AC_ENABLE_SHARED is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1364: AC_ARG_ENABLE is expanded from... +aclocal.m4:1947: AC_ENABLE_STATIC is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1364: AC_ARG_ENABLE is expanded from... +aclocal.m4:1986: AC_ENABLE_FAST_INSTALL is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_CANONICAL_HOST +m4trace:configure.in:13: -1- AC_CANONICAL_BUILD +m4trace:configure.in:13: -1- AC_REQUIRE_AUX_FILE([config.sub]) +m4trace:configure.in:13: -1- AC_REQUIRE_AUX_FILE([config.guess]) +m4trace:configure.in:13: -1- AC_SUBST([build], [$ac_cv_build]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([build]) +m4trace:configure.in:13: -1- m4_pattern_allow([^build$]) +m4trace:configure.in:13: -1- AC_SUBST([build_cpu], [$[1]]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([build_cpu]) +m4trace:configure.in:13: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.in:13: -1- AC_SUBST([build_vendor], [$[2]]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([build_vendor]) +m4trace:configure.in:13: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.in:13: -1- AC_SUBST([build_os]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([build_os]) +m4trace:configure.in:13: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.in:13: -1- AC_SUBST([host], [$ac_cv_host]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([host]) +m4trace:configure.in:13: -1- m4_pattern_allow([^host$]) +m4trace:configure.in:13: -1- AC_SUBST([host_cpu], [$[1]]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([host_cpu]) +m4trace:configure.in:13: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.in:13: -1- AC_SUBST([host_vendor], [$[2]]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([host_vendor]) +m4trace:configure.in:13: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.in:13: -1- AC_SUBST([host_os]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([host_os]) +m4trace:configure.in:13: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1382: AC_ARG_WITH is expanded from... +aclocal.m4:2127: AC_PROG_LD is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_SUBST([GREP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.in:13: -1- AC_SUBST([GREP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.in:13: -1- AC_SUBST([EGREP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([EGREP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.in:13: -1- AC_SUBST([EGREP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([EGREP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.in:13: -1- AC_SUBST([LN_S], [$as_ln_s]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([LN_S]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.in:13: -1- AC_SUBST([ECHO]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([ECHO]) +m4trace:configure.in:13: -1- m4_pattern_allow([^ECHO$]) +m4trace:configure.in:13: -1- AC_SUBST([AR]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([AR]) +m4trace:configure.in:13: -1- m4_pattern_allow([^AR$]) +m4trace:configure.in:13: -1- AC_SUBST([RANLIB]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([RANLIB]) +m4trace:configure.in:13: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.in:13: -1- AC_SUBST([STRIP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1364: AC_ARG_ENABLE is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1382: AC_ARG_WITH is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2414: AC_TRY_LINK is expanded from... +../../lib/m4sugar/m4sh.m4:516: AS_IF is expanded from... +../../lib/autoconf/general.m4:1898: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:1911: AC_CACHE_CHECK is expanded from... +aclocal.m4:480: _LT_AC_LOCK is expanded from... +aclocal.m4:1084: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from... +aclocal.m4:2650: _LT_AC_LANG_C_CONFIG is expanded from... +aclocal.m4:2649: AC_LIBTOOL_LANG_C_CONFIG is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H]) +m4trace:configure.in:13: -1- AC_SUBST([CPP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.in:13: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:13: -1- AC_SUBST([CPP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.in:13: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.in:13: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H]) +m4trace:configure.in:13: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H]) +m4trace:configure.in:13: -1- _LT_AC_TAGCONFIG +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1382: AC_ARG_WITH is expanded from... +aclocal.m4:1786: _LT_AC_TAGCONFIG is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [back quotes and double quotes must not be escaped in: $as_me:$LINENO: error: tag name \"$tagname\" already exists], [aclocal.m4:1786: _LT_AC_TAGCONFIG is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [back quotes and double quotes must not be escaped in: $as_me: error: tag name \"$tagname\" already exists], [aclocal.m4:1786: _LT_AC_TAGCONFIG is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_SUBST([CXX]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.in:13: -1- AC_SUBST([CXXFLAGS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CXXFLAGS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.in:13: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:13: -1- AC_SUBST([LIBS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:13: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:13: -1- AC_SUBST([CXX]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.in:13: -1- AC_SUBST([ac_ct_CXX]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([ac_ct_CXX]) +m4trace:configure.in:13: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.in:13: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CXXDEPMODE]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.in:13: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.in:13: -1- AC_SUBST([am__fastdepCXX_TRUE]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE]) +m4trace:configure.in:13: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.in:13: -1- AC_SUBST([am__fastdepCXX_FALSE]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE]) +m4trace:configure.in:13: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.in:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.in:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.in:13: -1- AC_SUBST([CXXCPP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CXXCPP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.in:13: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:13: -1- AC_SUBST([CXXCPP]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([CXXCPP]) +m4trace:configure.in:13: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.in:13: -1- AC_SUBST([F77]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([F77]) +m4trace:configure.in:13: -1- m4_pattern_allow([^F77$]) +m4trace:configure.in:13: -1- AC_SUBST([FFLAGS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([FFLAGS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^FFLAGS$]) +m4trace:configure.in:13: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:13: -1- AC_SUBST([LIBS]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:13: -1- AC_SUBST([F77]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([F77]) +m4trace:configure.in:13: -1- m4_pattern_allow([^F77$]) +m4trace:configure.in:13: -1- AC_SUBST([ac_ct_F77]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([ac_ct_F77]) +m4trace:configure.in:13: -1- m4_pattern_allow([^ac_ct_F77$]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:167: AC_LANG_SAVE is expanded from... +aclocal.m4:3992: _LT_AC_LANG_GCJ_CONFIG is expanded from... +aclocal.m4:3991: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from... +aclocal.m4:1786: _LT_AC_TAGCONFIG is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:176: AC_LANG_RESTORE is expanded from... +aclocal.m4:3992: _LT_AC_LANG_GCJ_CONFIG is expanded from... +aclocal.m4:3991: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from... +aclocal.m4:1786: _LT_AC_TAGCONFIG is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:167: AC_LANG_SAVE is expanded from... +aclocal.m4:4048: _LT_AC_LANG_RC_CONFIG is expanded from... +aclocal.m4:4047: AC_LIBTOOL_LANG_RC_CONFIG is expanded from... +aclocal.m4:1786: _LT_AC_TAGCONFIG is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:176: AC_LANG_RESTORE is expanded from... +aclocal.m4:4048: _LT_AC_LANG_RC_CONFIG is expanded from... +aclocal.m4:4047: AC_LIBTOOL_LANG_RC_CONFIG is expanded from... +aclocal.m4:1786: _LT_AC_TAGCONFIG is expanded from... +aclocal.m4:91: AC_LIBTOOL_SETUP is expanded from... +aclocal.m4:71: _AC_PROG_LIBTOOL is expanded from... +aclocal.m4:36: AC_PROG_LIBTOOL is expanded from... +configure.in:13: the top level]) +m4trace:configure.in:13: -1- AC_SUBST([LIBTOOL]) +m4trace:configure.in:13: -1- AC_SUBST_TRACE([LIBTOOL]) +m4trace:configure.in:13: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.in:16: -1- AH_OUTPUT([HAVE_LIBDL], [/* Define to 1 if you have the `dl\' library (-ldl). */ +#undef HAVE_LIBDL]) +m4trace:configure.in:16: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL]) +m4trace:configure.in:16: -1- m4_pattern_allow([^HAVE_LIBDL$]) +m4trace:configure.in:17: -1- AH_OUTPUT([HAVE_LIBPTHREAD], [/* Define to 1 if you have the `pthread\' library (-lpthread). */ +#undef HAVE_LIBPTHREAD]) +m4trace:configure.in:17: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBPTHREAD]) +m4trace:configure.in:17: -1- m4_pattern_allow([^HAVE_LIBPTHREAD$]) +m4trace:configure.in:20: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.in:20: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.in:20: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_FLOAT_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_FLOAT_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_STDDEF_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_STDDEF_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_WCHAR_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H]) +m4trace:configure.in:21: -1- AH_OUTPUT([HAVE_WCTYPE_H], [/* Define to 1 if you have the header file. */ +#undef HAVE_WCTYPE_H]) +m4trace:configure.in:24: -1- AC_DEFINE_TRACE_LITERAL([const]) +m4trace:configure.in:24: -1- m4_pattern_allow([^const$]) +m4trace:configure.in:24: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */ +#undef const]) +m4trace:configure.in:25: -1- AC_DEFINE_TRACE_LITERAL([size_t]) +m4trace:configure.in:25: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.in:25: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if does not define. */ +#undef size_t]) +m4trace:configure.in:26: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME]) +m4trace:configure.in:26: -1- m4_pattern_allow([^TM_IN_SYS_TIME$]) +m4trace:configure.in:26: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your declares `struct tm\'. */ +#undef TM_IN_SYS_TIME]) +m4trace:configure.in:27: -1- AC_DEFINE_TRACE_LITERAL([volatile]) +m4trace:configure.in:27: -1- m4_pattern_allow([^volatile$]) +m4trace:configure.in:27: -1- AH_OUTPUT([volatile], [/* Define to empty if the keyword `volatile\' does not work. Warning: valid + code using `volatile\' can become incorrect without. Disable with care. */ +#undef volatile]) +m4trace:configure.in:28: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PTRDIFF_T]) +m4trace:configure.in:28: -1- m4_pattern_allow([^HAVE_PTRDIFF_T$]) +m4trace:configure.in:28: -1- AH_OUTPUT([HAVE_PTRDIFF_T], [/* Define to 1 if the system has the type `ptrdiff_t\'. */ +#undef HAVE_PTRDIFF_T]) +m4trace:configure.in:31: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE]) +m4trace:configure.in:31: -1- m4_pattern_allow([^RETSIGTYPE$]) +m4trace:configure.in:31: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */ +#undef RETSIGTYPE]) +m4trace:configure.in:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCOLL]) +m4trace:configure.in:32: -1- m4_pattern_allow([^HAVE_STRCOLL$]) +m4trace:configure.in:32: -1- AH_OUTPUT([HAVE_STRCOLL], [/* Define to 1 if you have the `strcoll\' function and it is properly defined. + */ +#undef HAVE_STRCOLL]) +m4trace:configure.in:33: -1- AH_OUTPUT([HAVE_STRFTIME], [/* Define to 1 if you have the `strftime\' function. */ +#undef HAVE_STRFTIME]) +m4trace:configure.in:33: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRFTIME]) +m4trace:configure.in:33: -1- m4_pattern_allow([^HAVE_STRFTIME$]) +m4trace:configure.in:34: -1- AC_SUBST([POW_LIB]) +m4trace:configure.in:34: -1- AC_SUBST_TRACE([POW_LIB]) +m4trace:configure.in:34: -1- m4_pattern_allow([^POW_LIB$]) +m4trace:configure.in:34: -1- AC_LIBSOURCE([strtod.c]) +m4trace:configure.in:34: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtod.$ac_objext"]) +m4trace:configure.in:34: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:34: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:35: -1- AH_OUTPUT([HAVE_VPRINTF], [/* Define to 1 if you have the `vprintf\' function. */ +#undef HAVE_VPRINTF]) +m4trace:configure.in:35: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOPRNT]) +m4trace:configure.in:35: -1- m4_pattern_allow([^HAVE_DOPRNT$]) +m4trace:configure.in:35: -1- AH_OUTPUT([HAVE_DOPRNT], [/* Define to 1 if you don\'t have `vprintf\' but do have `_doprnt.\' */ +#undef HAVE_DOPRNT]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_FLOOR], [/* Define to 1 if you have the `floor\' function. */ +#undef HAVE_FLOOR]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_ISASCII], [/* Define to 1 if you have the `isascii\' function. */ +#undef HAVE_ISASCII]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_LOCALECONV], [/* Define to 1 if you have the `localeconv\' function. */ +#undef HAVE_LOCALECONV]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_MBLEN], [/* Define to 1 if you have the `mblen\' function. */ +#undef HAVE_MBLEN]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_MEMMOVE], [/* Define to 1 if you have the `memmove\' function. */ +#undef HAVE_MEMMOVE]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */ +#undef HAVE_MEMSET]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_MODF], [/* Define to 1 if you have the `modf\' function. */ +#undef HAVE_MODF]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_POW], [/* Define to 1 if you have the `pow\' function. */ +#undef HAVE_POW]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_SQRT], [/* Define to 1 if you have the `sqrt\' function. */ +#undef HAVE_SQRT]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\' function. */ +#undef HAVE_STRCASECMP]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_STRCHR], [/* Define to 1 if you have the `strchr\' function. */ +#undef HAVE_STRCHR]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */ +#undef HAVE_STRERROR]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_STRNCASECMP], [/* Define to 1 if you have the `strncasecmp\' function. */ +#undef HAVE_STRNCASECMP]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_STRRCHR], [/* Define to 1 if you have the `strrchr\' function. */ +#undef HAVE_STRRCHR]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_STRSTR], [/* Define to 1 if you have the `strstr\' function. */ +#undef HAVE_STRSTR]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_STRTOL], [/* Define to 1 if you have the `strtol\' function. */ +#undef HAVE_STRTOL]) +m4trace:configure.in:36: -1- AH_OUTPUT([HAVE_STRTOUL], [/* Define to 1 if you have the `strtoul\' function. */ +#undef HAVE_STRTOUL]) +m4trace:configure.in:44: -1- AC_SUBST([TALIB_LIBRARY_VERSION]) +m4trace:configure.in:44: -1- AC_SUBST_TRACE([TALIB_LIBRARY_VERSION]) +m4trace:configure.in:44: -1- m4_pattern_allow([^TALIB_LIBRARY_VERSION$]) +m4trace:configure.in:46: -1- AC_CONFIG_FILES([Makefile src/Makefile src/ta_abstract/Makefile src/ta_common/Makefile src/ta_func/Makefile src/tools/Makefile src/tools/gen_code/Makefile src/tools/ta_regtest/Makefile ta-lib-config ta-lib.spec ta-lib.dpkg]) +m4trace:configure.in:47: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:47: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:47: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([LTLIBOBJS]) +m4trace:configure.in:47: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([top_builddir]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([srcdir]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([abs_srcdir]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([top_srcdir]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([abs_top_srcdir]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([builddir]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([abs_builddir]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([abs_top_builddir]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([INSTALL]) +m4trace:configure.in:47: -1- AC_SUBST_TRACE([MKDIR_P]) diff --git a/config.guess b/config.guess new file mode 100755 index 000000000..f7727026b --- /dev/null +++ b/config.guess @@ -0,0 +1,1701 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2021 Free Software Foundation, Inc. + +timestamp='2021-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess +# +# Please send patches to . + + +me=$(echo "$0" | sed -e 's,.*/,,') + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2021 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if test -f /.attbin/uname ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown +UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown +UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown +UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown + +case "$UNAME_SYSTEM" in +Linux|GNU|GNU/*) + LIBC=unknown + + set_cc_for_build + cat <<-EOF > "$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #elif defined(__GLIBC__) + LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif + #endif + EOF + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" + + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ + echo unknown)) + case "$UNAME_MACHINE_ARCH" in + aarch64eb) machine=aarch64_be-unknown ;; + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') + endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "$UNAME_VERSION" in + Debian*) + release='-gnu' + ;; + *) + release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "$machine-${os}${release}${abi-}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit ;; + *:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit ;; + *:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') + ;; + *5.*) + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)" + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix"$UNAME_RELEASE" + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "$( (/bin/universe) 2>/dev/null)" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case $(/usr/bin/uname -p) in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux"$UNAME_RELEASE" + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:*:*) + case "$(/usr/bin/arch -k)" in + Series*|S4*) + UNAME_RELEASE=$(uname -v) + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')" + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos"$UNAME_RELEASE" + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null) + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case "$(/bin/arch)" in + sun3) + echo m68k-sun-sunos"$UNAME_RELEASE" + ;; + sun4) + echo sparc-sun-sunos"$UNAME_RELEASE" + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos"$UNAME_RELEASE" + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint"$UNAME_RELEASE" + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint"$UNAME_RELEASE" + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint"$UNAME_RELEASE" + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten"$UNAME_RELEASE" + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten"$UNAME_RELEASE" + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix"$UNAME_RELEASE" + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix"$UNAME_RELEASE" + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix"$UNAME_RELEASE" + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') && + SYSTEM_NAME=$("$dummy" "$dummyarg") && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos"$UNAME_RELEASE" + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=$(/usr/bin/uname -p) + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 + then + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x + then + echo m88k-dg-dgux"$UNAME_RELEASE" + else + echo m88k-dg-dguxbcs"$UNAME_RELEASE" + fi + else + echo i586-dg-dgux"$UNAME_RELEASE" + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')" + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if test -x /usr/bin/oslevel ; then + IBM_REV=$(/usr/bin/oslevel) + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }') + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if test -x /usr/bin/lslpp ; then + IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if test -x /usr/bin/getconf; then + sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null) + sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null) + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if test "$HP_ARCH" = hppa2.0w + then + set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') + echo ia64-hp-hpux"$HPUX_REV" + exit ;; + 3050*:HI-UX:*:*) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if test -x /usr/sbin/sysversion ; then + echo "$UNAME_MACHINE"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/') + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/') + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=$(uname -p) + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf + fi + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=$(/usr/bin/uname -p) + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" + exit ;; + i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit ;; + *:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit ;; + *:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit ;; + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + exit ;; + i*:PW*:*) + echo "$UNAME_MACHINE"-pc-pw32 + exit ;; + *:Interix*:*) + case "$UNAME_MACHINE" in + x86) + echo i586-pc-interix"$UNAME_RELEASE" + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix"$UNAME_RELEASE" + exit ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit ;; + esac ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-pc-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + *:GNU:*:*) + # the GNU system + echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" + exit ;; + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix + exit ;; + aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + alpha:Linux:*:*) + case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arm*:Linux:*:*) + set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" + #undef CPU + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + MIPS_ENDIAN=el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + MIPS_ENDIAN= + #else + MIPS_ENDIAN= + #endif + #endif +EOF + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit ;; + sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit ;; + x86_64:Linux:*:*) + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" + exit ;; + xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo "$UNAME_MACHINE"-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo "$UNAME_MACHINE"-unknown-stop + exit ;; + i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo "$UNAME_MACHINE"-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos"$UNAME_RELEASE" + exit ;; + i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//') + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case $(/bin/uname -X | grep "^Machine") in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=$(sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //')) + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos"$UNAME_RELEASE" + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv"$UNAME_RELEASE" + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + echo "$UNAME_MACHINE"-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux"$UNAME_RELEASE" + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if test -d /usr/nec; then + echo mips-nec-sysv"$UNAME_RELEASE" + else + echo mips-unknown-sysv"$UNAME_RELEASE" + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux"$UNAME_RELEASE" + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux"$UNAME_RELEASE" + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux"$UNAME_RELEASE" + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Rhapsody:*:*) + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=$(uname -p) + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build + fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE + fi + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=$(uname -p) + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + # shellcheck disable=SC2154 + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit ;; + *:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + case "$UNAME_MACHINE" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" + exit ;; + i*86:rdos:*:*) + echo "$UNAME_MACHINE"-pc-rdos + exit ;; + i*86:AROS:*:*) + echo "$UNAME_MACHINE"-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; +esac + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 <&2 </dev/null || echo unknown) +uname -r = $( (uname -r) 2>/dev/null || echo unknown) +uname -s = $( (uname -s) 2>/dev/null || echo unknown) +uname -v = $( (uname -v) 2>/dev/null || echo unknown) + +/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) +/bin/uname -X = $( (/bin/uname -X) 2>/dev/null) + +hostinfo = $( (hostinfo) 2>/dev/null) +/bin/universe = $( (/bin/universe) 2>/dev/null) +/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) +/bin/arch = $( (/bin/arch) 2>/dev/null) +/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) +/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) + +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" +EOF +fi + +exit 1 + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.sub b/config.sub new file mode 100755 index 000000000..0cbdae682 --- /dev/null +++ b/config.sub @@ -0,0 +1,1855 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2021 Free Software Foundation, Inc. + +timestamp='2021-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=$(echo "$0" | sed -e 's,.*/,,') + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2021 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo "$1" + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Split fields of configuration type +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 + ;; + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 + ;; + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac + ;; + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac + ;; + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac + ;; +esac + +# Decode 1-component or ad-hoc basic machines +case $basic_machine in + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond + ;; + op50n) + cpu=hppa1.1 + vendor=oki + ;; + op60c) + cpu=hppa1.1 + vendor=oki + ;; + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + basic_os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + basic_os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + basic_os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + basic_os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv32 + ;; + i*86v4*) + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv4 + ;; + i*86v) + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv + ;; + i*86sol2) + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $basic_os in + irix*) + ;; + *) + basic_os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + basic_os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) + ;; + ns2*) + basic_os=nextstep2 + ;; + *) + basic_os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + basic_os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf + ;; + none) + cpu=none + vendor=none + ;; + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine + ;; + leon-*|leon[3-9]-*) + cpu=sparc + vendor=$(echo "$basic_machine" | sed 's/-.*//') + ;; + + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&2 + exit 1 + ;; + esac + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $vendor in + digital*) + vendor=dec + ;; + commodore*) + vendor=cbm + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if test x$basic_os != x +then + +# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|') + ;; + os2-emx) + kernel=os2 + os=$(echo $basic_os | sed -e 's|os2-emx|emx|') + ;; + nto-qnx*) + kernel=nto + os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|') + ;; + *-*) + # shellcheck disable=SC2162 + IFS="-" read kernel os <&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) + vendor=acorn + ;; + *-sunos*) + vendor=sun + ;; + *-cnk* | *-aix*) + vendor=ibm + ;; + *-beos*) + vendor=be + ;; + *-hpux*) + vendor=hp + ;; + *-mpeix*) + vendor=hp + ;; + *-hiux*) + vendor=hitachi + ;; + *-unos*) + vendor=crds + ;; + *-dgux*) + vendor=dg + ;; + *-luna*) + vendor=omron + ;; + *-genix*) + vendor=ns + ;; + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) + vendor=ibm + ;; + s390-* | s390x-*) + vendor=ibm + ;; + *-ptx*) + vendor=sequent + ;; + *-tpf*) + vendor=ibm + ;; + *-vxsim* | *-vxworks* | *-windiss*) + vendor=wrs + ;; + *-aux*) + vendor=apple + ;; + *-hms*) + vendor=hitachi + ;; + *-mpw* | *-macos*) + vendor=apple + ;; + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) + vendor=atari + ;; + *-vos*) + vendor=stratus + ;; + esac + ;; +esac + +echo "$cpu-$vendor-${kernel:+$kernel-}$os" +exit + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 000000000..44fa23965 --- /dev/null +++ b/configure @@ -0,0 +1,22200 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.61 for ta-lib 0.4.0. +# +# Report bugs to . +# +# (c) TicTacTec 2005, 2006 +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME='ta-lib' +PACKAGE_TARNAME='ta-lib' +PACKAGE_VERSION='0.4.0' +PACKAGE_STRING='ta-lib 0.4.0' +PACKAGE_BUGREPORT='http://sourceforge.net/tracker/?group_id=8903&atid=108903' + +ac_unique_file="src/ta_func/ta_AD.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +am__isrc +CYGPATH_W +PACKAGE +VERSION +ACLOCAL +AUTOCONF +AUTOMAKE +AUTOHEADER +MAKEINFO +install_sh +STRIP +INSTALL_STRIP_PROGRAM +mkdir_p +AWK +SET_MAKE +am__leading_dot +AMTAR +am__tar +am__untar +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +DEPDIR +am__include +am__quote +AMDEP_TRUE +AMDEP_FALSE +AMDEPBACKSLASH +CCDEPMODE +am__fastdepCC_TRUE +am__fastdepCC_FALSE +build +build_cpu +build_vendor +build_os +host +host_cpu +host_vendor +host_os +GREP +EGREP +LN_S +ECHO +AR +RANLIB +CPP +CXX +CXXFLAGS +ac_ct_CXX +CXXDEPMODE +am__fastdepCXX_TRUE +am__fastdepCXX_FALSE +CXXCPP +F77 +FFLAGS +ac_ct_F77 +LIBTOOL +POW_LIB +LIBOBJS +TALIB_LIBRARY_VERSION +LTLIBOBJS' +ac_subst_files='' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CXX +CXXFLAGS +CCC +CXXCPP +F77 +FFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute directory names. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$0" || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures ta-lib 0.4.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/ta-lib] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of ta-lib 0.4.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-tags[=TAGS] include additional configurations [automatic] + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +ta-lib configure 0.4.0 +generated by GNU Autoconf 2.61 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. + +(c) TicTacTec 2005, 2006 +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by ta-lib $as_me 0.4.0, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + set x "$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + set x "$prefix/share/config.site" "$prefix/etc/config.site" +else + set x "$ac_default_prefix/share/config.site" \ + "$ac_default_prefix/etc/config.site" +fi +shift +for ac_site_file +do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_headers="$ac_config_headers include/ta_config.h" + +am__api_version='1.10' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done +IFS=$as_save_IFS + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm -f conftest.sed + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +echo "${ECHO_T}$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } +set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + SET_MAKE= +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=ta-lib + VERSION=0.4.0 + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +# +# List of possible output files, starting from the most likely. +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) +# only as a last resort. b.out is created by i960 compilers. +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' +# +# The IRIX 6 linker writes into existing files which may not be +# executable, retaining their permissions. Remove them first so a +# subsequent execution test works. +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6; } +if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6; } + +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +{ echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + +# Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6; } +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6; } +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done + +fi + +SED=$lt_cv_path_SED +{ echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6; } + +{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Extract the first word of "grep ggrep" to use in msg output +if test -z "$GREP"; then +set dummy grep ggrep; ac_prog_name=$2 +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_GREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + # Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +GREP="$ac_cv_path_GREP" +if test -z "$GREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_GREP=$GREP +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +echo "${ECHO_T}$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + # Extract the first word of "egrep" to use in msg output +if test -z "$EGREP"; then +set dummy egrep; ac_prog_name=$2 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_EGREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + # Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +EGREP="$ac_cv_path_EGREP" +if test -z "$EGREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_EGREP=$EGREP +fi + + + fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + +{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi +{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6; } +NM="$lt_cv_path_NM" + +{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6; } +fi + +{ echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump'. + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix3*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 4311 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_cc_needs_belf=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) LD="${LD-ld} -64" ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + + +esac + +need_locks="$enable_libtool_lock" + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------------------ ## +## Report this to http://sourceforge.net/tracker/?group_id=8903&atid=108903 ## +## ------------------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CXXFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 +echo "${ECHO_T}$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +fi + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { echo "$as_me:$LINENO: result: $F77" >&5 +echo "${ECHO_T}$F77" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_F77="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +echo "${ECHO_T}$ac_ct_F77" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_f77_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_f77_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_f77_g=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +G77=`test $ac_compiler_gnu = yes && echo yes` +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } +else + { echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6; } +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux* | k*bsd*-gnu) + if test "$host_cpu" = ia64; then + symcode='[ABCDGIRSTW]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6; } +else + { echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6; } +fi + +{ echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=no +enable_win32_dll=no + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7042: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7046: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic='-qnocommon' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7310: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7314: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } + +if test x"$lt_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works=yes + fi + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7414: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:7418: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix3*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs=no + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var" || \ + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6; } + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + ;; + *) + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + { echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# Report which library types will actually be built +{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +{ echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +{ echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6; } + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +# Check whether --with-tags was given. +if test "${with_tags+set}" = set; then + withval=$with_tags; tagnames="$withval" +fi + + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + fi + fi + if test -z "$LTCFLAGS"; then + eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + $as_unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + $as_unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +compiler_CXX=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_CXX=yes + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_CXX=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + interix3*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc*) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC*) + # Portland Group C++ compiler + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + openbsd*) + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ + $rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + # So that behaviour is only enabled if SCOABSPATH is set to a + # non-empty value in the environment. Most likely only useful for + # creating official distributions of packages. + # This is a hack until libtool officially supports absolute path + # names for shared libraries. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; +esac +{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$rm -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix3*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +solaris*) + case $cc_basename in + CC*) + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + postdeps_CXX='-lCstd -lCrun' + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_CXX='-qnocommon' + lt_prog_compiler_wl_CXX='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc* | ecpc*) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC*) + # Portland Group C++ compiler. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12147: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:12151: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_CXX=yes + fi + else + lt_prog_compiler_static_works_CXX=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12251: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:12255: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var_CXX" || \ + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_CXX +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_CXX" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +{ echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +{ echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6; } + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_F77='-qnocommon' + lt_prog_compiler_wl_F77='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-fpic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_F77='-Qoption ld ';; + *) + lt_prog_compiler_wl_F77='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_can_build_shared_F77=no + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13812: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:13816: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_F77=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_F77=yes + fi + else + lt_prog_compiler_static_works_F77=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; } + +if test x"$lt_prog_compiler_static_works_F77" = xyes; then + : +else + lt_prog_compiler_static_F77= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13916: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:13920: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_F77=no + fi + ;; + + interix3*) + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs_F77=no + else + ld_shlibs_F77=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_F77=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = no; then + runpath_var= + hardcode_libdir_flag_spec_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77='$convenience' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_F77='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_F77=no + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='' + link_all_deplibs_F77=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_F77=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + *) + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag_F77='${wl}-z,text' + archive_cmds_need_lc_F77=no + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_F77='${wl}-z,text' + allow_undefined_flag_F77='${wl}-z,nodefs' + archive_cmds_need_lc_F77=no + hardcode_shlibpath_var_F77=no + hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6; } +test "$ld_shlibs_F77" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + pic_flag=$lt_prog_compiler_pic_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var_F77" || \ + test "X$hardcode_automatic_F77" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6; } + +if test "$hardcode_action_F77" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_F77 +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_F77 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + +old_archive_cmds_GCJ=$old_archive_cmds + + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:16103: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:16107: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_GCJ='-qnocommon' + lt_prog_compiler_wl_GCJ='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-fpic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_GCJ='-Qoption ld ';; + *) + lt_prog_compiler_wl_GCJ='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_can_build_shared_GCJ=no + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:16371: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:16375: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works_GCJ=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works_GCJ=yes + fi + else + lt_prog_compiler_static_works_GCJ=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; } + +if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then + : +else + lt_prog_compiler_static_GCJ= +fi + + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:16475: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:16479: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_GCJ=yes + fi + fi + chmod u+w . 2>&5 + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_GCJ= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_GCJ=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + interix3*) + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + link_all_deplibs_GCJ=no + else + ld_shlibs_GCJ=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_GCJ=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = no; then + runpath_var= + hardcode_libdir_flag_spec_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_GCJ=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_GCJ=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ='$convenience' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec_GCJ=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_GCJ=' ' + allow_undefined_flag_GCJ=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_GCJ=no + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='' + link_all_deplibs_GCJ=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_GCJ=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + *) + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs_GCJ=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z,text' + archive_cmds_need_lc_GCJ=no + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_GCJ='${wl}-z,text' + allow_undefined_flag_GCJ='${wl}-z,nodefs' + archive_cmds_need_lc_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } +test "$ld_shlibs_GCJ" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + pic_flag=$lt_prog_compiler_pic_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var_GCJ" || \ + test "X$hardcode_automatic_GCJ" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6; } + +if test "$hardcode_action_GCJ" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_GCJ + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_GCJ +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_GCJ +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_GCJ + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_GCJ + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_GCJ + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_RC +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_RC + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + + +# Checks for libraries. + +{ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + + +{ echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 +echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; } +if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_pthread_pthread_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_pthread_pthread_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5 +echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6; } +if test $ac_cv_lib_pthread_pthread_create = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +fi + + +# Checks for header files. +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + + + + + + + + + + + + +for ac_header in float.h inttypes.h limits.h locale.h stddef.h stdint.h stdlib.h string.h unistd.h wchar.h wctype.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------------------ ## +## Report this to http://sourceforge.net/tracker/?group_id=8903&atid=108903 ## +## ------------------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +# Checks for typedefs, structures, and compiler characteristics. +{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_const=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef size_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_size_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6; } +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 +echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; } +if test "${ac_cv_struct_tm+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +struct tm tm; + int *p = &tm.tm_sec; + return !p; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_struct_tm=time.h +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_struct_tm=sys/time.h +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 +echo "${ECHO_T}$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then + +cat >>confdefs.h <<\_ACEOF +#define TM_IN_SYS_TIME 1 +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for working volatile" >&5 +echo $ECHO_N "checking for working volatile... $ECHO_C" >&6; } +if test "${ac_cv_c_volatile+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + +volatile int x; +int * volatile y = (int *) 0; +return !x && !y; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_volatile=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_volatile=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5 +echo "${ECHO_T}$ac_cv_c_volatile" >&6; } +if test $ac_cv_c_volatile = no; then + +cat >>confdefs.h <<\_ACEOF +#define volatile +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for ptrdiff_t" >&5 +echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6; } +if test "${ac_cv_type_ptrdiff_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef ptrdiff_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_ptrdiff_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_ptrdiff_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5 +echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6; } +if test $ac_cv_type_ptrdiff_t = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_PTRDIFF_T 1 +_ACEOF + + +fi + + +# Checks for library functions. +{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5 +echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; } +if test "${ac_cv_type_signal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_signal=int +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_signal=void +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 +echo "${ECHO_T}$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +#define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +{ echo "$as_me:$LINENO: checking for working strcoll" >&5 +echo $ECHO_N "checking for working strcoll... $ECHO_C" >&6; } +if test "${ac_cv_func_strcoll_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_strcoll_works=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +return (strcoll ("abc", "def") >= 0 || + strcoll ("ABC", "DEF") >= 0 || + strcoll ("123", "456") >= 0) + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_strcoll_works=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_strcoll_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strcoll_works" >&5 +echo "${ECHO_T}$ac_cv_func_strcoll_works" >&6; } +if test $ac_cv_func_strcoll_works = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STRCOLL 1 +_ACEOF + +fi + + +for ac_func in strftime +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + # strftime is in -lintl on SCO UNIX. +{ echo "$as_me:$LINENO: checking for strftime in -lintl" >&5 +echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6; } +if test "${ac_cv_lib_intl_strftime+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strftime (); +int +main () +{ +return strftime (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_intl_strftime=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_intl_strftime=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6; } +if test $ac_cv_lib_intl_strftime = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_STRFTIME 1 +_ACEOF + +LIBS="-lintl $LIBS" +fi + +fi +done + +{ echo "$as_me:$LINENO: checking for working strtod" >&5 +echo $ECHO_N "checking for working strtod... $ECHO_C" >&6; } +if test "${ac_cv_func_strtod+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_strtod=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +$ac_includes_default +#ifndef strtod +double strtod (); +#endif +int +main() +{ + { + /* Some versions of Linux strtod mis-parse strings with leading '+'. */ + char *string = " +69"; + char *term; + double value; + value = strtod (string, &term); + if (value != 69 || term != (string + 4)) + return 1; + } + + { + /* Under Solaris 2.4, strtod returns the wrong value for the + terminating character under some conditions. */ + char *string = "NaN"; + char *term; + strtod (string, &term); + if (term != string && *(term - 1) == 0) + return 1; + } + return 0; +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_strtod=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_strtod=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strtod" >&5 +echo "${ECHO_T}$ac_cv_func_strtod" >&6; } +if test $ac_cv_func_strtod = no; then + case " $LIBOBJS " in + *" strtod.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strtod.$ac_objext" + ;; +esac + +{ echo "$as_me:$LINENO: checking for pow" >&5 +echo $ECHO_N "checking for pow... $ECHO_C" >&6; } +if test "${ac_cv_func_pow+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define pow to an innocuous variant, in case declares pow. + For example, HP-UX 11i declares gettimeofday. */ +#define pow innocuous_pow + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char pow (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef pow + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pow (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_pow || defined __stub___pow +choke me +#endif + +int +main () +{ +return pow (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_pow=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_pow=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_pow" >&5 +echo "${ECHO_T}$ac_cv_func_pow" >&6; } + +if test $ac_cv_func_pow = no; then + { echo "$as_me:$LINENO: checking for pow in -lm" >&5 +echo $ECHO_N "checking for pow in -lm... $ECHO_C" >&6; } +if test "${ac_cv_lib_m_pow+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pow (); +int +main () +{ +return pow (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_m_pow=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_pow=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_pow" >&5 +echo "${ECHO_T}$ac_cv_lib_m_pow" >&6; } +if test $ac_cv_lib_m_pow = yes; then + POW_LIB=-lm +else + { echo "$as_me:$LINENO: WARNING: cannot find library containing definition of pow" >&5 +echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} +fi + +fi + +fi + + +for ac_func in vprintf +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +{ echo "$as_me:$LINENO: checking for _doprnt" >&5 +echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; } +if test "${ac_cv_func__doprnt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define _doprnt to an innocuous variant, in case declares _doprnt. + For example, HP-UX 11i declares gettimeofday. */ +#define _doprnt innocuous__doprnt + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char _doprnt (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef _doprnt + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char _doprnt (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub__doprnt || defined __stub____doprnt +choke me +#endif + +int +main () +{ +return _doprnt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func__doprnt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func__doprnt=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 +echo "${ECHO_T}$ac_cv_func__doprnt" >&6; } +if test $ac_cv_func__doprnt = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DOPRNT 1 +_ACEOF + +fi + +fi +done + + + + + + + + + + + + + + + + + + + +for ac_func in floor isascii localeconv mblen memmove memset modf pow sqrt strcasecmp strchr strerror strncasecmp strrchr strstr strtol strtoul +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# Versioning: +# Only change this if library is no longer +# ABI compatible with previous version +# (e.g. function declaration changed) +TALIB_LIBRARY_VERSION=0:0:0 + + + +ac_config_files="$ac_config_files Makefile src/Makefile src/ta_abstract/Makefile src/ta_common/Makefile src/ta_func/Makefile src/tools/Makefile src/tools/gen_code/Makefile src/tools/ta_regtest/Makefile ta-lib-config ta-lib.spec ta-lib.dpkg" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by ta-lib $as_me 0.4.0, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +ta-lib config.status 0.4.0 +configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2006 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "include/ta_config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/ta_config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "src/ta_abstract/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_abstract/Makefile" ;; + "src/ta_common/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_common/Makefile" ;; + "src/ta_func/Makefile") CONFIG_FILES="$CONFIG_FILES src/ta_func/Makefile" ;; + "src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; + "src/tools/gen_code/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/gen_code/Makefile" ;; + "src/tools/ta_regtest/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/ta_regtest/Makefile" ;; + "ta-lib-config") CONFIG_FILES="$CONFIG_FILES ta-lib-config" ;; + "ta-lib.spec") CONFIG_FILES="$CONFIG_FILES ta-lib.spec" ;; + "ta-lib.dpkg") CONFIG_FILES="$CONFIG_FILES ta-lib.dpkg" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# +# Set up the sed scripts for CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + +_ACEOF + + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +SHELL!$SHELL$ac_delim +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim +PACKAGE_NAME!$PACKAGE_NAME$ac_delim +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim +PACKAGE_STRING!$PACKAGE_STRING$ac_delim +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim +exec_prefix!$exec_prefix$ac_delim +prefix!$prefix$ac_delim +program_transform_name!$program_transform_name$ac_delim +bindir!$bindir$ac_delim +sbindir!$sbindir$ac_delim +libexecdir!$libexecdir$ac_delim +datarootdir!$datarootdir$ac_delim +datadir!$datadir$ac_delim +sysconfdir!$sysconfdir$ac_delim +sharedstatedir!$sharedstatedir$ac_delim +localstatedir!$localstatedir$ac_delim +includedir!$includedir$ac_delim +oldincludedir!$oldincludedir$ac_delim +docdir!$docdir$ac_delim +infodir!$infodir$ac_delim +htmldir!$htmldir$ac_delim +dvidir!$dvidir$ac_delim +pdfdir!$pdfdir$ac_delim +psdir!$psdir$ac_delim +libdir!$libdir$ac_delim +localedir!$localedir$ac_delim +mandir!$mandir$ac_delim +DEFS!$DEFS$ac_delim +ECHO_C!$ECHO_C$ac_delim +ECHO_N!$ECHO_N$ac_delim +ECHO_T!$ECHO_T$ac_delim +LIBS!$LIBS$ac_delim +build_alias!$build_alias$ac_delim +host_alias!$host_alias$ac_delim +target_alias!$target_alias$ac_delim +INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim +INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim +INSTALL_DATA!$INSTALL_DATA$ac_delim +am__isrc!$am__isrc$ac_delim +CYGPATH_W!$CYGPATH_W$ac_delim +PACKAGE!$PACKAGE$ac_delim +VERSION!$VERSION$ac_delim +ACLOCAL!$ACLOCAL$ac_delim +AUTOCONF!$AUTOCONF$ac_delim +AUTOMAKE!$AUTOMAKE$ac_delim +AUTOHEADER!$AUTOHEADER$ac_delim +MAKEINFO!$MAKEINFO$ac_delim +install_sh!$install_sh$ac_delim +STRIP!$STRIP$ac_delim +INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim +mkdir_p!$mkdir_p$ac_delim +AWK!$AWK$ac_delim +SET_MAKE!$SET_MAKE$ac_delim +am__leading_dot!$am__leading_dot$ac_delim +AMTAR!$AMTAR$ac_delim +am__tar!$am__tar$ac_delim +am__untar!$am__untar$ac_delim +CC!$CC$ac_delim +CFLAGS!$CFLAGS$ac_delim +LDFLAGS!$LDFLAGS$ac_delim +CPPFLAGS!$CPPFLAGS$ac_delim +ac_ct_CC!$ac_ct_CC$ac_delim +EXEEXT!$EXEEXT$ac_delim +OBJEXT!$OBJEXT$ac_delim +DEPDIR!$DEPDIR$ac_delim +am__include!$am__include$ac_delim +am__quote!$am__quote$ac_delim +AMDEP_TRUE!$AMDEP_TRUE$ac_delim +AMDEP_FALSE!$AMDEP_FALSE$ac_delim +AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim +CCDEPMODE!$CCDEPMODE$ac_delim +am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim +am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim +build!$build$ac_delim +build_cpu!$build_cpu$ac_delim +build_vendor!$build_vendor$ac_delim +build_os!$build_os$ac_delim +host!$host$ac_delim +host_cpu!$host_cpu$ac_delim +host_vendor!$host_vendor$ac_delim +host_os!$host_os$ac_delim +GREP!$GREP$ac_delim +EGREP!$EGREP$ac_delim +LN_S!$LN_S$ac_delim +ECHO!$ECHO$ac_delim +AR!$AR$ac_delim +RANLIB!$RANLIB$ac_delim +CPP!$CPP$ac_delim +CXX!$CXX$ac_delim +CXXFLAGS!$CXXFLAGS$ac_delim +ac_ct_CXX!$ac_ct_CXX$ac_delim +CXXDEPMODE!$CXXDEPMODE$ac_delim +am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim +am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim +CXXCPP!$CXXCPP$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +CEOF$ac_eof +_ACEOF + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +F77!$F77$ac_delim +FFLAGS!$FFLAGS$ac_delim +ac_ct_F77!$ac_ct_F77$ac_delim +LIBTOOL!$LIBTOOL$ac_delim +POW_LIB!$POW_LIB$ac_delim +LIBOBJS!$LIBOBJS$ac_delim +TALIB_LIBRARY_VERSION!$TALIB_LIBRARY_VERSION$ac_delim +LTLIBOBJS!$LTLIBOBJS$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 8; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + :H) + # + # CONFIG_HEADER + # +_ACEOF + +# Transform confdefs.h into a sed script `conftest.defines', that +# substitutes the proper values into config.h.in to produce config.h. +rm -f conftest.defines conftest.tail +# First, append a space to every undef/define line, to ease matching. +echo 's/$/ /' >conftest.defines +# Then, protect against being on the right side of a sed subst, or in +# an unquoted here document, in config.status. If some macros were +# called several times there might be several #defines for the same +# symbol, which is useless. But do not sort them, since the last +# AC_DEFINE must be honored. +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where +# NAME is the cpp macro being defined, VALUE is the value it is being given. +# PARAMS is the parameter list in the macro definition--in most cases, it's +# just an empty string. +ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' +ac_dB='\\)[ (].*,\\1define\\2' +ac_dC=' ' +ac_dD=' ,' + +uniq confdefs.h | + sed -n ' + t rset + :rset + s/^[ ]*#[ ]*define[ ][ ]*// + t ok + d + :ok + s/[\\&,]/\\&/g + s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p + s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p + ' >>conftest.defines + +# Remove the space that was appended to ease matching. +# Then replace #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +# (The regexp can be short, since the line contains either #define or #undef.) +echo 's/ $// +s,^[ #]*u.*,/* & */,' >>conftest.defines + +# Break up conftest.defines: +ac_max_sed_lines=50 + +# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" +# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" +# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" +# et cetera. +ac_in='$ac_file_inputs' +ac_out='"$tmp/out1"' +ac_nxt='"$tmp/out2"' + +while : +do + # Write a here document: + cat >>$CONFIG_STATUS <<_ACEOF + # First, check the format of the line: + cat >"\$tmp/defines.sed" <<\\CEOF +/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def +/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def +b +:def +_ACEOF + sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS + ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in + sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail + grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines conftest.tail + +echo "ac_result=$ac_in" >>$CONFIG_STATUS +cat >>$CONFIG_STATUS <<\_ACEOF + if test x"$ac_file" != x-; then + echo "/* $configure_input */" >"$tmp/config.h" + cat "$ac_result" >>"$tmp/config.h" + if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f $ac_file + mv "$tmp/config.h" $ac_file + fi + else + echo "/* $configure_input */" + cat "$ac_result" + fi + rm -f "$tmp/out12" +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| . 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 +echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/configure.in b/configure.in new file mode 100644 index 000000000..d2e5784c5 --- /dev/null +++ b/configure.in @@ -0,0 +1,47 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) +AC_COPYRIGHT([(c) TicTacTec 2005, 2006]) +AC_INIT([ta-lib], [0.4.0], [http://sourceforge.net/tracker/?group_id=8903&atid=108903]) +AC_CONFIG_SRCDIR([src/ta_func/ta_AD.c]) +AC_CONFIG_HEADER([include/ta_config.h]) +AM_INIT_AUTOMAKE([ta-lib], [0.4.0]) + +# Checks for programs. +AC_PROG_CC +AC_PROG_LIBTOOL + +# Checks for libraries. +AC_CHECK_LIB([dl], [dlopen]) +AC_CHECK_LIB([pthread], [pthread_create]) + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([float.h inttypes.h limits.h locale.h stddef.h stdint.h stdlib.h string.h unistd.h wchar.h wctype.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T +AC_STRUCT_TM +AC_C_VOLATILE +AC_CHECK_TYPES([ptrdiff_t]) + +# Checks for library functions. +AC_TYPE_SIGNAL +AC_FUNC_STRCOLL +AC_FUNC_STRFTIME +AC_FUNC_STRTOD +AC_FUNC_VPRINTF +AC_CHECK_FUNCS([floor isascii localeconv mblen memmove memset modf pow sqrt strcasecmp strchr strerror strncasecmp strrchr strstr strtol strtoul]) + +# Versioning: +# Only change this if library is no longer +# ABI compatible with previous version +# (e.g. function declaration changed) +TALIB_LIBRARY_VERSION=0:0:0 + +AC_SUBST(TALIB_LIBRARY_VERSION) + +AC_CONFIG_FILES([Makefile src/Makefile src/ta_abstract/Makefile src/ta_common/Makefile src/ta_func/Makefile src/tools/Makefile src/tools/gen_code/Makefile src/tools/ta_regtest/Makefile ta-lib-config ta-lib.spec ta-lib.dpkg]) +AC_OUTPUT diff --git a/depcomp b/depcomp new file mode 100755 index 000000000..ca5ea4e1e --- /dev/null +++ b/depcomp @@ -0,0 +1,584 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2006-10-15.18 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software +# Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 000000000..b99b6f178 --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1,11 @@ + +bin_PRORAMS = libta_include + +libta_includedir=$(includedir)/ta-lib/ + +libta_include_HEADERS = ta_abstract.h + ta_defs.h \ + ta_libc.h \ + ta_common.h \ + ta_func.h \ + func_list.txt diff --git a/include/ta_abstract.h b/include/ta_abstract.h new file mode 100644 index 000000000..808b5ae43 --- /dev/null +++ b/include/ta_abstract.h @@ -0,0 +1,559 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TA_ABSTRACT_H +#define TA_ABSTRACT_H + +#ifndef TA_COMMON_H + #include "ta_common.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* This file defines the interface for calling all the TA functions without + * knowing at priori the parameters. + * + * This capability is particularly useful for an application who needs + * to support the complete list of TA functions without having to + * re-write new code each time a new function is added to TA-Lib. + * + * Example 1: + * Lets say you are doing a charting software. When the user select + * a price bar, a side list offers blindly all the TA functions + * that could be applied to a price bar. The user selects one of + * these, then a dialog open for allowing to adjust some parameter + * (TA-LIB will tell your software which parameter are needed and the + * valid range for each). Once all the parameter are set, you can + * call blindly the corresponding TA function. The returned + * information can then also blindly be drawn on the chart (some + * output flags allows to get some hint about how the data shall be + * displayed). + * The same "abstract" logic apply to all the TA functions. + * Some TA Functions works only on volume, or can work indiferently + * with any time serie data (the open, close, another indicator...). + * All the applicable functions to the currently selected/available + * data can be determined through this "virtual" interface. + * + * Example 2: + * Let's say you do not like the direct interface for + * calling the TA Functions, you can write a code that + * re-generate a different interface. This is already + * done even for the 'C' interface (ta_func.h is generated). + * + * Example 3: + * With the abstract interface you can easily generate + * glue code. Like generating an interface that integrates + * well within Perl... see the project SWIG if you are + * interested by such things. + * + * The abstract interface is used within TA-Lib to perform at least + * the following: + * - used by gen_code to generate all the glue code. + * - used by the Excel interface to call all the TA functions. + * - used to generate a XML representation of the TA functions. + */ + +/* The following functions are used to obtain the name of all the + * TA function groups ("Market Strength", "Trend Indicator" etc...). + * + * On success, it becomes the responsibility of the caller to + * call TA_GroupTableFree once the 'table' is no longuer needed. + * + * Example: + * This code snippet will print out the name of all the supported + * function group available: + * + * TA_StringTable *table; + * TA_RetCode retCode; + * int i; + * + * retCode = TA_GroupTableAlloc( &table ); + * + * if( retCode == TA_SUCCESS ) + * { + * for( i=0; i < table->size; i++ ) + * printf( "%s\n", table->string[i] ); + * + * TA_GroupTableFree( table ); + * } + */ +TA_RetCode TA_GroupTableAlloc( TA_StringTable **table ); +TA_RetCode TA_GroupTableFree ( TA_StringTable *table ); + +/* The following functions are used to obtain the name of all the + * function provided in a certain group. + * + * On success, it becomes the responsibility of the caller to + * call TA_FuncTableFree once the 'table' is no longuer needed. + * + * Passing NULL as the group string will return ALL the TA functions. + * (Note: All TA_Functions have a unique string identifier even when in + * seperate group). + * + * Example: + * This code snippet will print out the name of all the supported + * function in the "market strength" category: + * + * TA_StringTable *table; + * TA_RetCode retCode; + * int i; + * + * retCode = TA_FuncTableAlloc( "Market Strength", &table ); + * + * if( retCode == TA_SUCCESS ) + * { + * for( i=0; i < table->size; i++ ) + * printf( "%s\n", table->string[i] ); + * + * TA_FuncTableFree( table ); + * } + */ +TA_RetCode TA_FuncTableAlloc( const char *group, TA_StringTable **table ); +TA_RetCode TA_FuncTableFree ( TA_StringTable *table ); + +/* Using the name, you can obtain an handle unique to this function. + * This handle is further used for obtaining information on the + * parameters needed and also for potentially calling this TA function. + * + * For convenience, this handle can also be found in + * the TA_FuncInfo structure (see below). + */ +typedef unsigned int TA_FuncHandle; +TA_RetCode TA_GetFuncHandle( const char *name, + const TA_FuncHandle **handle ); + +/* Get some basic information about a function. + * + * A const pointer will be set on the corresponding TA_FuncInfo structure. + * The whole structure are hard coded constants and it can be assumed they + * will not change at runtime. + * + * Example: + * Print the number of inputs used by the MA (moving average) function. + * + * TA_RetCode retCode; + * TA_FuncHandle *handle; + * const TA_FuncInfo *theInfo; + * + * retCode = TA_GetFuncHandle( "MA", &handle ); + * + * if( retCode == TA_SUCCESS ) + * { + * retCode = TA_GetFuncInfo( handle, &theInfo ); + * if( retCode == TA_SUCCESS ) + * printf( "Nb Input = %d\n", theInfo->nbInput ); + * } + * + */ +typedef int TA_FuncFlags; +#define TA_FUNC_FLG_OVERLAP 0x01000000 /* Output scale same as input data. */ +#define TA_FUNC_FLG_VOLUME 0x04000000 /* Output shall be over the volume data. */ +#define TA_FUNC_FLG_UNST_PER 0x08000000 /* Indicate if this function have an unstable + * initial period. Some additional code exist + * for these functions for allowing to set that + * unstable period. See Documentation. + */ +#define TA_FUNC_FLG_CANDLESTICK 0x10000000 /* Output shall be a candlestick */ + +typedef struct TA_FuncInfo +{ + /* Constant information about the function. The + * information found in this structure is guarantee + * to not change at runtime. + */ + const char * name; + const char * group; + + const char * hint; + const char * camelCaseName; + TA_FuncFlags flags; + + unsigned int nbInput; + unsigned int nbOptInput; + unsigned int nbOutput; + + const TA_FuncHandle *handle; +} TA_FuncInfo; + +TA_RetCode TA_GetFuncInfo( const TA_FuncHandle *handle, + const TA_FuncInfo **funcInfo ); + + +/* An alternate way to access all the functions is through the + * use of the TA_ForEachFunc(). You can setup a function to be + * call back for each TA function in the TA-Lib. + * + * Example: + * This code will print the group and name of all available functions. + * + * void printFuncInfo( const TA_FuncInfo *funcInfo, void *opaqueData ) + * { + * printf( "Group=%s Name=%s\n", funcInfo->group, funcInfo->name ); + * } + * + * void displayListOfTAFunctions( void ) + * { + * TA_ForEachFunc( printFuncInfo, NULL ); + * } + */ +typedef void (*TA_CallForEachFunc)(const TA_FuncInfo *funcInfo, void *opaqueData ); + +TA_RetCode TA_ForEachFunc( TA_CallForEachFunc functionToCall, void *opaqueData ); + +/* The next section includes the data structures and function allowing to + * proceed with the call of a Tech. Analysis function. + * + * At first, it may seems a little bit complicated, but it is worth to take the + * effort to learn about it. Once you succeed to interface with TA-Abstract you get + * access to the complete library of TA functions at once without further effort. + */ + +/* Structures representing extended information on a parameter. */ + +typedef struct TA_RealRange +{ + TA_Real min; + TA_Real max; + TA_Integer precision; /* nb of digit after the '.' */ + + /* The following suggested value are used by Tech. Analysis software + * doing parameter "optimization". Can be ignored by most user. + */ + TA_Real suggested_start; + TA_Real suggested_end; + TA_Real suggested_increment; +} TA_RealRange; + +typedef struct TA_IntegerRange +{ + TA_Integer min; + TA_Integer max; + + /* The following suggested value are used by Tech. Analysis software + * doing parameter "optimization". Can be ignored by most user. + */ + TA_Integer suggested_start; + TA_Integer suggested_end; + TA_Integer suggested_increment; +} TA_IntegerRange; + +typedef struct TA_RealDataPair +{ + /* A TA_Real value and the corresponding string. */ + TA_Real value; + const char *string; +} TA_RealDataPair; + +typedef struct TA_IntegerDataPair +{ + /* A TA_Integer value and the corresponding string. */ + TA_Integer value; + const char *string; +} TA_IntegerDataPair; + +typedef struct TA_RealList +{ + const TA_RealDataPair *data; + unsigned int nbElement; +} TA_RealList; + +typedef struct TA_IntegerList +{ + const TA_IntegerDataPair *data; + unsigned int nbElement; +} TA_IntegerList; + +typedef enum +{ + TA_Input_Price, + TA_Input_Real, + TA_Input_Integer +} TA_InputParameterType; + +typedef enum +{ + TA_OptInput_RealRange, + TA_OptInput_RealList, + TA_OptInput_IntegerRange, + TA_OptInput_IntegerList +} TA_OptInputParameterType; + +typedef enum +{ + TA_Output_Real, + TA_Output_Integer +} TA_OutputParameterType; + +/* When the input is a TA_Input_Price, the following + * TA_InputFlags indicates the required components. + * These can be combined for functions requiring more + * than one component. + * + * Example: + * (TA_IN_PRICE_OPEN|TA_IN_PRICE_HIGH) + * Indicates that the functions requires two inputs + * that must be specifically the open and the high. + */ +typedef int TA_InputFlags; +#define TA_IN_PRICE_OPEN 0x00000001 +#define TA_IN_PRICE_HIGH 0x00000002 +#define TA_IN_PRICE_LOW 0x00000004 +#define TA_IN_PRICE_CLOSE 0x00000008 +#define TA_IN_PRICE_VOLUME 0x00000010 +#define TA_IN_PRICE_OPENINTEREST 0x00000020 +#define TA_IN_PRICE_TIMESTAMP 0x00000040 + +/* The following are flags for optional inputs. + * + * TA_OPTIN_IS_PERCENT: Input is a percentage. + * + * TA_OPTIN_IS_DEGREE: Input is a degree (0-360). + * + * TA_OPTIN_IS_CURRENCY: Input is a currency. + * + * TA_OPTIN_ADVANCED: + * Used for parameters who are rarely changed. + * Most application can hide these advanced optional inputs to their + * end-user (or make it harder to change). + */ +typedef int TA_OptInputFlags; +#define TA_OPTIN_IS_PERCENT 0x00100000 /* Input is a percentage. */ +#define TA_OPTIN_IS_DEGREE 0x00200000 /* Input is a degree (0-360). */ +#define TA_OPTIN_IS_CURRENCY 0x00400000 /* Input is a currency. */ +#define TA_OPTIN_ADVANCED 0x01000000 + + +/* The following are flags giving hint on what + * could be done with the output. + */ +typedef int TA_OutputFlags; +#define TA_OUT_LINE 0x00000001 /* Suggest to display as a connected line. */ +#define TA_OUT_DOT_LINE 0x00000002 /* Suggest to display as a 'dotted' line. */ +#define TA_OUT_DASH_LINE 0x00000004 /* Suggest to display as a 'dashed' line. */ +#define TA_OUT_DOT 0x00000008 /* Suggest to display with dots only. */ +#define TA_OUT_HISTO 0x00000010 /* Suggest to display as an histogram. */ +#define TA_OUT_PATTERN_BOOL 0x00000020 /* Indicates if pattern exists (!=0) or not (0) */ +#define TA_OUT_PATTERN_BULL_BEAR 0x00000040 /* =0 no pattern, > 0 bullish, < 0 bearish */ +#define TA_OUT_PATTERN_STRENGTH 0x00000080 /* =0 neutral, ]0..100] getting bullish, ]100..200] bullish, [-100..0[ getting bearish, [-200..100[ bearish */ +#define TA_OUT_POSITIVE 0x00000100 /* Output can be positive */ +#define TA_OUT_NEGATIVE 0x00000200 /* Output can be negative */ +#define TA_OUT_ZERO 0x00000400 /* Output can be zero */ +#define TA_OUT_UPPER_LIMIT 0x00000800 /* Indicates that the values represent an upper limit. */ +#define TA_OUT_LOWER_LIMIT 0x00001000 /* Indicates that the values represent a lower limit. */ + + +/* The following 3 structures will exist for each input, optional + * input and output. + * + * These structures tells you everything you need to know for identifying + * the parameters applicable to the function. + */ +typedef struct TA_InputParameterInfo +{ + TA_InputParameterType type; + const char *paramName; + TA_InputFlags flags; + +} TA_InputParameterInfo; + +typedef struct TA_OptInputParameterInfo +{ + TA_OptInputParameterType type; + const char *paramName; + TA_OptInputFlags flags; + + const char *displayName; + const void *dataSet; + TA_Real defaultValue; + const char *hint; + const char *helpFile; + +} TA_OptInputParameterInfo; + +typedef struct TA_OutputParameterInfo +{ + TA_OutputParameterType type; + const char *paramName; + TA_OutputFlags flags; + +} TA_OutputParameterInfo; + +/* Functions to get a const ptr on the "TA_XXXXXXParameterInfo". + * Max value for the 'paramIndex' can be found in the TA_FuncInfo structure. + * The 'handle' can be obtained from TA_GetFuncHandle or from a TA_FuncInfo. + * + * Short example: + * + * void displayInputType( const TA_FuncInfo *funcInfo ) + * { + * unsigned int i; + * const TA_InputParameterInfo *paramInfo; + * + * for( i=0; i < funcInfo->nbInput; i++ ) + * { + * TA_GetInputParameterInfo( funcInfo->handle, i, ¶mInfo ); + * switch( paramInfo->type ) + * { + * case TA_Input_Price: + * printf( "This function needs price bars as input\n" ); + * break; + * case TA_Input_Real: + * printf( "This function needs an array of floats as input\n" ); + * break; + * (... etc. ...) + * } + * } + * } + */ +TA_RetCode TA_GetInputParameterInfo( const TA_FuncHandle *handle, + unsigned int paramIndex, + const TA_InputParameterInfo **info ); + +TA_RetCode TA_GetOptInputParameterInfo( const TA_FuncHandle *handle, + unsigned int paramIndex, + const TA_OptInputParameterInfo **info ); + +TA_RetCode TA_GetOutputParameterInfo( const TA_FuncHandle *handle, + unsigned int paramIndex, + const TA_OutputParameterInfo **info ); + +/* Alloc a structure allowing to build the list of parameters + * for doing a call. + * + * All input and output parameters must be setup. If not, TA_BAD_PARAM + * will be returned when TA_CallFunc is called. + * + * The optional input are not required to be setup. A default value + * will always be used in that case. + * + * If there is an attempts to set a parameter with the wrong function + * (and thus the wrong type), TA_BAD_PARAM will be immediatly returned. + * + * Although this mechanism looks complicated, it is written for being fairly solid. + * If you provide a wrong parameter value, or wrong type, or wrong pointer etc. the + * library shall return TA_BAD_PARAM or TA_BAD_OBJECT and not hang. + */ +typedef struct TA_ParamHolder +{ + /* Implementation is hidden. */ + void *hiddenData; +} TA_ParamHolder; + +TA_RetCode TA_ParamHolderAlloc( const TA_FuncHandle *handle, + TA_ParamHolder **allocatedParams ); + +TA_RetCode TA_ParamHolderFree( TA_ParamHolder *params ); + +/* Setup the values of the data input parameters. + * + * paramIndex is zero for the first input. + */ +TA_RetCode TA_SetInputParamIntegerPtr( TA_ParamHolder *params, + unsigned int paramIndex, + const TA_Integer *value ); + +TA_RetCode TA_SetInputParamRealPtr( TA_ParamHolder *params, + unsigned int paramIndex, + const TA_Real *value ); + +TA_RetCode TA_SetInputParamPricePtr( TA_ParamHolder *params, + unsigned int paramIndex, + const TA_Real *open, + const TA_Real *high, + const TA_Real *low, + const TA_Real *close, + const TA_Real *volume, + const TA_Real *openInterest ); + +/* Setup the values of the optional input parameters. + * If an optional input is not set, a default value will be used. + * + * paramIndex is zero for the first optional input. + */ +TA_RetCode TA_SetOptInputParamInteger( TA_ParamHolder *params, + unsigned int paramIndex, + TA_Integer optInValue ); + +TA_RetCode TA_SetOptInputParamReal( TA_ParamHolder *params, + unsigned int paramIndex, + TA_Real optInValue ); + +/* Setup the parameters indicating where to store the output. + * + * The caller is responsible to allocate sufficient memory. A safe bet is to + * always do: nb of output elements == (endIdx-startIdx+1) + * + * paramIndex is zero for the first output. + * + */ +TA_RetCode TA_SetOutputParamIntegerPtr( TA_ParamHolder *params, + unsigned int paramIndex, + TA_Integer *out ); + +TA_RetCode TA_SetOutputParamRealPtr( TA_ParamHolder *params, + unsigned int paramIndex, + TA_Real *out ); + +/* Once the optional parameter are set, it is possible to + * get the lookback for this call. This information can be + * used to calculate the optimal size for the output buffers. + * (See the documentation for method to calculate the output size). + */ +TA_RetCode TA_GetLookback( const TA_ParamHolder *params, + TA_Integer *lookback ); + +/* Finally, call the TA function with the parameters. + * + * The TA function who is going to be called was specified + * when the TA_ParamHolderAlloc was done. + */ +TA_RetCode TA_CallFunc( const TA_ParamHolder *params, + TA_Integer startIdx, + TA_Integer endIdx, + TA_Integer *outBegIdx, + TA_Integer *outNbElement ); + + +/* Return XML representation of all the TA functions. + * The returned array is the same as the ta_func_api.xml file. + */ +const char *TA_FunctionDescriptionXML( void ); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/include/ta_common.h b/include/ta_common.h new file mode 100644 index 000000000..5d7c2449e --- /dev/null +++ b/include/ta_common.h @@ -0,0 +1,149 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TA_COMMON_H +#define TA_COMMON_H + +/* The following macros are used to return internal errors. + * The Id can be from 1 to 999 and translate to the user + * as the return code 5000 to 5999. + * + * Everytime you wish to add a new fatal error code, + * use the "NEXT AVAILABLE NUMBER" and increment the + * number in this file. + * + * NEXT AVAILABLE NUMBER: 181 + */ +#define TA_INTERNAL_ERROR(Id) ((TA_RetCode)(TA_INTERNAL_ERROR+Id)) + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#ifndef TA_DEFS_H + #include "ta_defs.h" +#endif + +/* Some functions to get the version of TA-Lib. + * + * Format is "Major.Minor.Patch (Month Day Year Hour:Min:Sec)" + * + * Example: "1.2.0 (Jan 17 2004 23:59:59)" + * + * Major increments indicates an "Highly Recommended" update. + * + * Minor increments indicates arbitrary milestones in the + * development of the next major version. + * + * Patch are fixes to a "Major.Minor" release. + */ +const char *TA_GetVersionString( void ); + +/* Get individual component of the Version string */ +const char *TA_GetVersionMajor ( void ); +const char *TA_GetVersionMinor ( void ); +const char *TA_GetVersionBuild ( void ); +const char *TA_GetVersionDate ( void ); +const char *TA_GetVersionTime ( void ); + +/* Misc. declaration used throughout the library code. */ +typedef double TA_Real; +typedef int TA_Integer; + +/* General purpose structure containing an array of string. + * + * Example of usage: + * void printStringTable( TA_StringTable *table ) + * { + * int i; + * for( i=0; i < table->size; i++ ) + * cout << table->string[i] << endl; + * } + * + */ +typedef struct TA_StringTable +{ + unsigned int size; /* Number of string. */ + const char **string; /* Pointer to the strings. */ + + /* Hidden data for internal use by TA-Lib. Do not modify. */ + void *hiddenData; +} TA_StringTable; +/* End-user can get additional information related to a TA_RetCode. + * + * Example: + * TA_RetCodeInfo info; + * + * retCode = TA_Initialize( ... ); + * + * if( retCode != TA_SUCCESS ) + * { + * TA_SetRetCodeInfo( retCode, &info ); + * printf( "Error %d(%s): %s\n", + * retCode, + * info.enumStr, + * info.infoStr ); + * } + * + * Would display: + * "Error 1(TA_LIB_NOT_INITIALIZE): TA_Initialize was not sucessfully called" + */ +typedef struct TA_RetCodeInfo +{ + const char *enumStr; /* Like "TA_IP_SOCKETERROR" */ + const char *infoStr; /* Like "Error creating socket" */ +} TA_RetCodeInfo; + +/* Info is always returned, even when 'theRetCode' is invalid. */ +void TA_SetRetCodeInfo( TA_RetCode theRetCode, TA_RetCodeInfo *retCodeInfo ); + +/* TA_Initialize() initialize the ressources used by TA-Lib. This + * function must be called once prior to any other functions declared in + * this file. + * + * TA_Shutdown() allows to free all ressources used by TA-Lib. Following + * a shutdown, TA_Initialize() must be called again for re-using TA-Lib. + * + * TA_Shutdown() should be called prior to exiting the application code. + */ +TA_RetCode TA_Initialize( void ); +TA_RetCode TA_Shutdown( void ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/ta_config.h.in b/include/ta_config.h.in new file mode 100644 index 000000000..5e10a5ae8 --- /dev/null +++ b/include/ta_config.h.in @@ -0,0 +1,162 @@ +/* include/ta_config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +#undef HAVE_DOPRNT + +/* Define to 1 if you have the header file. */ +#undef HAVE_FLOAT_H + +/* Define to 1 if you have the `floor' function. */ +#undef HAVE_FLOOR + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `isascii' function. */ +#undef HAVE_ISASCII + +/* Define to 1 if you have the `dl' library (-ldl). */ +#undef HAVE_LIBDL + +/* Define to 1 if you have the `pthread' library (-lpthread). */ +#undef HAVE_LIBPTHREAD + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if you have the `localeconv' function. */ +#undef HAVE_LOCALECONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if you have the `mblen' function. */ +#undef HAVE_MBLEN + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the `modf' function. */ +#undef HAVE_MODF + +/* Define to 1 if you have the `pow' function. */ +#undef HAVE_POW + +/* Define to 1 if the system has the type `ptrdiff_t'. */ +#undef HAVE_PTRDIFF_T + +/* Define to 1 if you have the `sqrt' function. */ +#undef HAVE_SQRT + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDDEF_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the `strcoll' function and it is properly defined. + */ +#undef HAVE_STRCOLL + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the `strftime' function. */ +#undef HAVE_STRFTIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strrchr' function. */ +#undef HAVE_STRRCHR + +/* Define to 1 if you have the `strstr' function. */ +#undef HAVE_STRSTR + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if you have the `strtoul' function. */ +#undef HAVE_STRTOUL + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCTYPE_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define as the return type of signal handlers (`int' or `void'). */ +#undef RETSIGTYPE + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if your declares `struct tm'. */ +#undef TM_IN_SYS_TIME + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* Define to empty if the keyword `volatile' does not work. Warning: valid + code using `volatile' can become incorrect without. Disable with care. */ +#undef volatile diff --git a/include/ta_defs.h b/include/ta_defs.h new file mode 100644 index 000000000..2c36143b1 --- /dev/null +++ b/include/ta_defs.h @@ -0,0 +1,319 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TA_DEFS_H +#define TA_DEFS_H + +/*** The following block of code is to define: + *** + *** UInt32 : 32 bits unsigned integer. + *** Int32 : 32 bits signed integer. + *** UInt64 : 64 bits unsigned integer. + *** Int64 : 64 bits signed integer. + *** + *** INT_MIN : The minimal value for Int32 + *** INT_MAX : The maximal value for Int32 + ***/ +#ifndef FD_DEFS_H + #if defined( _MANAGED ) + /* Int32, UInt32, Int64 and UInt64 are built-in for .NET */ + #define INT_MIN (Int32::MinValue) + #define INT_MAX (Int32::MaxValue) + #elif defined( _JAVA ) + #define INT_MIN Integer.MIN_VALUE + #define INT_MAX Integer.MAX_VALUE + #else + #include + + /* Identify if 64 bits platform with __64BIT__. + * Can also be done from compiler command line. + */ + #if defined(_WIN64) + #define __64BIT__ 1 + #endif + + #if defined( __LP64__ ) || defined( _LP64 ) + #define __64BIT__ 1 + #endif + + /* Check also for some known GCC def for 64 bits platform. */ + #if defined(__alpha__)\ + ||defined(__ia64__)\ + ||defined(__ppc64__)\ + ||defined(__s390x__)\ + ||defined(__x86_64__) + #define __64BIT__ 1 + #endif + + #if !defined(__MACTYPES__) + typedef signed int Int32; + typedef unsigned int UInt32; + + #if defined(_WIN32) || defined(_WIN64) + /* See "Windows Data Types". Platform SDK. MSDN documentation. */ + typedef signed __int64 Int64; + typedef unsigned __int64 UInt64; + #else + #if defined(__64BIT__) + /* Standard LP64 model for 64 bits Unix platform. */ + typedef signed long Int64; + typedef unsigned long UInt64; + #else + /* Standard ILP32 model for 32 bits Unix platform. */ + typedef signed long long Int64; + typedef unsigned long long UInt64; + #endif + #endif + #endif + #endif +#endif + +/* Enumeration and macros to abstract syntax differences + * between C, C++, managed C++ and Java. + */ +#if defined( _MANAGED ) + + /* CMJ is the "CManagedJava" macro. It allows to write variant + * for the 3 different languages. + */ + #define CMJ(c,managed,java) managed + + /* Enumeration abstraction */ + #define ENUM_BEGIN(w) enum class w { + #define ENUM_DEFINE(x,y) y + #define ENUM_VALUE(w,x,y) (w::y) + #define ENUM_CASE(w,x,y) (w::y) + #define ENUM_DECLARATION(w) w + #define ENUM_END(w) }; + + /* Structure abstraction */ + #define STRUCT_BEGIN(x) struct x { + #define STRUCT_END(x) }; + + /* Pointer/reference abstraction */ + #define VALUE_HANDLE_INT(name) int name + #define VALUE_HANDLE_DEREF(name) name + #define VALUE_HANDLE_DEREF_TO_ZERO(name) name = 0 + #define VALUE_HANDLE_OUT(name) name + + #define VALUE_HANDLE_GET(name) name + #define VALUE_HANDLE_SET(name,x) name = x + + /* Misc. */ + #define CONSTANT_DOUBLE(x) const double x + #define NAMESPACE(x) x:: + #define UNUSED_VARIABLE(x) (void)x + +#elif defined( _JAVA ) + #define CMJ(c,managed,java) java + + #define ENUM_BEGIN(w) public enum w { + #define ENUM_DEFINE(x,y) y + #define ENUM_VALUE(w,x,y) w.y + #define ENUM_CASE(w,x,y) y + #define ENUM_DECLARATION(w) w + #define ENUM_END(w) }; + + #define STRUCT_BEGIN(x) public class x { + #define STRUCT_END(x) }; + + #define VALUE_HANDLE_INT(name) MInteger name = new MInteger() + #define VALUE_HANDLE_DEREF(name) name.value + #define VALUE_HANDLE_DEREF_TO_ZERO(name) name.value = 0 + #define VALUE_HANDLE_OUT(name) name + + #define VALUE_HANDLE_GET(name) name.value + #define VALUE_HANDLE_SET(name,x) name.value = x + + #define CONSTANT_DOUBLE(x) final double x + #define NAMESPACE(x) x. + #define UNUSED_VARIABLE(x) + +#else + + #define CMJ(c,managed,java) c + + #define ENUM_BEGIN(w) typedef enum { + #define ENUM_DEFINE(x,y) x + #define ENUM_VALUE(w,x,y) x + #define ENUM_CASE(w,x,y) x + #define ENUM_DECLARATION(w) TA_##w + #define ENUM_END(w) } TA_##w; + + #define STRUCT_BEGIN(x) typedef struct { + #define STRUCT_END(x) } x; + + #define VALUE_HANDLE_INT(name) int name + #define VALUE_HANDLE_DEREF(name) (*name) + #define VALUE_HANDLE_DEREF_TO_ZERO(name) (*name) = 0 + #define VALUE_HANDLE_OUT(name) &name + + #define VALUE_HANDLE_GET(name) name + #define VALUE_HANDLE_SET(name,x) name = x + + #define CONSTANT_DOUBLE(x) const double x + #define NAMESPACE(x) + #define UNUSED_VARIABLE(x) (void)x +#endif + +/* Abstraction of function calls within the library. + * Needed because Java/.NET allows overloading, while for C the + * TA_PREFIX allows to select variant of the same function. + */ +#define FUNCTION_CALL(x) TA_PREFIX(x) +#define FUNCTION_CALL_DOUBLE(x) TA_##x +#define LOOKBACK_CALL(x) TA_##x##_Lookback + +/* min/max value for a TA_Integer */ +#define TA_INTEGER_MIN (INT_MIN+1) +#define TA_INTEGER_MAX (INT_MAX) + +/* min/max value for a TA_Real + * + * Use fix value making sense in the + * context of TA-Lib (avoid to use DBL_MIN + * and DBL_MAX standard macro because they + * are troublesome with some compiler). + */ +#define TA_REAL_MIN (-3e+37) +#define TA_REAL_MAX (3e+37) + +/* A value outside of the min/max range + * indicates an undefined or default value. + */ +#define TA_INTEGER_DEFAULT (INT_MIN) +#define TA_REAL_DEFAULT (-4e+37) + +/* Part of this file is generated by gen_code */ + +ENUM_BEGIN( RetCode ) + /* 0 */ ENUM_DEFINE( TA_SUCCESS, Success ), /* No error */ + /* 1 */ ENUM_DEFINE( TA_LIB_NOT_INITIALIZE, LibNotInitialize ), /* TA_Initialize was not sucessfully called */ + /* 2 */ ENUM_DEFINE( TA_BAD_PARAM, BadParam ), /* A parameter is out of range */ + /* 3 */ ENUM_DEFINE( TA_ALLOC_ERR, AllocErr ), /* Possibly out-of-memory */ + /* 4 */ ENUM_DEFINE( TA_GROUP_NOT_FOUND, GroupNotFound ), + /* 5 */ ENUM_DEFINE( TA_FUNC_NOT_FOUND, FuncNotFound ), + /* 6 */ ENUM_DEFINE( TA_INVALID_HANDLE, InvalidHandle ), + /* 7 */ ENUM_DEFINE( TA_INVALID_PARAM_HOLDER, InvalidParamHolder ), + /* 8 */ ENUM_DEFINE( TA_INVALID_PARAM_HOLDER_TYPE, InvalidParamHolderType ), + /* 9 */ ENUM_DEFINE( TA_INVALID_PARAM_FUNCTION, InvalidParamFunction ), + /* 10 */ ENUM_DEFINE( TA_INPUT_NOT_ALL_INITIALIZE, InputNotAllInitialize ), + /* 11 */ ENUM_DEFINE( TA_OUTPUT_NOT_ALL_INITIALIZE, OutputNotAllInitialize ), + /* 12 */ ENUM_DEFINE( TA_OUT_OF_RANGE_START_INDEX, OutOfRangeStartIndex ), + /* 13 */ ENUM_DEFINE( TA_OUT_OF_RANGE_END_INDEX, OutOfRangeEndIndex ), + /* 14 */ ENUM_DEFINE( TA_INVALID_LIST_TYPE, InvalidListType ), + /* 15 */ ENUM_DEFINE( TA_BAD_OBJECT, BadObject ), + /* 16 */ ENUM_DEFINE( TA_NOT_SUPPORTED, NotSupported ), + /* 5000 */ ENUM_DEFINE( TA_INTERNAL_ERROR, InternalError ) = 5000, + /* 0xFFFF */ ENUM_DEFINE( TA_UNKNOWN_ERR, UnknownErr ) = 0xFFFF +ENUM_END( RetCode ) + +ENUM_BEGIN( Compatibility ) + ENUM_DEFINE( TA_COMPATIBILITY_DEFAULT, Default ), + ENUM_DEFINE( TA_COMPATIBILITY_METASTOCK, Metastock ) +ENUM_END( Compatibility ) + +ENUM_BEGIN( MAType ) + ENUM_DEFINE( TA_MAType_SMA, Sma ) =0, + ENUM_DEFINE( TA_MAType_EMA, Ema ) =1, + ENUM_DEFINE( TA_MAType_WMA, Wma ) =2, + ENUM_DEFINE( TA_MAType_DEMA, Dema ) =3, + ENUM_DEFINE( TA_MAType_TEMA, Tema ) =4, + ENUM_DEFINE( TA_MAType_TRIMA, Trima ) =5, + ENUM_DEFINE( TA_MAType_KAMA, Kama ) =6, + ENUM_DEFINE( TA_MAType_MAMA, Mama ) =7, + ENUM_DEFINE( TA_MAType_T3, T3 ) =8 +ENUM_END( MAType ) + + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ ENUM_BEGIN( FuncUnstId ) +/* Generated */ /* 000 */ ENUM_DEFINE( TA_FUNC_UNST_ADX, Adx), +/* Generated */ /* 001 */ ENUM_DEFINE( TA_FUNC_UNST_ADXR, Adxr), +/* Generated */ /* 002 */ ENUM_DEFINE( TA_FUNC_UNST_ATR, Atr), +/* Generated */ /* 003 */ ENUM_DEFINE( TA_FUNC_UNST_CMO, Cmo), +/* Generated */ /* 004 */ ENUM_DEFINE( TA_FUNC_UNST_DX, Dx), +/* Generated */ /* 005 */ ENUM_DEFINE( TA_FUNC_UNST_EMA, Ema), +/* Generated */ /* 006 */ ENUM_DEFINE( TA_FUNC_UNST_HT_DCPERIOD, HtDcPeriod), +/* Generated */ /* 007 */ ENUM_DEFINE( TA_FUNC_UNST_HT_DCPHASE, HtDcPhase), +/* Generated */ /* 008 */ ENUM_DEFINE( TA_FUNC_UNST_HT_PHASOR, HtPhasor), +/* Generated */ /* 009 */ ENUM_DEFINE( TA_FUNC_UNST_HT_SINE, HtSine), +/* Generated */ /* 010 */ ENUM_DEFINE( TA_FUNC_UNST_HT_TRENDLINE, HtTrendline), +/* Generated */ /* 011 */ ENUM_DEFINE( TA_FUNC_UNST_HT_TRENDMODE, HtTrendMode), +/* Generated */ /* 012 */ ENUM_DEFINE( TA_FUNC_UNST_KAMA, Kama), +/* Generated */ /* 013 */ ENUM_DEFINE( TA_FUNC_UNST_MAMA, Mama), +/* Generated */ /* 014 */ ENUM_DEFINE( TA_FUNC_UNST_MFI, Mfi), +/* Generated */ /* 015 */ ENUM_DEFINE( TA_FUNC_UNST_MINUS_DI, MinusDI), +/* Generated */ /* 016 */ ENUM_DEFINE( TA_FUNC_UNST_MINUS_DM, MinusDM), +/* Generated */ /* 017 */ ENUM_DEFINE( TA_FUNC_UNST_NATR, Natr), +/* Generated */ /* 018 */ ENUM_DEFINE( TA_FUNC_UNST_PLUS_DI, PlusDI), +/* Generated */ /* 019 */ ENUM_DEFINE( TA_FUNC_UNST_PLUS_DM, PlusDM), +/* Generated */ /* 020 */ ENUM_DEFINE( TA_FUNC_UNST_RSI, Rsi), +/* Generated */ /* 021 */ ENUM_DEFINE( TA_FUNC_UNST_STOCHRSI, StochRsi), +/* Generated */ /* 022 */ ENUM_DEFINE( TA_FUNC_UNST_T3, T3), +/* Generated */ ENUM_DEFINE( TA_FUNC_UNST_ALL, FuncUnstAll), +/* Generated */ ENUM_DEFINE( TA_FUNC_UNST_NONE, FuncUnstNone) = -1 +/* Generated */ ENUM_END( FuncUnstId ) +/* Generated */ +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ + +/* The TA_RangeType enum specifies the types of range that can be considered + * when to compare a part of a candle to other candles + */ + +ENUM_BEGIN( RangeType ) + ENUM_DEFINE( TA_RangeType_RealBody, RealBody ), + ENUM_DEFINE( TA_RangeType_HighLow, HighLow ), + ENUM_DEFINE( TA_RangeType_Shadows, Shadows ) +ENUM_END( RangeType ) + +/* The TA_CandleSettingType enum specifies which kind of setting to consider; + * the settings are based on the parts of the candle and the common words + * indicating the length (short, long, very long) + */ +ENUM_BEGIN( CandleSettingType ) + ENUM_DEFINE( TA_BodyLong, BodyLong ), + ENUM_DEFINE( TA_BodyVeryLong, BodyVeryLong ), + ENUM_DEFINE( TA_BodyShort, BodyShort ), + ENUM_DEFINE( TA_BodyDoji, BodyDoji ), + ENUM_DEFINE( TA_ShadowLong, ShadowLong ), + ENUM_DEFINE( TA_ShadowVeryLong, ShadowVeryLong ), + ENUM_DEFINE( TA_ShadowShort, ShadowShort ), + ENUM_DEFINE( TA_ShadowVeryShort, ShadowVeryShort ), + ENUM_DEFINE( TA_Near, Near ), + ENUM_DEFINE( TA_Far, Far ), + ENUM_DEFINE( TA_Equal, Equal ), + ENUM_DEFINE( TA_AllCandleSettings, AllCandleSettings ) +ENUM_END( CandleSettingType ) + +#endif diff --git a/include/ta_func.h b/include/ta_func.h new file mode 100644 index 000000000..918b4dc88 --- /dev/null +++ b/include/ta_func.h @@ -0,0 +1,5240 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TA_FUNC_H +#define TA_FUNC_H + +#ifndef TA_COMMON_H + #include "ta_common.h" +#endif + +/* This header contains the prototype of all the Technical Analysis + * function provided by TA-LIB. + */ + +/* TA-LIB Developer Note: Do not modify this file, it is automaticaly + * generated by gen_code. + */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef TA_DEFS_H + #include "ta_defs.h" +#endif + + +/* + * TA_ACOS - Vector Trigonometric ACos + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_ACOS( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ACOS( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ACOS_Lookback( void ); + + +/* + * TA_AD - Chaikin A/D Line + * + * Input = High, Low, Close, Volume + * Output = double + * + */ +TA_RetCode TA_AD( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + const double inVolume[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_AD( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + const float inVolume[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_AD_Lookback( void ); + + +/* + * TA_ADD - Vector Arithmetic Add + * + * Input = double, double + * Output = double + * + */ +TA_RetCode TA_ADD( int startIdx, + int endIdx, + const double inReal0[], + const double inReal1[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ADD( int startIdx, + int endIdx, + const float inReal0[], + const float inReal1[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ADD_Lookback( void ); + + +/* + * TA_ADOSC - Chaikin A/D Oscillator + * + * Input = High, Low, Close, Volume + * Output = double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * + */ +TA_RetCode TA_ADOSC( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + const double inVolume[], + int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ADOSC( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + const float inVolume[], + int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ADOSC_Lookback( int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod ); /* From 2 to 100000 */ + + +/* + * TA_ADX - Average Directional Movement Index + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_ADX( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ADX( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ADX_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_ADXR - Average Directional Movement Index Rating + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_ADXR( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ADXR( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ADXR_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_APO - Absolute Price Oscillator + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * optInMAType: + * Type of Moving Average + * + * + */ +TA_RetCode TA_APO( int startIdx, + int endIdx, + const double inReal[], + int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_APO( int startIdx, + int endIdx, + const float inReal[], + int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_APO_Lookback( int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType ); + +/* + * TA_AROON - Aroon + * + * Input = High, Low + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_AROON( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outAroonDown[], + double outAroonUp[] ); + +TA_RetCode TA_S_AROON( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outAroonDown[], + double outAroonUp[] ); + +int TA_AROON_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_AROONOSC - Aroon Oscillator + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_AROONOSC( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_AROONOSC( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_AROONOSC_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_ASIN - Vector Trigonometric ASin + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_ASIN( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ASIN( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ASIN_Lookback( void ); + + +/* + * TA_ATAN - Vector Trigonometric ATan + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_ATAN( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ATAN( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ATAN_Lookback( void ); + + +/* + * TA_ATR - Average True Range + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_ATR( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ATR( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ATR_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_AVGPRICE - Average Price + * + * Input = Open, High, Low, Close + * Output = double + * + */ +TA_RetCode TA_AVGPRICE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_AVGPRICE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_AVGPRICE_Lookback( void ); + + +/* + * TA_BBANDS - Bollinger Bands + * + * Input = double + * Output = double, double, double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * optInNbDevUp:(From TA_REAL_MIN to TA_REAL_MAX) + * Deviation multiplier for upper band + * + * optInNbDevDn:(From TA_REAL_MIN to TA_REAL_MAX) + * Deviation multiplier for lower band + * + * optInMAType: + * Type of Moving Average + * + * + */ +TA_RetCode TA_BBANDS( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ + double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outRealUpperBand[], + double outRealMiddleBand[], + double outRealLowerBand[] ); + +TA_RetCode TA_S_BBANDS( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ + double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outRealUpperBand[], + double outRealMiddleBand[], + double outRealLowerBand[] ); + +int TA_BBANDS_Lookback( int optInTimePeriod, /* From 2 to 100000 */ + double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ + double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ + TA_MAType optInMAType ); + +/* + * TA_BETA - Beta + * + * Input = double, double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_BETA( int startIdx, + int endIdx, + const double inReal0[], + const double inReal1[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_BETA( int startIdx, + int endIdx, + const float inReal0[], + const float inReal1[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_BETA_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_BOP - Balance Of Power + * + * Input = Open, High, Low, Close + * Output = double + * + */ +TA_RetCode TA_BOP( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_BOP( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_BOP_Lookback( void ); + + +/* + * TA_CCI - Commodity Channel Index + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_CCI( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_CCI( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_CCI_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_CDL2CROWS - Two Crows + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDL2CROWS( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDL2CROWS( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDL2CROWS_Lookback( void ); + + +/* + * TA_CDL3BLACKCROWS - Three Black Crows + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDL3BLACKCROWS( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDL3BLACKCROWS( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDL3BLACKCROWS_Lookback( void ); + + +/* + * TA_CDL3INSIDE - Three Inside Up/Down + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDL3INSIDE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDL3INSIDE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDL3INSIDE_Lookback( void ); + + +/* + * TA_CDL3LINESTRIKE - Three-Line Strike + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDL3LINESTRIKE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDL3LINESTRIKE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDL3LINESTRIKE_Lookback( void ); + + +/* + * TA_CDL3OUTSIDE - Three Outside Up/Down + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDL3OUTSIDE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDL3OUTSIDE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDL3OUTSIDE_Lookback( void ); + + +/* + * TA_CDL3STARSINSOUTH - Three Stars In The South + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDL3STARSINSOUTH( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDL3STARSINSOUTH( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDL3STARSINSOUTH_Lookback( void ); + + +/* + * TA_CDL3WHITESOLDIERS - Three Advancing White Soldiers + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDL3WHITESOLDIERS( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDL3WHITESOLDIERS( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDL3WHITESOLDIERS_Lookback( void ); + + +/* + * TA_CDLABANDONEDBABY - Abandoned Baby + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +TA_RetCode TA_CDLABANDONEDBABY( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLABANDONEDBABY( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLABANDONEDBABY_Lookback( double optInPenetration ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_CDLADVANCEBLOCK - Advance Block + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLADVANCEBLOCK( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLADVANCEBLOCK( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLADVANCEBLOCK_Lookback( void ); + + +/* + * TA_CDLBELTHOLD - Belt-hold + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLBELTHOLD( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLBELTHOLD( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLBELTHOLD_Lookback( void ); + + +/* + * TA_CDLBREAKAWAY - Breakaway + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLBREAKAWAY( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLBREAKAWAY( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLBREAKAWAY_Lookback( void ); + + +/* + * TA_CDLCLOSINGMARUBOZU - Closing Marubozu + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLCLOSINGMARUBOZU( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLCLOSINGMARUBOZU( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLCLOSINGMARUBOZU_Lookback( void ); + + +/* + * TA_CDLCONCEALBABYSWALL - Concealing Baby Swallow + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLCONCEALBABYSWALL( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLCONCEALBABYSWALL( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLCONCEALBABYSWALL_Lookback( void ); + + +/* + * TA_CDLCOUNTERATTACK - Counterattack + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLCOUNTERATTACK( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLCOUNTERATTACK( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLCOUNTERATTACK_Lookback( void ); + + +/* + * TA_CDLDARKCLOUDCOVER - Dark Cloud Cover + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +TA_RetCode TA_CDLDARKCLOUDCOVER( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLDARKCLOUDCOVER( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLDARKCLOUDCOVER_Lookback( double optInPenetration ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_CDLDOJI - Doji + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLDOJI( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLDOJI( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLDOJI_Lookback( void ); + + +/* + * TA_CDLDOJISTAR - Doji Star + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLDOJISTAR( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLDOJISTAR( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLDOJISTAR_Lookback( void ); + + +/* + * TA_CDLDRAGONFLYDOJI - Dragonfly Doji + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLDRAGONFLYDOJI( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLDRAGONFLYDOJI( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLDRAGONFLYDOJI_Lookback( void ); + + +/* + * TA_CDLENGULFING - Engulfing Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLENGULFING( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLENGULFING( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLENGULFING_Lookback( void ); + + +/* + * TA_CDLEVENINGDOJISTAR - Evening Doji Star + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +TA_RetCode TA_CDLEVENINGDOJISTAR( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLEVENINGDOJISTAR( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLEVENINGDOJISTAR_Lookback( double optInPenetration ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_CDLEVENINGSTAR - Evening Star + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +TA_RetCode TA_CDLEVENINGSTAR( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLEVENINGSTAR( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLEVENINGSTAR_Lookback( double optInPenetration ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_CDLGAPSIDESIDEWHITE - Up/Down-gap side-by-side white lines + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLGAPSIDESIDEWHITE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLGAPSIDESIDEWHITE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLGAPSIDESIDEWHITE_Lookback( void ); + + +/* + * TA_CDLGRAVESTONEDOJI - Gravestone Doji + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLGRAVESTONEDOJI( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLGRAVESTONEDOJI( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLGRAVESTONEDOJI_Lookback( void ); + + +/* + * TA_CDLHAMMER - Hammer + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLHAMMER( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLHAMMER( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLHAMMER_Lookback( void ); + + +/* + * TA_CDLHANGINGMAN - Hanging Man + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLHANGINGMAN( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLHANGINGMAN( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLHANGINGMAN_Lookback( void ); + + +/* + * TA_CDLHARAMI - Harami Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLHARAMI( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLHARAMI( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLHARAMI_Lookback( void ); + + +/* + * TA_CDLHARAMICROSS - Harami Cross Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLHARAMICROSS( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLHARAMICROSS( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLHARAMICROSS_Lookback( void ); + + +/* + * TA_CDLHIGHWAVE - High-Wave Candle + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLHIGHWAVE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLHIGHWAVE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLHIGHWAVE_Lookback( void ); + + +/* + * TA_CDLHIKKAKE - Hikkake Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLHIKKAKE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLHIKKAKE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLHIKKAKE_Lookback( void ); + + +/* + * TA_CDLHIKKAKEMOD - Modified Hikkake Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLHIKKAKEMOD( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLHIKKAKEMOD( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLHIKKAKEMOD_Lookback( void ); + + +/* + * TA_CDLHOMINGPIGEON - Homing Pigeon + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLHOMINGPIGEON( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLHOMINGPIGEON( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLHOMINGPIGEON_Lookback( void ); + + +/* + * TA_CDLIDENTICAL3CROWS - Identical Three Crows + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLIDENTICAL3CROWS( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLIDENTICAL3CROWS( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLIDENTICAL3CROWS_Lookback( void ); + + +/* + * TA_CDLINNECK - In-Neck Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLINNECK( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLINNECK( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLINNECK_Lookback( void ); + + +/* + * TA_CDLINVERTEDHAMMER - Inverted Hammer + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLINVERTEDHAMMER( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLINVERTEDHAMMER( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLINVERTEDHAMMER_Lookback( void ); + + +/* + * TA_CDLKICKING - Kicking + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLKICKING( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLKICKING( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLKICKING_Lookback( void ); + + +/* + * TA_CDLKICKINGBYLENGTH - Kicking - bull/bear determined by the longer marubozu + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLKICKINGBYLENGTH( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLKICKINGBYLENGTH( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLKICKINGBYLENGTH_Lookback( void ); + + +/* + * TA_CDLLADDERBOTTOM - Ladder Bottom + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLLADDERBOTTOM( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLLADDERBOTTOM( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLLADDERBOTTOM_Lookback( void ); + + +/* + * TA_CDLLONGLEGGEDDOJI - Long Legged Doji + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLLONGLEGGEDDOJI( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLLONGLEGGEDDOJI( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLLONGLEGGEDDOJI_Lookback( void ); + + +/* + * TA_CDLLONGLINE - Long Line Candle + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLLONGLINE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLLONGLINE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLLONGLINE_Lookback( void ); + + +/* + * TA_CDLMARUBOZU - Marubozu + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLMARUBOZU( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLMARUBOZU( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLMARUBOZU_Lookback( void ); + + +/* + * TA_CDLMATCHINGLOW - Matching Low + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLMATCHINGLOW( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLMATCHINGLOW( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLMATCHINGLOW_Lookback( void ); + + +/* + * TA_CDLMATHOLD - Mat Hold + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +TA_RetCode TA_CDLMATHOLD( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLMATHOLD( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLMATHOLD_Lookback( double optInPenetration ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_CDLMORNINGDOJISTAR - Morning Doji Star + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +TA_RetCode TA_CDLMORNINGDOJISTAR( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLMORNINGDOJISTAR( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLMORNINGDOJISTAR_Lookback( double optInPenetration ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_CDLMORNINGSTAR - Morning Star + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +TA_RetCode TA_CDLMORNINGSTAR( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLMORNINGSTAR( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + double optInPenetration, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLMORNINGSTAR_Lookback( double optInPenetration ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_CDLONNECK - On-Neck Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLONNECK( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLONNECK( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLONNECK_Lookback( void ); + + +/* + * TA_CDLPIERCING - Piercing Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLPIERCING( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLPIERCING( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLPIERCING_Lookback( void ); + + +/* + * TA_CDLRICKSHAWMAN - Rickshaw Man + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLRICKSHAWMAN( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLRICKSHAWMAN( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLRICKSHAWMAN_Lookback( void ); + + +/* + * TA_CDLRISEFALL3METHODS - Rising/Falling Three Methods + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLRISEFALL3METHODS( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLRISEFALL3METHODS( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLRISEFALL3METHODS_Lookback( void ); + + +/* + * TA_CDLSEPARATINGLINES - Separating Lines + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLSEPARATINGLINES( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLSEPARATINGLINES( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLSEPARATINGLINES_Lookback( void ); + + +/* + * TA_CDLSHOOTINGSTAR - Shooting Star + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLSHOOTINGSTAR( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLSHOOTINGSTAR( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLSHOOTINGSTAR_Lookback( void ); + + +/* + * TA_CDLSHORTLINE - Short Line Candle + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLSHORTLINE( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLSHORTLINE( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLSHORTLINE_Lookback( void ); + + +/* + * TA_CDLSPINNINGTOP - Spinning Top + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLSPINNINGTOP( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLSPINNINGTOP( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLSPINNINGTOP_Lookback( void ); + + +/* + * TA_CDLSTALLEDPATTERN - Stalled Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLSTALLEDPATTERN( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLSTALLEDPATTERN( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLSTALLEDPATTERN_Lookback( void ); + + +/* + * TA_CDLSTICKSANDWICH - Stick Sandwich + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLSTICKSANDWICH( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLSTICKSANDWICH( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLSTICKSANDWICH_Lookback( void ); + + +/* + * TA_CDLTAKURI - Takuri (Dragonfly Doji with very long lower shadow) + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLTAKURI( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLTAKURI( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLTAKURI_Lookback( void ); + + +/* + * TA_CDLTASUKIGAP - Tasuki Gap + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLTASUKIGAP( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLTASUKIGAP( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLTASUKIGAP_Lookback( void ); + + +/* + * TA_CDLTHRUSTING - Thrusting Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLTHRUSTING( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLTHRUSTING( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLTHRUSTING_Lookback( void ); + + +/* + * TA_CDLTRISTAR - Tristar Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLTRISTAR( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLTRISTAR( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLTRISTAR_Lookback( void ); + + +/* + * TA_CDLUNIQUE3RIVER - Unique 3 River + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLUNIQUE3RIVER( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLUNIQUE3RIVER( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLUNIQUE3RIVER_Lookback( void ); + + +/* + * TA_CDLUPSIDEGAP2CROWS - Upside Gap Two Crows + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLUPSIDEGAP2CROWS( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLUPSIDEGAP2CROWS( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLUPSIDEGAP2CROWS_Lookback( void ); + + +/* + * TA_CDLXSIDEGAP3METHODS - Upside/Downside Gap Three Methods + * + * Input = Open, High, Low, Close + * Output = int + * + */ +TA_RetCode TA_CDLXSIDEGAP3METHODS( int startIdx, + int endIdx, + const double inOpen[], + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_CDLXSIDEGAP3METHODS( int startIdx, + int endIdx, + const float inOpen[], + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_CDLXSIDEGAP3METHODS_Lookback( void ); + + +/* + * TA_CEIL - Vector Ceil + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_CEIL( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_CEIL( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_CEIL_Lookback( void ); + + +/* + * TA_CMO - Chande Momentum Oscillator + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_CMO( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_CMO( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_CMO_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_CORREL - Pearson's Correlation Coefficient (r) + * + * Input = double, double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_CORREL( int startIdx, + int endIdx, + const double inReal0[], + const double inReal1[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_CORREL( int startIdx, + int endIdx, + const float inReal0[], + const float inReal1[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_CORREL_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_COS - Vector Trigonometric Cos + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_COS( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_COS( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_COS_Lookback( void ); + + +/* + * TA_COSH - Vector Trigonometric Cosh + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_COSH( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_COSH( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_COSH_Lookback( void ); + + +/* + * TA_DEMA - Double Exponential Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_DEMA( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_DEMA( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_DEMA_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_DIV - Vector Arithmetic Div + * + * Input = double, double + * Output = double + * + */ +TA_RetCode TA_DIV( int startIdx, + int endIdx, + const double inReal0[], + const double inReal1[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_DIV( int startIdx, + int endIdx, + const float inReal0[], + const float inReal1[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_DIV_Lookback( void ); + + +/* + * TA_DX - Directional Movement Index + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_DX( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_DX( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_DX_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_EMA - Exponential Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_EMA( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_EMA( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_EMA_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_EXP - Vector Arithmetic Exp + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_EXP( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_EXP( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_EXP_Lookback( void ); + + +/* + * TA_FLOOR - Vector Floor + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_FLOOR( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_FLOOR( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_FLOOR_Lookback( void ); + + +/* + * TA_HT_DCPERIOD - Hilbert Transform - Dominant Cycle Period + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_HT_DCPERIOD( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_HT_DCPERIOD( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_HT_DCPERIOD_Lookback( void ); + + +/* + * TA_HT_DCPHASE - Hilbert Transform - Dominant Cycle Phase + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_HT_DCPHASE( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_HT_DCPHASE( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_HT_DCPHASE_Lookback( void ); + + +/* + * TA_HT_PHASOR - Hilbert Transform - Phasor Components + * + * Input = double + * Output = double, double + * + */ +TA_RetCode TA_HT_PHASOR( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outInPhase[], + double outQuadrature[] ); + +TA_RetCode TA_S_HT_PHASOR( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outInPhase[], + double outQuadrature[] ); + +int TA_HT_PHASOR_Lookback( void ); + + +/* + * TA_HT_SINE - Hilbert Transform - SineWave + * + * Input = double + * Output = double, double + * + */ +TA_RetCode TA_HT_SINE( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outSine[], + double outLeadSine[] ); + +TA_RetCode TA_S_HT_SINE( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outSine[], + double outLeadSine[] ); + +int TA_HT_SINE_Lookback( void ); + + +/* + * TA_HT_TRENDLINE - Hilbert Transform - Instantaneous Trendline + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_HT_TRENDLINE( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_HT_TRENDLINE( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_HT_TRENDLINE_Lookback( void ); + + +/* + * TA_HT_TRENDMODE - Hilbert Transform - Trend vs Cycle Mode + * + * Input = double + * Output = int + * + */ +TA_RetCode TA_HT_TRENDMODE( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_HT_TRENDMODE( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_HT_TRENDMODE_Lookback( void ); + + +/* + * TA_KAMA - Kaufman Adaptive Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_KAMA( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_KAMA( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_KAMA_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_LINEARREG - Linear Regression + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_LINEARREG( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_LINEARREG( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_LINEARREG_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_LINEARREG_ANGLE - Linear Regression Angle + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_LINEARREG_ANGLE( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_LINEARREG_ANGLE( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_LINEARREG_ANGLE_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_LINEARREG_INTERCEPT - Linear Regression Intercept + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_LINEARREG_INTERCEPT( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_LINEARREG_INTERCEPT( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_LINEARREG_INTERCEPT_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_LINEARREG_SLOPE - Linear Regression Slope + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_LINEARREG_SLOPE( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_LINEARREG_SLOPE( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_LINEARREG_SLOPE_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_LN - Vector Log Natural + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_LN( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_LN( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_LN_Lookback( void ); + + +/* + * TA_LOG10 - Vector Log10 + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_LOG10( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_LOG10( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_LOG10_Lookback( void ); + + +/* + * TA_MA - Moving average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * optInMAType: + * Type of Moving Average + * + * + */ +TA_RetCode TA_MA( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MA( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MA_Lookback( int optInTimePeriod, /* From 1 to 100000 */ + TA_MAType optInMAType ); + +/* + * TA_MACD - Moving Average Convergence/Divergence + * + * Input = double + * Output = double, double, double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * optInSignalPeriod:(From 1 to 100000) + * Smoothing for the signal line (nb of period) + * + * + */ +TA_RetCode TA_MACD( int startIdx, + int endIdx, + const double inReal[], + int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + int optInSignalPeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outMACD[], + double outMACDSignal[], + double outMACDHist[] ); + +TA_RetCode TA_S_MACD( int startIdx, + int endIdx, + const float inReal[], + int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + int optInSignalPeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outMACD[], + double outMACDSignal[], + double outMACDHist[] ); + +int TA_MACD_Lookback( int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + int optInSignalPeriod ); /* From 1 to 100000 */ + + +/* + * TA_MACDEXT - MACD with controllable MA type + * + * Input = double + * Output = double, double, double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInFastMAType: + * Type of Moving Average for fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * optInSlowMAType: + * Type of Moving Average for slow MA + * + * optInSignalPeriod:(From 1 to 100000) + * Smoothing for the signal line (nb of period) + * + * optInSignalMAType: + * Type of Moving Average for signal line + * + * + */ +TA_RetCode TA_MACDEXT( int startIdx, + int endIdx, + const double inReal[], + int optInFastPeriod, /* From 2 to 100000 */ + TA_MAType optInFastMAType, + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInSlowMAType, + int optInSignalPeriod, /* From 1 to 100000 */ + TA_MAType optInSignalMAType, + int *outBegIdx, + int *outNBElement, + double outMACD[], + double outMACDSignal[], + double outMACDHist[] ); + +TA_RetCode TA_S_MACDEXT( int startIdx, + int endIdx, + const float inReal[], + int optInFastPeriod, /* From 2 to 100000 */ + TA_MAType optInFastMAType, + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInSlowMAType, + int optInSignalPeriod, /* From 1 to 100000 */ + TA_MAType optInSignalMAType, + int *outBegIdx, + int *outNBElement, + double outMACD[], + double outMACDSignal[], + double outMACDHist[] ); + +int TA_MACDEXT_Lookback( int optInFastPeriod, /* From 2 to 100000 */ + TA_MAType optInFastMAType, + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInSlowMAType, + int optInSignalPeriod, /* From 1 to 100000 */ + TA_MAType optInSignalMAType ); + +/* + * TA_MACDFIX - Moving Average Convergence/Divergence Fix 12/26 + * + * Input = double + * Output = double, double, double + * + * Optional Parameters + * ------------------- + * optInSignalPeriod:(From 1 to 100000) + * Smoothing for the signal line (nb of period) + * + * + */ +TA_RetCode TA_MACDFIX( int startIdx, + int endIdx, + const double inReal[], + int optInSignalPeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outMACD[], + double outMACDSignal[], + double outMACDHist[] ); + +TA_RetCode TA_S_MACDFIX( int startIdx, + int endIdx, + const float inReal[], + int optInSignalPeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outMACD[], + double outMACDSignal[], + double outMACDHist[] ); + +int TA_MACDFIX_Lookback( int optInSignalPeriod ); /* From 1 to 100000 */ + + +/* + * TA_MAMA - MESA Adaptive Moving Average + * + * Input = double + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInFastLimit:(From 0.01 to 0.99) + * Upper limit use in the adaptive algorithm + * + * optInSlowLimit:(From 0.01 to 0.99) + * Lower limit use in the adaptive algorithm + * + * + */ +TA_RetCode TA_MAMA( int startIdx, + int endIdx, + const double inReal[], + double optInFastLimit, /* From 0.01 to 0.99 */ + double optInSlowLimit, /* From 0.01 to 0.99 */ + int *outBegIdx, + int *outNBElement, + double outMAMA[], + double outFAMA[] ); + +TA_RetCode TA_S_MAMA( int startIdx, + int endIdx, + const float inReal[], + double optInFastLimit, /* From 0.01 to 0.99 */ + double optInSlowLimit, /* From 0.01 to 0.99 */ + int *outBegIdx, + int *outNBElement, + double outMAMA[], + double outFAMA[] ); + +int TA_MAMA_Lookback( double optInFastLimit, /* From 0.01 to 0.99 */ + double optInSlowLimit ); /* From 0.01 to 0.99 */ + + +/* + * TA_MAVP - Moving average with variable period + * + * Input = double, double + * Output = double + * + * Optional Parameters + * ------------------- + * optInMinPeriod:(From 2 to 100000) + * Value less than minimum will be changed to Minimum period + * + * optInMaxPeriod:(From 2 to 100000) + * Value higher than maximum will be changed to Maximum period + * + * optInMAType: + * Type of Moving Average + * + * + */ +TA_RetCode TA_MAVP( int startIdx, + int endIdx, + const double inReal[], + const double inPeriods[], + int optInMinPeriod, /* From 2 to 100000 */ + int optInMaxPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MAVP( int startIdx, + int endIdx, + const float inReal[], + const float inPeriods[], + int optInMinPeriod, /* From 2 to 100000 */ + int optInMaxPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MAVP_Lookback( int optInMinPeriod, /* From 2 to 100000 */ + int optInMaxPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType ); + +/* + * TA_MAX - Highest value over a specified period + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MAX( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MAX( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MAX_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MAXINDEX - Index of highest value over a specified period + * + * Input = double + * Output = int + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MAXINDEX( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_MAXINDEX( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_MAXINDEX_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MEDPRICE - Median Price + * + * Input = High, Low + * Output = double + * + */ +TA_RetCode TA_MEDPRICE( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MEDPRICE( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MEDPRICE_Lookback( void ); + + +/* + * TA_MFI - Money Flow Index + * + * Input = High, Low, Close, Volume + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MFI( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + const double inVolume[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MFI( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + const float inVolume[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MFI_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MIDPOINT - MidPoint over period + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MIDPOINT( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MIDPOINT( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MIDPOINT_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MIDPRICE - Midpoint Price over period + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MIDPRICE( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MIDPRICE( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MIDPRICE_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MIN - Lowest value over a specified period + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MIN( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MIN( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MIN_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MININDEX - Index of lowest value over a specified period + * + * Input = double + * Output = int + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MININDEX( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +TA_RetCode TA_S_MININDEX( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + int outInteger[] ); + +int TA_MININDEX_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MINMAX - Lowest and highest values over a specified period + * + * Input = double + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MINMAX( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outMin[], + double outMax[] ); + +TA_RetCode TA_S_MINMAX( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outMin[], + double outMax[] ); + +int TA_MINMAX_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MINMAXINDEX - Indexes of lowest and highest values over a specified period + * + * Input = double + * Output = int, int + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MINMAXINDEX( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + int outMinIdx[], + int outMaxIdx[] ); + +TA_RetCode TA_S_MINMAXINDEX( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + int outMinIdx[], + int outMaxIdx[] ); + +int TA_MINMAXINDEX_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_MINUS_DI - Minus Directional Indicator + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MINUS_DI( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MINUS_DI( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MINUS_DI_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_MINUS_DM - Minus Directional Movement + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MINUS_DM( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MINUS_DM( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MINUS_DM_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_MOM - Momentum + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_MOM( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MOM( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MOM_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_MULT - Vector Arithmetic Mult + * + * Input = double, double + * Output = double + * + */ +TA_RetCode TA_MULT( int startIdx, + int endIdx, + const double inReal0[], + const double inReal1[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_MULT( int startIdx, + int endIdx, + const float inReal0[], + const float inReal1[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_MULT_Lookback( void ); + + +/* + * TA_NATR - Normalized Average True Range + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_NATR( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_NATR( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_NATR_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_OBV - On Balance Volume + * + * Input = double, Volume + * Output = double + * + */ +TA_RetCode TA_OBV( int startIdx, + int endIdx, + const double inReal[], + const double inVolume[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_OBV( int startIdx, + int endIdx, + const float inReal[], + const float inVolume[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_OBV_Lookback( void ); + + +/* + * TA_PLUS_DI - Plus Directional Indicator + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_PLUS_DI( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_PLUS_DI( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_PLUS_DI_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_PLUS_DM - Plus Directional Movement + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_PLUS_DM( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_PLUS_DM( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_PLUS_DM_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_PPO - Percentage Price Oscillator + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * optInMAType: + * Type of Moving Average + * + * + */ +TA_RetCode TA_PPO( int startIdx, + int endIdx, + const double inReal[], + int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_PPO( int startIdx, + int endIdx, + const float inReal[], + int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType, + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_PPO_Lookback( int optInFastPeriod, /* From 2 to 100000 */ + int optInSlowPeriod, /* From 2 to 100000 */ + TA_MAType optInMAType ); + +/* + * TA_ROC - Rate of change : ((price/prevPrice)-1)*100 + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_ROC( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ROC( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ROC_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_ROCP - Rate of change Percentage: (price-prevPrice)/prevPrice + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_ROCP( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ROCP( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ROCP_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_ROCR - Rate of change ratio: (price/prevPrice) + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_ROCR( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ROCR( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ROCR_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_ROCR100 - Rate of change ratio 100 scale: (price/prevPrice)*100 + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_ROCR100( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ROCR100( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ROCR100_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_RSI - Relative Strength Index + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_RSI( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_RSI( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_RSI_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_SAR - Parabolic SAR + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInAcceleration:(From 0 to TA_REAL_MAX) + * Acceleration Factor used up to the Maximum value + * + * optInMaximum:(From 0 to TA_REAL_MAX) + * Acceleration Factor Maximum value + * + * + */ +TA_RetCode TA_SAR( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + double optInAcceleration, /* From 0 to TA_REAL_MAX */ + double optInMaximum, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_SAR( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + double optInAcceleration, /* From 0 to TA_REAL_MAX */ + double optInMaximum, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_SAR_Lookback( double optInAcceleration, /* From 0 to TA_REAL_MAX */ + double optInMaximum ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_SAREXT - Parabolic SAR - Extended + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInStartValue:(From TA_REAL_MIN to TA_REAL_MAX) + * Start value and direction. 0 for Auto, >0 for Long, <0 for Short + * + * optInOffsetOnReverse:(From 0 to TA_REAL_MAX) + * Percent offset added/removed to initial stop on short/long reversal + * + * optInAccelerationInitLong:(From 0 to TA_REAL_MAX) + * Acceleration Factor initial value for the Long direction + * + * optInAccelerationLong:(From 0 to TA_REAL_MAX) + * Acceleration Factor for the Long direction + * + * optInAccelerationMaxLong:(From 0 to TA_REAL_MAX) + * Acceleration Factor maximum value for the Long direction + * + * optInAccelerationInitShort:(From 0 to TA_REAL_MAX) + * Acceleration Factor initial value for the Short direction + * + * optInAccelerationShort:(From 0 to TA_REAL_MAX) + * Acceleration Factor for the Short direction + * + * optInAccelerationMaxShort:(From 0 to TA_REAL_MAX) + * Acceleration Factor maximum value for the Short direction + * + * + */ +TA_RetCode TA_SAREXT( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ + double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ + double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ + double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ + double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_SAREXT( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ + double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ + double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ + double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ + double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_SAREXT_Lookback( double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ + double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ + double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ + double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ + double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ + double optInAccelerationMaxShort ); /* From 0 to TA_REAL_MAX */ + + +/* + * TA_SIN - Vector Trigonometric Sin + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_SIN( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_SIN( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_SIN_Lookback( void ); + + +/* + * TA_SINH - Vector Trigonometric Sinh + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_SINH( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_SINH( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_SINH_Lookback( void ); + + +/* + * TA_SMA - Simple Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_SMA( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_SMA( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_SMA_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_SQRT - Vector Square Root + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_SQRT( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_SQRT( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_SQRT_Lookback( void ); + + +/* + * TA_STDDEV - Standard Deviation + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * optInNbDev:(From TA_REAL_MIN to TA_REAL_MAX) + * Nb of deviations + * + * + */ +TA_RetCode TA_STDDEV( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_STDDEV( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_STDDEV_Lookback( int optInTimePeriod, /* From 2 to 100000 */ + double optInNbDev ); /* From TA_REAL_MIN to TA_REAL_MAX */ + + +/* + * TA_STOCH - Stochastic + * + * Input = High, Low, Close + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInFastK_Period:(From 1 to 100000) + * Time period for building the Fast-K line + * + * optInSlowK_Period:(From 1 to 100000) + * Smoothing for making the Slow-K line. Usually set to 3 + * + * optInSlowK_MAType: + * Type of Moving Average for Slow-K + * + * optInSlowD_Period:(From 1 to 100000) + * Smoothing for making the Slow-D line + * + * optInSlowD_MAType: + * Type of Moving Average for Slow-D + * + * + */ +TA_RetCode TA_STOCH( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInFastK_Period, /* From 1 to 100000 */ + int optInSlowK_Period, /* From 1 to 100000 */ + TA_MAType optInSlowK_MAType, + int optInSlowD_Period, /* From 1 to 100000 */ + TA_MAType optInSlowD_MAType, + int *outBegIdx, + int *outNBElement, + double outSlowK[], + double outSlowD[] ); + +TA_RetCode TA_S_STOCH( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInFastK_Period, /* From 1 to 100000 */ + int optInSlowK_Period, /* From 1 to 100000 */ + TA_MAType optInSlowK_MAType, + int optInSlowD_Period, /* From 1 to 100000 */ + TA_MAType optInSlowD_MAType, + int *outBegIdx, + int *outNBElement, + double outSlowK[], + double outSlowD[] ); + +int TA_STOCH_Lookback( int optInFastK_Period, /* From 1 to 100000 */ + int optInSlowK_Period, /* From 1 to 100000 */ + TA_MAType optInSlowK_MAType, + int optInSlowD_Period, /* From 1 to 100000 */ + TA_MAType optInSlowD_MAType ); + +/* + * TA_STOCHF - Stochastic Fast + * + * Input = High, Low, Close + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInFastK_Period:(From 1 to 100000) + * Time period for building the Fast-K line + * + * optInFastD_Period:(From 1 to 100000) + * Smoothing for making the Fast-D line. Usually set to 3 + * + * optInFastD_MAType: + * Type of Moving Average for Fast-D + * + * + */ +TA_RetCode TA_STOCHF( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInFastK_Period, /* From 1 to 100000 */ + int optInFastD_Period, /* From 1 to 100000 */ + TA_MAType optInFastD_MAType, + int *outBegIdx, + int *outNBElement, + double outFastK[], + double outFastD[] ); + +TA_RetCode TA_S_STOCHF( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInFastK_Period, /* From 1 to 100000 */ + int optInFastD_Period, /* From 1 to 100000 */ + TA_MAType optInFastD_MAType, + int *outBegIdx, + int *outNBElement, + double outFastK[], + double outFastD[] ); + +int TA_STOCHF_Lookback( int optInFastK_Period, /* From 1 to 100000 */ + int optInFastD_Period, /* From 1 to 100000 */ + TA_MAType optInFastD_MAType ); + +/* + * TA_STOCHRSI - Stochastic Relative Strength Index + * + * Input = double + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * optInFastK_Period:(From 1 to 100000) + * Time period for building the Fast-K line + * + * optInFastD_Period:(From 1 to 100000) + * Smoothing for making the Fast-D line. Usually set to 3 + * + * optInFastD_MAType: + * Type of Moving Average for Fast-D + * + * + */ +TA_RetCode TA_STOCHRSI( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int optInFastK_Period, /* From 1 to 100000 */ + int optInFastD_Period, /* From 1 to 100000 */ + TA_MAType optInFastD_MAType, + int *outBegIdx, + int *outNBElement, + double outFastK[], + double outFastD[] ); + +TA_RetCode TA_S_STOCHRSI( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int optInFastK_Period, /* From 1 to 100000 */ + int optInFastD_Period, /* From 1 to 100000 */ + TA_MAType optInFastD_MAType, + int *outBegIdx, + int *outNBElement, + double outFastK[], + double outFastD[] ); + +int TA_STOCHRSI_Lookback( int optInTimePeriod, /* From 2 to 100000 */ + int optInFastK_Period, /* From 1 to 100000 */ + int optInFastD_Period, /* From 1 to 100000 */ + TA_MAType optInFastD_MAType ); + +/* + * TA_SUB - Vector Arithmetic Substraction + * + * Input = double, double + * Output = double + * + */ +TA_RetCode TA_SUB( int startIdx, + int endIdx, + const double inReal0[], + const double inReal1[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_SUB( int startIdx, + int endIdx, + const float inReal0[], + const float inReal1[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_SUB_Lookback( void ); + + +/* + * TA_SUM - Summation + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_SUM( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_SUM( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_SUM_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_T3 - Triple Exponential Moving Average (T3) + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * optInVFactor:(From 0 to 1) + * Volume Factor + * + * + */ +TA_RetCode TA_T3( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + double optInVFactor, /* From 0 to 1 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_T3( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + double optInVFactor, /* From 0 to 1 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_T3_Lookback( int optInTimePeriod, /* From 2 to 100000 */ + double optInVFactor ); /* From 0 to 1 */ + + +/* + * TA_TAN - Vector Trigonometric Tan + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_TAN( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_TAN( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_TAN_Lookback( void ); + + +/* + * TA_TANH - Vector Trigonometric Tanh + * + * Input = double + * Output = double + * + */ +TA_RetCode TA_TANH( int startIdx, + int endIdx, + const double inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_TANH( int startIdx, + int endIdx, + const float inReal[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_TANH_Lookback( void ); + + +/* + * TA_TEMA - Triple Exponential Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_TEMA( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_TEMA( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_TEMA_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_TRANGE - True Range + * + * Input = High, Low, Close + * Output = double + * + */ +TA_RetCode TA_TRANGE( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_TRANGE( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_TRANGE_Lookback( void ); + + +/* + * TA_TRIMA - Triangular Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_TRIMA( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_TRIMA( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_TRIMA_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_TRIX - 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_TRIX( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_TRIX( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_TRIX_Lookback( int optInTimePeriod ); /* From 1 to 100000 */ + + +/* + * TA_TSF - Time Series Forecast + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_TSF( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_TSF( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_TSF_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_TYPPRICE - Typical Price + * + * Input = High, Low, Close + * Output = double + * + */ +TA_RetCode TA_TYPPRICE( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_TYPPRICE( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_TYPPRICE_Lookback( void ); + + +/* + * TA_ULTOSC - Ultimate Oscillator + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod1:(From 1 to 100000) + * Number of bars for 1st period. + * + * optInTimePeriod2:(From 1 to 100000) + * Number of bars fro 2nd period + * + * optInTimePeriod3:(From 1 to 100000) + * Number of bars for 3rd period + * + * + */ +TA_RetCode TA_ULTOSC( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod1, /* From 1 to 100000 */ + int optInTimePeriod2, /* From 1 to 100000 */ + int optInTimePeriod3, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_ULTOSC( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod1, /* From 1 to 100000 */ + int optInTimePeriod2, /* From 1 to 100000 */ + int optInTimePeriod3, /* From 1 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_ULTOSC_Lookback( int optInTimePeriod1, /* From 1 to 100000 */ + int optInTimePeriod2, /* From 1 to 100000 */ + int optInTimePeriod3 ); /* From 1 to 100000 */ + + +/* + * TA_VAR - Variance + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * optInNbDev:(From TA_REAL_MIN to TA_REAL_MAX) + * Nb of deviations + * + * + */ +TA_RetCode TA_VAR( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_VAR( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 1 to 100000 */ + double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_VAR_Lookback( int optInTimePeriod, /* From 1 to 100000 */ + double optInNbDev ); /* From TA_REAL_MIN to TA_REAL_MAX */ + + +/* + * TA_WCLPRICE - Weighted Close Price + * + * Input = High, Low, Close + * Output = double + * + */ +TA_RetCode TA_WCLPRICE( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_WCLPRICE( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_WCLPRICE_Lookback( void ); + + +/* + * TA_WILLR - Williams' %R + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_WILLR( int startIdx, + int endIdx, + const double inHigh[], + const double inLow[], + const double inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_WILLR( int startIdx, + int endIdx, + const float inHigh[], + const float inLow[], + const float inClose[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_WILLR_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* + * TA_WMA - Weighted Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +TA_RetCode TA_WMA( int startIdx, + int endIdx, + const double inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +TA_RetCode TA_S_WMA( int startIdx, + int endIdx, + const float inReal[], + int optInTimePeriod, /* From 2 to 100000 */ + int *outBegIdx, + int *outNBElement, + double outReal[] ); + +int TA_WMA_Lookback( int optInTimePeriod ); /* From 2 to 100000 */ + + +/* Some TA functions takes a certain amount of input data + * before stabilizing and outputing meaningful data. This is + * a behavior pertaining to the algo of some TA functions and + * is not particular to the TA-Lib implementation. + * TA-Lib allows you to automatically strip off these unstabl + * data from your output and from any internal processing. + * (See documentation for more info) + * + * Examples: + * TA_SetUnstablePeriod( TA_FUNC_UNST_EMA, 30 ); + * Always strip off 30 price bar for the TA_EMA function. + * + * TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 30 ); + * Always strip off 30 price bar from ALL functions + * having an unstable period. + * + * See ta_defs.h for the enumeration TA_FuncUnstId + */ + +TA_RetCode TA_SetUnstablePeriod( TA_FuncUnstId id, + unsigned int unstablePeriod ); + +unsigned int TA_GetUnstablePeriod( TA_FuncUnstId id ); + +/* You can change slightly the behavior of the TA functions + * by requesting compatibiliy with some existing software. + * + * By default, the behavior is as close as the original + * author of the TA functions intend it to be. + * + * See ta_defs.h for the enumeration TA_Compatibility. + */ +TA_RetCode TA_SetCompatibility( TA_Compatibility value ); +TA_Compatibility TA_GetCompatibility( void ); + +/* Candlesticks struct and functions + * Because candlestick patterns are subjective, it is necessary + * to allow the user to specify what should be the meaning of + * 'long body', 'short shadows', etc. + */ + +/* Call TA_SetCandleSettings to set that when comparing a candle + * basing on settingType it must be compared with the average + * of the last avgPeriod candles' rangeType multiplied by factor. + * This setting is valid until TA_RestoreCandleDefaultSettings is called + */ +TA_RetCode TA_SetCandleSettings( TA_CandleSettingType settingType, + TA_RangeType rangeType, + int avgPeriod, + double factor ); + +/* Call TA_RestoreCandleDefaultSettings after using custom settings + * to restore the default settings for the specified settingType + */ +TA_RetCode TA_RestoreCandleDefaultSettings( TA_CandleSettingType settingType ); + +#ifdef __cplusplus +} +#endif + +#endif + +/***************/ +/* End of File */ +/***************/ + diff --git a/include/ta_libc.h b/include/ta_libc.h new file mode 100644 index 000000000..a2d95598f --- /dev/null +++ b/include/ta_libc.h @@ -0,0 +1,51 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TA_LIBC_H +#define TA_LIBC_H + +/* Includes all headers needed for using the ta-lib 'C' library. */ + +#ifndef TA_COMMON_H + #include "ta_common.h" +#endif + +#ifndef TA_FUNC_H + #include "ta_func.h" +#endif + +#ifndef TA_ABSTRACT_H + #include "ta_abstract.h" +#endif + +#endif + diff --git a/install-sh b/install-sh new file mode 100755 index 000000000..4fbbae7b7 --- /dev/null +++ b/install-sh @@ -0,0 +1,507 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-10-14.15 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +posix_glob= +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chmodcmd=$chmodprog +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= +dstarg= +no_target_directory= + +usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: +-c (ignored) +-d create directories instead of installing files. +-g GROUP $chgrpprog installed files to GROUP. +-m MODE $chmodprog installed files to MODE. +-o USER $chownprog installed files to USER. +-s $stripprog installed files. +-t DIRECTORY install into DIRECTORY. +-T report an error if DSTFILE is a directory. +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + shift + shift + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t) dstarg=$2 + shift + shift + continue;; + + -T) no_target_directory=true + shift + continue;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac +done + +if test $# -ne 0 && test -z "$dir_arg$dstarg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dstarg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dstarg" + shift # fnord + fi + shift # arg + dstarg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dstarg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix=/ ;; + -*) prefix=./ ;; + *) prefix= ;; + esac + + case $posix_glob in + '') + if (set -f) 2>/dev/null; then + posix_glob=true + else + posix_glob=false + fi ;; + esac + + oIFS=$IFS + IFS=/ + $posix_glob && set -f + set fnord $dstdir + shift + $posix_glob && set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \ + || { + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + if test -f "$dst"; then + $doit $rmcmd -f "$dst" 2>/dev/null \ + || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ + && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ + || { + echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + } || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/ltmain.sh b/ltmain.sh new file mode 100644 index 000000000..c715b5941 --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,6871 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +basename="s,^.*/,,g" + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +progname=`echo "$progpath" | $SED $basename` +modename="$progname" + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION="1.5.22 Debian 1.5.22-4" +TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes. +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +duplicate_deps=no +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $mkdir "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || { + $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 + exit $EXIT_FAILURE + } + fi + + $echo "X$my_tmpdir" | $Xsed +} + + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $echo $win32_libid_type +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case "$@ " in + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit $EXIT_FAILURE +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + + $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" + $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 + exit $EXIT_FAILURE + fi +} + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + my_status="" + + $show "${rm}r $my_gentop" + $run ${rm}r "$my_gentop" + $show "$mkdir $my_gentop" + $run $mkdir "$my_gentop" + my_status=$? + if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then + exit $my_status + fi + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` + my_xdir="$my_gentop/$my_xlib" + + $show "${rm}r $my_xdir" + $run ${rm}r "$my_xdir" + $show "$mkdir $my_xdir" + $run $mkdir "$my_xdir" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then + exit $exit_status + fi + case $host in + *-darwin*) + $show "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + if test -z "$run"; then + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` + darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` + if test -n "$darwin_arches"; then + darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + $show "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we have a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + lipo -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + ${rm}r unfat-$$ + cd "$darwin_orig_dir" + else + cd "$darwin_orig_dir" + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + fi # $run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + func_extract_archives_result="$my_oldobjs" +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +disable_libs=no + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + preserve_args="${preserve_args}=$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + $echo + $echo "Copyright (C) 2005 Free Software Foundation, Inc." + $echo "This is free software; see the source for copying conditions. There is NO" + $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit $? + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + done + exit $? + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + preserve_args="$preserve_args $arg" + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit $? + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) + prevopt="--tag" + prev=tag + preserve_args="$preserve_args --tag" + ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +case $disable_libs in +no) + ;; +shared) + build_libtool_libs=no + build_old_libs=yes + ;; +static) + build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` + ;; +esac + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$later $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, and some SunOS ksh mistreat backslash-escaping + # in scan sets (worked around with variable expansion), + # and furthermore cannot handle '|' '&' '(' ')' in scan sets + # at all, so we specify them separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` + case $qlibobj in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qlibobj="\"$qlibobj\"" ;; + esac + test "X$libobj" != "X$qlibobj" \ + && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$progpath" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo "$srcfile" > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` + case $qsrcfile in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qsrcfile="\"$qsrcfile\"" ;; + esac + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + fi + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + darwin_framework|darwin_framework_skip) + test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework|-arch|-isysroot) + case " $CC " in + *" ${arg} ${1} "* | *" ${arg} ${1} "*) + prev=darwin_framework_skip ;; + *) compiler_flags="$compiler_flags $arg" + prev=darwin_framework ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + notinst_path="$notinst_path $dir" + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + -model) + compile_command="$compile_command $arg" + compiler_flags="$compiler_flags $arg" + finalize_command="$finalize_command $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m* pass through architecture-specific compiler args for GCC + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -pg pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ + -t[45]*|-txscale*|@*) + + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then + exit $exit_status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + if eval $echo \"$deplib\" 2>/dev/null \ + | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $echo + $echo "*** Warning: Trying to link with static lib archive $deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because the file extensions .$libext of this argument makes me believe" + $echo "*** that it is just a static archive that I should not used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $absdir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes ; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; then + $echo "*** Warning: Linking the executable $output against the loadable module" + else + $echo "*** Warning: Linking the shared library $output against the loadable module" + fi + $echo "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | + $EGREP ": [^:]* bundle" >/dev/null ; then + $echo "** Warning, lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $echo + $echo "** And there doesn't seem to be a static archive available" + $echo "** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $echo + $echo "*** Warning: This system can not link to static lib archive $lib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $echo "*** But as you try to build a module library, libtool will still create " + $echo "*** a static module, that should work as long as the dlopening application" + $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$2" + number_minor="$3" + number_revision="$4" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` + deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for file magic test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name=`expr $a_deplib : '-l\(.*\)'` + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval $echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; then + $echo "*** Warning: inter-library dependencies are not supported in this platform." + else + $echo "*** Warning: inter-library dependencies are not known to be supported." + fi + $echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $echo + $echo "*** Warning: libtool could not satisfy all declared inter-library" + $echo "*** dependencies of module $libname. Therefore, libtool will create" + $echo "*** a static module, that should work as long as the dlopening" + $echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $echo "*** The inter-library dependencies that have been dropped here will be" + $echo "*** automatically added whenever a program is linked with this library" + $echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $echo + $echo "*** Since this library must not contain undefined symbols," + $echo "*** because either the platform does not support them or" + $echo "*** it was explicitly requested with -no-undefined," + $echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$echo "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$output_la-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadable object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + else + $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +" + + case $host in + *cygwin* | *mingw* ) + $echo >> "$output_objdir/$dlsyms" "\ +/* DATA imports from DLLs on WIN32 can't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs */ +struct { +" + ;; + * ) + $echo >> "$output_objdir/$dlsyms" "\ +const struct { +" + ;; + esac + + + $echo >> "$output_objdir/$dlsyms" "\ + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + case $host in + *cygwin* | *mingw* ) + if test -f "$output_objdir/${outputname}.def" ; then + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + else + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + fi + ;; + * ) + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + esac + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + exit_status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $exit_status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + output_name=`basename $output` + output_path=`dirname $output` + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +/* -DDEBUG is fairly common in CFLAGS. */ +#undef DEBUG +#if defined DEBUGWRAPPER +# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) +#else +# define DEBUG(format, ...) +#endif + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +const char * base_name (const char *name); +char * find_executable(const char *wrapper); +int check_executable(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup (base_name (argv[0])); + DEBUG("(main) argv[0] : %s\n",argv[0]); + DEBUG("(main) program_name : %s\n",program_name); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = find_executable(argv[0]); + if (newargz[1] == NULL) + lt_fatal("Couldn't find %s", argv[0]); + DEBUG("(main) found exe at : %s\n",newargz[1]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; + + for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" + return 127; +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char)name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable(const char * path) +{ + struct stat st; + + DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) && + ( + /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ +#if defined (S_IXOTH) + ((st.st_mode & S_IXOTH) == S_IXOTH) || +#endif +#if defined (S_IXGRP) + ((st.st_mode & S_IXGRP) == S_IXGRP) || +#endif + ((st.st_mode & S_IXUSR) == S_IXUSR)) + ) + return 1; + else + return 0; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise */ +char * +find_executable (const char* wrapper) +{ + int has_slash = 0; + const char* p; + const char* p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char* concat_name; + + DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char* path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char* q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR(*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen(tmp); + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen(tmp); + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + return NULL; +} + +char * +strendzap(char *str, const char *pat) +{ + size_t len, patlen; + + assert(str != NULL); + assert(pat != NULL); + + len = strlen(str); + patlen = strlen(pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + $echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit $EXIT_FAILURE + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + $echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "copying selected object files to avoid basename conflicts..." + + if test -z "$gentop"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$gentop"; then + exit $exit_status + fi + fi + + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + counter=`expr $counter + 1` + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + $run ln "$obj" "$gentop/$newobj" || + $run cp "$obj" "$gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) prev=$arg ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo and FILE.exe exist: automatic-append-.exe + # behavior happens only for exec(3), not for open(2)! Also, sourcing + # `FILE.' does not work on cygwin managed mounts. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo and FILE.exe exist: automatic-append-.exe + # behavior happens only for exec(3), not for open(2)! Also, sourcing + # `FILE.' does not work on cygwin managed mounts. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir=`func_mktempdir` + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $echo "X----------------------------------------------------------------------" | $Xsed + $echo "Libraries have been installed in:" + for libdir in $libdirs; do + $echo " $libdir" + done + $echo + $echo "If you ever happen to want to link against installed libraries" + $echo "in a given directory, LIBDIR, you must either use libtool, and" + $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + $echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + $echo " during execution" + fi + if test -n "$runpath_var"; then + $echo " - add LIBDIR to the \`$runpath_var' environment variable" + $echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $echo + $echo "See any operating system documentation about shared libraries for" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit $EXIT_SUCCESS + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $? + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +disable_libs=shared +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +disable_libs=static +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/missing b/missing new file mode 100755 index 000000000..1c8ff7049 --- /dev/null +++ b/missing @@ -0,0 +1,367 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2006-05-10.23 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case $1 in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $1 in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 000000000..12bc5b63a --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,14 @@ +AUTOMAKE_OPTIONS = foreign 1.4 +SUBDIRS = ta_abstract ta_common ta_func + +lib_LTLIBRARIES = libta_lib.la + +libta_lib_la_SOURCES = + +libta_lib_la_LIBADD = \ + ta_abstract/libta_abstract.la \ + ta_func/libta_func.la \ + ta_common/libta_common.la + +libta_lib_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) + diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 000000000..489b44a4b --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,560 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/ta_config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +libta_lib_la_DEPENDENCIES = ta_abstract/libta_abstract.la \ + ta_func/libta_func.la ta_common/libta_common.la +am_libta_lib_la_OBJECTS = +libta_lib_la_OBJECTS = $(am_libta_lib_la_OBJECTS) +libta_lib_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libta_lib_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir)/include@am__isrc@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libta_lib_la_SOURCES) +DIST_SOURCES = $(libta_lib_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TALIB_LIBRARY_VERSION = @TALIB_LIBRARY_VERSION@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign 1.4 +SUBDIRS = ta_abstract ta_common ta_func +lib_LTLIBRARIES = libta_lib.la +libta_lib_la_SOURCES = +libta_lib_la_LIBADD = \ + ta_abstract/libta_abstract.la \ + ta_func/libta_func.la \ + ta_common/libta_common.la + +libta_lib_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libta_lib.la: $(libta_lib_la_OBJECTS) $(libta_lib_la_DEPENDENCIES) + $(libta_lib_la_LINK) -rpath $(libdir) $(libta_lib_la_OBJECTS) $(libta_lib_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-libLTLIBRARIES + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/ta_abstract/Makefile.am b/src/ta_abstract/Makefile.am new file mode 100644 index 000000000..cba69bbc3 --- /dev/null +++ b/src/ta_abstract/Makefile.am @@ -0,0 +1,49 @@ + +noinst_LTLIBRARIES = libta_abstract.la libta_abstract_gc.la + +libta_abstract_la_SOURCES = ta_group_idx.c \ + ta_def_ui.c \ + ta_abstract.c \ + ta_func_api.c \ + frames/ta_frame.c \ + tables/table_a.c \ + tables/table_b.c \ + tables/table_c.c \ + tables/table_d.c \ + tables/table_e.c \ + tables/table_f.c \ + tables/table_g.c \ + tables/table_h.c \ + tables/table_i.c \ + tables/table_j.c \ + tables/table_k.c \ + tables/table_l.c \ + tables/table_m.c \ + tables/table_n.c \ + tables/table_o.c \ + tables/table_p.c \ + tables/table_q.c \ + tables/table_r.c \ + tables/table_s.c \ + tables/table_t.c \ + tables/table_u.c \ + tables/table_v.c \ + tables/table_w.c \ + tables/table_x.c \ + tables/table_y.c \ + tables/table_z.c + +libta_abstract_gc_la_SOURCES = $(libta_abstract_la_SOURCES) + +libta_abstract_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) +libta_abstract_gc_la_LDFLAGS = $(libta_abstract_la_LDFLAGS) + +libta_abstract_la_CPPFLAGS = -I../ta_common/ -Iframes/ + +# The 'gc' version is a minimal version used to just to compile gen_code +libta_abstract_gc_la_CPPFLAGS = -DTA_GEN_CODE $(libta_abstract_la_CPPFLAGS) + +libta_abstractdir=$(includedir)/ta-lib/ +libta_abstract_HEADERS = ../../include/ta_defs.h \ + ../../include/ta_libc.h \ + ../../include/ta_abstract.h diff --git a/src/ta_abstract/Makefile.in b/src/ta_abstract/Makefile.in new file mode 100644 index 000000000..b4a337e4d --- /dev/null +++ b/src/ta_abstract/Makefile.in @@ -0,0 +1,1061 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/ta_abstract +DIST_COMMON = $(libta_abstract_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/ta_config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libta_abstract_la_LIBADD = +am_libta_abstract_la_OBJECTS = libta_abstract_la-ta_group_idx.lo \ + libta_abstract_la-ta_def_ui.lo \ + libta_abstract_la-ta_abstract.lo \ + libta_abstract_la-ta_func_api.lo libta_abstract_la-ta_frame.lo \ + libta_abstract_la-table_a.lo libta_abstract_la-table_b.lo \ + libta_abstract_la-table_c.lo libta_abstract_la-table_d.lo \ + libta_abstract_la-table_e.lo libta_abstract_la-table_f.lo \ + libta_abstract_la-table_g.lo libta_abstract_la-table_h.lo \ + libta_abstract_la-table_i.lo libta_abstract_la-table_j.lo \ + libta_abstract_la-table_k.lo libta_abstract_la-table_l.lo \ + libta_abstract_la-table_m.lo libta_abstract_la-table_n.lo \ + libta_abstract_la-table_o.lo libta_abstract_la-table_p.lo \ + libta_abstract_la-table_q.lo libta_abstract_la-table_r.lo \ + libta_abstract_la-table_s.lo libta_abstract_la-table_t.lo \ + libta_abstract_la-table_u.lo libta_abstract_la-table_v.lo \ + libta_abstract_la-table_w.lo libta_abstract_la-table_x.lo \ + libta_abstract_la-table_y.lo libta_abstract_la-table_z.lo +libta_abstract_la_OBJECTS = $(am_libta_abstract_la_OBJECTS) +libta_abstract_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libta_abstract_la_LDFLAGS) $(LDFLAGS) -o $@ +libta_abstract_gc_la_LIBADD = +am__objects_1 = libta_abstract_gc_la-ta_group_idx.lo \ + libta_abstract_gc_la-ta_def_ui.lo \ + libta_abstract_gc_la-ta_abstract.lo \ + libta_abstract_gc_la-ta_func_api.lo \ + libta_abstract_gc_la-ta_frame.lo \ + libta_abstract_gc_la-table_a.lo \ + libta_abstract_gc_la-table_b.lo \ + libta_abstract_gc_la-table_c.lo \ + libta_abstract_gc_la-table_d.lo \ + libta_abstract_gc_la-table_e.lo \ + libta_abstract_gc_la-table_f.lo \ + libta_abstract_gc_la-table_g.lo \ + libta_abstract_gc_la-table_h.lo \ + libta_abstract_gc_la-table_i.lo \ + libta_abstract_gc_la-table_j.lo \ + libta_abstract_gc_la-table_k.lo \ + libta_abstract_gc_la-table_l.lo \ + libta_abstract_gc_la-table_m.lo \ + libta_abstract_gc_la-table_n.lo \ + libta_abstract_gc_la-table_o.lo \ + libta_abstract_gc_la-table_p.lo \ + libta_abstract_gc_la-table_q.lo \ + libta_abstract_gc_la-table_r.lo \ + libta_abstract_gc_la-table_s.lo \ + libta_abstract_gc_la-table_t.lo \ + libta_abstract_gc_la-table_u.lo \ + libta_abstract_gc_la-table_v.lo \ + libta_abstract_gc_la-table_w.lo \ + libta_abstract_gc_la-table_x.lo \ + libta_abstract_gc_la-table_y.lo \ + libta_abstract_gc_la-table_z.lo +am_libta_abstract_gc_la_OBJECTS = $(am__objects_1) +libta_abstract_gc_la_OBJECTS = $(am_libta_abstract_gc_la_OBJECTS) +libta_abstract_gc_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libta_abstract_gc_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir)/include@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libta_abstract_la_SOURCES) $(libta_abstract_gc_la_SOURCES) +DIST_SOURCES = $(libta_abstract_la_SOURCES) \ + $(libta_abstract_gc_la_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libta_abstractdir)" +libta_abstractHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(libta_abstract_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TALIB_LIBRARY_VERSION = @TALIB_LIBRARY_VERSION@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libta_abstract.la libta_abstract_gc.la +libta_abstract_la_SOURCES = ta_group_idx.c \ + ta_def_ui.c \ + ta_abstract.c \ + ta_func_api.c \ + frames/ta_frame.c \ + tables/table_a.c \ + tables/table_b.c \ + tables/table_c.c \ + tables/table_d.c \ + tables/table_e.c \ + tables/table_f.c \ + tables/table_g.c \ + tables/table_h.c \ + tables/table_i.c \ + tables/table_j.c \ + tables/table_k.c \ + tables/table_l.c \ + tables/table_m.c \ + tables/table_n.c \ + tables/table_o.c \ + tables/table_p.c \ + tables/table_q.c \ + tables/table_r.c \ + tables/table_s.c \ + tables/table_t.c \ + tables/table_u.c \ + tables/table_v.c \ + tables/table_w.c \ + tables/table_x.c \ + tables/table_y.c \ + tables/table_z.c + +libta_abstract_gc_la_SOURCES = $(libta_abstract_la_SOURCES) +libta_abstract_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) +libta_abstract_gc_la_LDFLAGS = $(libta_abstract_la_LDFLAGS) +libta_abstract_la_CPPFLAGS = -I../ta_common/ -Iframes/ + +# The 'gc' version is a minimal version used to just to compile gen_code +libta_abstract_gc_la_CPPFLAGS = -DTA_GEN_CODE $(libta_abstract_la_CPPFLAGS) +libta_abstractdir = $(includedir)/ta-lib/ +libta_abstract_HEADERS = ../../include/ta_defs.h \ + ../../include/ta_libc.h \ + ../../include/ta_abstract.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ta_abstract/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/ta_abstract/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libta_abstract.la: $(libta_abstract_la_OBJECTS) $(libta_abstract_la_DEPENDENCIES) + $(libta_abstract_la_LINK) $(libta_abstract_la_OBJECTS) $(libta_abstract_la_LIBADD) $(LIBS) +libta_abstract_gc.la: $(libta_abstract_gc_la_OBJECTS) $(libta_abstract_gc_la_DEPENDENCIES) + $(libta_abstract_gc_la_LINK) $(libta_abstract_gc_la_OBJECTS) $(libta_abstract_gc_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-ta_abstract.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-ta_def_ui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-ta_frame.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-ta_func_api.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-ta_group_idx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_a.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_b.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_e.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_g.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_h.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_i.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_j.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_m.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_n.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_o.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_p.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_q.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_r.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_t.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_u.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_v.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_w.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_y.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_gc_la-table_z.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-ta_abstract.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-ta_def_ui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-ta_frame.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-ta_func_api.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-ta_group_idx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_a.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_b.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_e.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_g.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_h.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_i.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_j.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_m.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_n.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_o.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_p.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_q.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_r.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_t.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_u.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_v.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_w.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_y.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libta_abstract_la-table_z.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libta_abstract_la-ta_group_idx.lo: ta_group_idx.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-ta_group_idx.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-ta_group_idx.Tpo -c -o libta_abstract_la-ta_group_idx.lo `test -f 'ta_group_idx.c' || echo '$(srcdir)/'`ta_group_idx.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-ta_group_idx.Tpo $(DEPDIR)/libta_abstract_la-ta_group_idx.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ta_group_idx.c' object='libta_abstract_la-ta_group_idx.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-ta_group_idx.lo `test -f 'ta_group_idx.c' || echo '$(srcdir)/'`ta_group_idx.c + +libta_abstract_la-ta_def_ui.lo: ta_def_ui.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-ta_def_ui.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-ta_def_ui.Tpo -c -o libta_abstract_la-ta_def_ui.lo `test -f 'ta_def_ui.c' || echo '$(srcdir)/'`ta_def_ui.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-ta_def_ui.Tpo $(DEPDIR)/libta_abstract_la-ta_def_ui.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ta_def_ui.c' object='libta_abstract_la-ta_def_ui.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-ta_def_ui.lo `test -f 'ta_def_ui.c' || echo '$(srcdir)/'`ta_def_ui.c + +libta_abstract_la-ta_abstract.lo: ta_abstract.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-ta_abstract.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-ta_abstract.Tpo -c -o libta_abstract_la-ta_abstract.lo `test -f 'ta_abstract.c' || echo '$(srcdir)/'`ta_abstract.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-ta_abstract.Tpo $(DEPDIR)/libta_abstract_la-ta_abstract.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ta_abstract.c' object='libta_abstract_la-ta_abstract.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-ta_abstract.lo `test -f 'ta_abstract.c' || echo '$(srcdir)/'`ta_abstract.c + +libta_abstract_la-ta_func_api.lo: ta_func_api.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-ta_func_api.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-ta_func_api.Tpo -c -o libta_abstract_la-ta_func_api.lo `test -f 'ta_func_api.c' || echo '$(srcdir)/'`ta_func_api.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-ta_func_api.Tpo $(DEPDIR)/libta_abstract_la-ta_func_api.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ta_func_api.c' object='libta_abstract_la-ta_func_api.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-ta_func_api.lo `test -f 'ta_func_api.c' || echo '$(srcdir)/'`ta_func_api.c + +libta_abstract_la-ta_frame.lo: frames/ta_frame.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-ta_frame.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-ta_frame.Tpo -c -o libta_abstract_la-ta_frame.lo `test -f 'frames/ta_frame.c' || echo '$(srcdir)/'`frames/ta_frame.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-ta_frame.Tpo $(DEPDIR)/libta_abstract_la-ta_frame.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='frames/ta_frame.c' object='libta_abstract_la-ta_frame.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-ta_frame.lo `test -f 'frames/ta_frame.c' || echo '$(srcdir)/'`frames/ta_frame.c + +libta_abstract_la-table_a.lo: tables/table_a.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_a.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_a.Tpo -c -o libta_abstract_la-table_a.lo `test -f 'tables/table_a.c' || echo '$(srcdir)/'`tables/table_a.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_a.Tpo $(DEPDIR)/libta_abstract_la-table_a.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_a.c' object='libta_abstract_la-table_a.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_a.lo `test -f 'tables/table_a.c' || echo '$(srcdir)/'`tables/table_a.c + +libta_abstract_la-table_b.lo: tables/table_b.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_b.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_b.Tpo -c -o libta_abstract_la-table_b.lo `test -f 'tables/table_b.c' || echo '$(srcdir)/'`tables/table_b.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_b.Tpo $(DEPDIR)/libta_abstract_la-table_b.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_b.c' object='libta_abstract_la-table_b.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_b.lo `test -f 'tables/table_b.c' || echo '$(srcdir)/'`tables/table_b.c + +libta_abstract_la-table_c.lo: tables/table_c.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_c.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_c.Tpo -c -o libta_abstract_la-table_c.lo `test -f 'tables/table_c.c' || echo '$(srcdir)/'`tables/table_c.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_c.Tpo $(DEPDIR)/libta_abstract_la-table_c.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_c.c' object='libta_abstract_la-table_c.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_c.lo `test -f 'tables/table_c.c' || echo '$(srcdir)/'`tables/table_c.c + +libta_abstract_la-table_d.lo: tables/table_d.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_d.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_d.Tpo -c -o libta_abstract_la-table_d.lo `test -f 'tables/table_d.c' || echo '$(srcdir)/'`tables/table_d.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_d.Tpo $(DEPDIR)/libta_abstract_la-table_d.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_d.c' object='libta_abstract_la-table_d.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_d.lo `test -f 'tables/table_d.c' || echo '$(srcdir)/'`tables/table_d.c + +libta_abstract_la-table_e.lo: tables/table_e.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_e.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_e.Tpo -c -o libta_abstract_la-table_e.lo `test -f 'tables/table_e.c' || echo '$(srcdir)/'`tables/table_e.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_e.Tpo $(DEPDIR)/libta_abstract_la-table_e.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_e.c' object='libta_abstract_la-table_e.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_e.lo `test -f 'tables/table_e.c' || echo '$(srcdir)/'`tables/table_e.c + +libta_abstract_la-table_f.lo: tables/table_f.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_f.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_f.Tpo -c -o libta_abstract_la-table_f.lo `test -f 'tables/table_f.c' || echo '$(srcdir)/'`tables/table_f.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_f.Tpo $(DEPDIR)/libta_abstract_la-table_f.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_f.c' object='libta_abstract_la-table_f.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_f.lo `test -f 'tables/table_f.c' || echo '$(srcdir)/'`tables/table_f.c + +libta_abstract_la-table_g.lo: tables/table_g.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_g.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_g.Tpo -c -o libta_abstract_la-table_g.lo `test -f 'tables/table_g.c' || echo '$(srcdir)/'`tables/table_g.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_g.Tpo $(DEPDIR)/libta_abstract_la-table_g.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_g.c' object='libta_abstract_la-table_g.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_g.lo `test -f 'tables/table_g.c' || echo '$(srcdir)/'`tables/table_g.c + +libta_abstract_la-table_h.lo: tables/table_h.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_h.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_h.Tpo -c -o libta_abstract_la-table_h.lo `test -f 'tables/table_h.c' || echo '$(srcdir)/'`tables/table_h.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_h.Tpo $(DEPDIR)/libta_abstract_la-table_h.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_h.c' object='libta_abstract_la-table_h.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_h.lo `test -f 'tables/table_h.c' || echo '$(srcdir)/'`tables/table_h.c + +libta_abstract_la-table_i.lo: tables/table_i.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_i.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_i.Tpo -c -o libta_abstract_la-table_i.lo `test -f 'tables/table_i.c' || echo '$(srcdir)/'`tables/table_i.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_i.Tpo $(DEPDIR)/libta_abstract_la-table_i.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_i.c' object='libta_abstract_la-table_i.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_i.lo `test -f 'tables/table_i.c' || echo '$(srcdir)/'`tables/table_i.c + +libta_abstract_la-table_j.lo: tables/table_j.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_j.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_j.Tpo -c -o libta_abstract_la-table_j.lo `test -f 'tables/table_j.c' || echo '$(srcdir)/'`tables/table_j.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_j.Tpo $(DEPDIR)/libta_abstract_la-table_j.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_j.c' object='libta_abstract_la-table_j.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_j.lo `test -f 'tables/table_j.c' || echo '$(srcdir)/'`tables/table_j.c + +libta_abstract_la-table_k.lo: tables/table_k.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_k.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_k.Tpo -c -o libta_abstract_la-table_k.lo `test -f 'tables/table_k.c' || echo '$(srcdir)/'`tables/table_k.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_k.Tpo $(DEPDIR)/libta_abstract_la-table_k.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_k.c' object='libta_abstract_la-table_k.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_k.lo `test -f 'tables/table_k.c' || echo '$(srcdir)/'`tables/table_k.c + +libta_abstract_la-table_l.lo: tables/table_l.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_l.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_l.Tpo -c -o libta_abstract_la-table_l.lo `test -f 'tables/table_l.c' || echo '$(srcdir)/'`tables/table_l.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_l.Tpo $(DEPDIR)/libta_abstract_la-table_l.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_l.c' object='libta_abstract_la-table_l.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_l.lo `test -f 'tables/table_l.c' || echo '$(srcdir)/'`tables/table_l.c + +libta_abstract_la-table_m.lo: tables/table_m.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_m.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_m.Tpo -c -o libta_abstract_la-table_m.lo `test -f 'tables/table_m.c' || echo '$(srcdir)/'`tables/table_m.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_m.Tpo $(DEPDIR)/libta_abstract_la-table_m.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_m.c' object='libta_abstract_la-table_m.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_m.lo `test -f 'tables/table_m.c' || echo '$(srcdir)/'`tables/table_m.c + +libta_abstract_la-table_n.lo: tables/table_n.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_n.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_n.Tpo -c -o libta_abstract_la-table_n.lo `test -f 'tables/table_n.c' || echo '$(srcdir)/'`tables/table_n.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_n.Tpo $(DEPDIR)/libta_abstract_la-table_n.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_n.c' object='libta_abstract_la-table_n.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_n.lo `test -f 'tables/table_n.c' || echo '$(srcdir)/'`tables/table_n.c + +libta_abstract_la-table_o.lo: tables/table_o.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_o.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_o.Tpo -c -o libta_abstract_la-table_o.lo `test -f 'tables/table_o.c' || echo '$(srcdir)/'`tables/table_o.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_o.Tpo $(DEPDIR)/libta_abstract_la-table_o.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_o.c' object='libta_abstract_la-table_o.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_o.lo `test -f 'tables/table_o.c' || echo '$(srcdir)/'`tables/table_o.c + +libta_abstract_la-table_p.lo: tables/table_p.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_p.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_p.Tpo -c -o libta_abstract_la-table_p.lo `test -f 'tables/table_p.c' || echo '$(srcdir)/'`tables/table_p.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_p.Tpo $(DEPDIR)/libta_abstract_la-table_p.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_p.c' object='libta_abstract_la-table_p.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_p.lo `test -f 'tables/table_p.c' || echo '$(srcdir)/'`tables/table_p.c + +libta_abstract_la-table_q.lo: tables/table_q.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_q.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_q.Tpo -c -o libta_abstract_la-table_q.lo `test -f 'tables/table_q.c' || echo '$(srcdir)/'`tables/table_q.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_q.Tpo $(DEPDIR)/libta_abstract_la-table_q.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_q.c' object='libta_abstract_la-table_q.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_q.lo `test -f 'tables/table_q.c' || echo '$(srcdir)/'`tables/table_q.c + +libta_abstract_la-table_r.lo: tables/table_r.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_r.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_r.Tpo -c -o libta_abstract_la-table_r.lo `test -f 'tables/table_r.c' || echo '$(srcdir)/'`tables/table_r.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_r.Tpo $(DEPDIR)/libta_abstract_la-table_r.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_r.c' object='libta_abstract_la-table_r.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_r.lo `test -f 'tables/table_r.c' || echo '$(srcdir)/'`tables/table_r.c + +libta_abstract_la-table_s.lo: tables/table_s.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_s.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_s.Tpo -c -o libta_abstract_la-table_s.lo `test -f 'tables/table_s.c' || echo '$(srcdir)/'`tables/table_s.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_s.Tpo $(DEPDIR)/libta_abstract_la-table_s.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_s.c' object='libta_abstract_la-table_s.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_s.lo `test -f 'tables/table_s.c' || echo '$(srcdir)/'`tables/table_s.c + +libta_abstract_la-table_t.lo: tables/table_t.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_t.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_t.Tpo -c -o libta_abstract_la-table_t.lo `test -f 'tables/table_t.c' || echo '$(srcdir)/'`tables/table_t.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_t.Tpo $(DEPDIR)/libta_abstract_la-table_t.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_t.c' object='libta_abstract_la-table_t.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_t.lo `test -f 'tables/table_t.c' || echo '$(srcdir)/'`tables/table_t.c + +libta_abstract_la-table_u.lo: tables/table_u.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_u.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_u.Tpo -c -o libta_abstract_la-table_u.lo `test -f 'tables/table_u.c' || echo '$(srcdir)/'`tables/table_u.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_u.Tpo $(DEPDIR)/libta_abstract_la-table_u.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_u.c' object='libta_abstract_la-table_u.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_u.lo `test -f 'tables/table_u.c' || echo '$(srcdir)/'`tables/table_u.c + +libta_abstract_la-table_v.lo: tables/table_v.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_v.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_v.Tpo -c -o libta_abstract_la-table_v.lo `test -f 'tables/table_v.c' || echo '$(srcdir)/'`tables/table_v.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_v.Tpo $(DEPDIR)/libta_abstract_la-table_v.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_v.c' object='libta_abstract_la-table_v.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_v.lo `test -f 'tables/table_v.c' || echo '$(srcdir)/'`tables/table_v.c + +libta_abstract_la-table_w.lo: tables/table_w.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_w.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_w.Tpo -c -o libta_abstract_la-table_w.lo `test -f 'tables/table_w.c' || echo '$(srcdir)/'`tables/table_w.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_w.Tpo $(DEPDIR)/libta_abstract_la-table_w.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_w.c' object='libta_abstract_la-table_w.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_w.lo `test -f 'tables/table_w.c' || echo '$(srcdir)/'`tables/table_w.c + +libta_abstract_la-table_x.lo: tables/table_x.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_x.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_x.Tpo -c -o libta_abstract_la-table_x.lo `test -f 'tables/table_x.c' || echo '$(srcdir)/'`tables/table_x.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_x.Tpo $(DEPDIR)/libta_abstract_la-table_x.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_x.c' object='libta_abstract_la-table_x.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_x.lo `test -f 'tables/table_x.c' || echo '$(srcdir)/'`tables/table_x.c + +libta_abstract_la-table_y.lo: tables/table_y.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_y.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_y.Tpo -c -o libta_abstract_la-table_y.lo `test -f 'tables/table_y.c' || echo '$(srcdir)/'`tables/table_y.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_y.Tpo $(DEPDIR)/libta_abstract_la-table_y.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_y.c' object='libta_abstract_la-table_y.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_y.lo `test -f 'tables/table_y.c' || echo '$(srcdir)/'`tables/table_y.c + +libta_abstract_la-table_z.lo: tables/table_z.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_la-table_z.lo -MD -MP -MF $(DEPDIR)/libta_abstract_la-table_z.Tpo -c -o libta_abstract_la-table_z.lo `test -f 'tables/table_z.c' || echo '$(srcdir)/'`tables/table_z.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_la-table_z.Tpo $(DEPDIR)/libta_abstract_la-table_z.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_z.c' object='libta_abstract_la-table_z.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_la-table_z.lo `test -f 'tables/table_z.c' || echo '$(srcdir)/'`tables/table_z.c + +libta_abstract_gc_la-ta_group_idx.lo: ta_group_idx.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-ta_group_idx.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-ta_group_idx.Tpo -c -o libta_abstract_gc_la-ta_group_idx.lo `test -f 'ta_group_idx.c' || echo '$(srcdir)/'`ta_group_idx.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-ta_group_idx.Tpo $(DEPDIR)/libta_abstract_gc_la-ta_group_idx.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ta_group_idx.c' object='libta_abstract_gc_la-ta_group_idx.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-ta_group_idx.lo `test -f 'ta_group_idx.c' || echo '$(srcdir)/'`ta_group_idx.c + +libta_abstract_gc_la-ta_def_ui.lo: ta_def_ui.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-ta_def_ui.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-ta_def_ui.Tpo -c -o libta_abstract_gc_la-ta_def_ui.lo `test -f 'ta_def_ui.c' || echo '$(srcdir)/'`ta_def_ui.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-ta_def_ui.Tpo $(DEPDIR)/libta_abstract_gc_la-ta_def_ui.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ta_def_ui.c' object='libta_abstract_gc_la-ta_def_ui.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-ta_def_ui.lo `test -f 'ta_def_ui.c' || echo '$(srcdir)/'`ta_def_ui.c + +libta_abstract_gc_la-ta_abstract.lo: ta_abstract.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-ta_abstract.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-ta_abstract.Tpo -c -o libta_abstract_gc_la-ta_abstract.lo `test -f 'ta_abstract.c' || echo '$(srcdir)/'`ta_abstract.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-ta_abstract.Tpo $(DEPDIR)/libta_abstract_gc_la-ta_abstract.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ta_abstract.c' object='libta_abstract_gc_la-ta_abstract.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-ta_abstract.lo `test -f 'ta_abstract.c' || echo '$(srcdir)/'`ta_abstract.c + +libta_abstract_gc_la-ta_func_api.lo: ta_func_api.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-ta_func_api.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-ta_func_api.Tpo -c -o libta_abstract_gc_la-ta_func_api.lo `test -f 'ta_func_api.c' || echo '$(srcdir)/'`ta_func_api.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-ta_func_api.Tpo $(DEPDIR)/libta_abstract_gc_la-ta_func_api.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ta_func_api.c' object='libta_abstract_gc_la-ta_func_api.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-ta_func_api.lo `test -f 'ta_func_api.c' || echo '$(srcdir)/'`ta_func_api.c + +libta_abstract_gc_la-ta_frame.lo: frames/ta_frame.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-ta_frame.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-ta_frame.Tpo -c -o libta_abstract_gc_la-ta_frame.lo `test -f 'frames/ta_frame.c' || echo '$(srcdir)/'`frames/ta_frame.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-ta_frame.Tpo $(DEPDIR)/libta_abstract_gc_la-ta_frame.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='frames/ta_frame.c' object='libta_abstract_gc_la-ta_frame.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-ta_frame.lo `test -f 'frames/ta_frame.c' || echo '$(srcdir)/'`frames/ta_frame.c + +libta_abstract_gc_la-table_a.lo: tables/table_a.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_a.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_a.Tpo -c -o libta_abstract_gc_la-table_a.lo `test -f 'tables/table_a.c' || echo '$(srcdir)/'`tables/table_a.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_a.Tpo $(DEPDIR)/libta_abstract_gc_la-table_a.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_a.c' object='libta_abstract_gc_la-table_a.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_a.lo `test -f 'tables/table_a.c' || echo '$(srcdir)/'`tables/table_a.c + +libta_abstract_gc_la-table_b.lo: tables/table_b.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_b.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_b.Tpo -c -o libta_abstract_gc_la-table_b.lo `test -f 'tables/table_b.c' || echo '$(srcdir)/'`tables/table_b.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_b.Tpo $(DEPDIR)/libta_abstract_gc_la-table_b.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_b.c' object='libta_abstract_gc_la-table_b.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_b.lo `test -f 'tables/table_b.c' || echo '$(srcdir)/'`tables/table_b.c + +libta_abstract_gc_la-table_c.lo: tables/table_c.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_c.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_c.Tpo -c -o libta_abstract_gc_la-table_c.lo `test -f 'tables/table_c.c' || echo '$(srcdir)/'`tables/table_c.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_c.Tpo $(DEPDIR)/libta_abstract_gc_la-table_c.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_c.c' object='libta_abstract_gc_la-table_c.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_c.lo `test -f 'tables/table_c.c' || echo '$(srcdir)/'`tables/table_c.c + +libta_abstract_gc_la-table_d.lo: tables/table_d.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_d.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_d.Tpo -c -o libta_abstract_gc_la-table_d.lo `test -f 'tables/table_d.c' || echo '$(srcdir)/'`tables/table_d.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_d.Tpo $(DEPDIR)/libta_abstract_gc_la-table_d.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_d.c' object='libta_abstract_gc_la-table_d.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_d.lo `test -f 'tables/table_d.c' || echo '$(srcdir)/'`tables/table_d.c + +libta_abstract_gc_la-table_e.lo: tables/table_e.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_e.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_e.Tpo -c -o libta_abstract_gc_la-table_e.lo `test -f 'tables/table_e.c' || echo '$(srcdir)/'`tables/table_e.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_e.Tpo $(DEPDIR)/libta_abstract_gc_la-table_e.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_e.c' object='libta_abstract_gc_la-table_e.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_e.lo `test -f 'tables/table_e.c' || echo '$(srcdir)/'`tables/table_e.c + +libta_abstract_gc_la-table_f.lo: tables/table_f.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_f.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_f.Tpo -c -o libta_abstract_gc_la-table_f.lo `test -f 'tables/table_f.c' || echo '$(srcdir)/'`tables/table_f.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_f.Tpo $(DEPDIR)/libta_abstract_gc_la-table_f.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_f.c' object='libta_abstract_gc_la-table_f.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_f.lo `test -f 'tables/table_f.c' || echo '$(srcdir)/'`tables/table_f.c + +libta_abstract_gc_la-table_g.lo: tables/table_g.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_g.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_g.Tpo -c -o libta_abstract_gc_la-table_g.lo `test -f 'tables/table_g.c' || echo '$(srcdir)/'`tables/table_g.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_g.Tpo $(DEPDIR)/libta_abstract_gc_la-table_g.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_g.c' object='libta_abstract_gc_la-table_g.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_g.lo `test -f 'tables/table_g.c' || echo '$(srcdir)/'`tables/table_g.c + +libta_abstract_gc_la-table_h.lo: tables/table_h.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_h.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_h.Tpo -c -o libta_abstract_gc_la-table_h.lo `test -f 'tables/table_h.c' || echo '$(srcdir)/'`tables/table_h.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_h.Tpo $(DEPDIR)/libta_abstract_gc_la-table_h.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_h.c' object='libta_abstract_gc_la-table_h.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_h.lo `test -f 'tables/table_h.c' || echo '$(srcdir)/'`tables/table_h.c + +libta_abstract_gc_la-table_i.lo: tables/table_i.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_i.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_i.Tpo -c -o libta_abstract_gc_la-table_i.lo `test -f 'tables/table_i.c' || echo '$(srcdir)/'`tables/table_i.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_i.Tpo $(DEPDIR)/libta_abstract_gc_la-table_i.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_i.c' object='libta_abstract_gc_la-table_i.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_i.lo `test -f 'tables/table_i.c' || echo '$(srcdir)/'`tables/table_i.c + +libta_abstract_gc_la-table_j.lo: tables/table_j.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_j.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_j.Tpo -c -o libta_abstract_gc_la-table_j.lo `test -f 'tables/table_j.c' || echo '$(srcdir)/'`tables/table_j.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_j.Tpo $(DEPDIR)/libta_abstract_gc_la-table_j.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_j.c' object='libta_abstract_gc_la-table_j.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_j.lo `test -f 'tables/table_j.c' || echo '$(srcdir)/'`tables/table_j.c + +libta_abstract_gc_la-table_k.lo: tables/table_k.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_k.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_k.Tpo -c -o libta_abstract_gc_la-table_k.lo `test -f 'tables/table_k.c' || echo '$(srcdir)/'`tables/table_k.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_k.Tpo $(DEPDIR)/libta_abstract_gc_la-table_k.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_k.c' object='libta_abstract_gc_la-table_k.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_k.lo `test -f 'tables/table_k.c' || echo '$(srcdir)/'`tables/table_k.c + +libta_abstract_gc_la-table_l.lo: tables/table_l.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_l.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_l.Tpo -c -o libta_abstract_gc_la-table_l.lo `test -f 'tables/table_l.c' || echo '$(srcdir)/'`tables/table_l.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_l.Tpo $(DEPDIR)/libta_abstract_gc_la-table_l.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_l.c' object='libta_abstract_gc_la-table_l.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_l.lo `test -f 'tables/table_l.c' || echo '$(srcdir)/'`tables/table_l.c + +libta_abstract_gc_la-table_m.lo: tables/table_m.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_m.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_m.Tpo -c -o libta_abstract_gc_la-table_m.lo `test -f 'tables/table_m.c' || echo '$(srcdir)/'`tables/table_m.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_m.Tpo $(DEPDIR)/libta_abstract_gc_la-table_m.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_m.c' object='libta_abstract_gc_la-table_m.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_m.lo `test -f 'tables/table_m.c' || echo '$(srcdir)/'`tables/table_m.c + +libta_abstract_gc_la-table_n.lo: tables/table_n.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_n.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_n.Tpo -c -o libta_abstract_gc_la-table_n.lo `test -f 'tables/table_n.c' || echo '$(srcdir)/'`tables/table_n.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_n.Tpo $(DEPDIR)/libta_abstract_gc_la-table_n.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_n.c' object='libta_abstract_gc_la-table_n.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_n.lo `test -f 'tables/table_n.c' || echo '$(srcdir)/'`tables/table_n.c + +libta_abstract_gc_la-table_o.lo: tables/table_o.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_o.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_o.Tpo -c -o libta_abstract_gc_la-table_o.lo `test -f 'tables/table_o.c' || echo '$(srcdir)/'`tables/table_o.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_o.Tpo $(DEPDIR)/libta_abstract_gc_la-table_o.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_o.c' object='libta_abstract_gc_la-table_o.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_o.lo `test -f 'tables/table_o.c' || echo '$(srcdir)/'`tables/table_o.c + +libta_abstract_gc_la-table_p.lo: tables/table_p.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_p.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_p.Tpo -c -o libta_abstract_gc_la-table_p.lo `test -f 'tables/table_p.c' || echo '$(srcdir)/'`tables/table_p.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_p.Tpo $(DEPDIR)/libta_abstract_gc_la-table_p.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_p.c' object='libta_abstract_gc_la-table_p.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_p.lo `test -f 'tables/table_p.c' || echo '$(srcdir)/'`tables/table_p.c + +libta_abstract_gc_la-table_q.lo: tables/table_q.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_q.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_q.Tpo -c -o libta_abstract_gc_la-table_q.lo `test -f 'tables/table_q.c' || echo '$(srcdir)/'`tables/table_q.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_q.Tpo $(DEPDIR)/libta_abstract_gc_la-table_q.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_q.c' object='libta_abstract_gc_la-table_q.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_q.lo `test -f 'tables/table_q.c' || echo '$(srcdir)/'`tables/table_q.c + +libta_abstract_gc_la-table_r.lo: tables/table_r.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_r.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_r.Tpo -c -o libta_abstract_gc_la-table_r.lo `test -f 'tables/table_r.c' || echo '$(srcdir)/'`tables/table_r.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_r.Tpo $(DEPDIR)/libta_abstract_gc_la-table_r.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_r.c' object='libta_abstract_gc_la-table_r.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_r.lo `test -f 'tables/table_r.c' || echo '$(srcdir)/'`tables/table_r.c + +libta_abstract_gc_la-table_s.lo: tables/table_s.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_s.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_s.Tpo -c -o libta_abstract_gc_la-table_s.lo `test -f 'tables/table_s.c' || echo '$(srcdir)/'`tables/table_s.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_s.Tpo $(DEPDIR)/libta_abstract_gc_la-table_s.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_s.c' object='libta_abstract_gc_la-table_s.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_s.lo `test -f 'tables/table_s.c' || echo '$(srcdir)/'`tables/table_s.c + +libta_abstract_gc_la-table_t.lo: tables/table_t.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_t.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_t.Tpo -c -o libta_abstract_gc_la-table_t.lo `test -f 'tables/table_t.c' || echo '$(srcdir)/'`tables/table_t.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_t.Tpo $(DEPDIR)/libta_abstract_gc_la-table_t.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_t.c' object='libta_abstract_gc_la-table_t.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_t.lo `test -f 'tables/table_t.c' || echo '$(srcdir)/'`tables/table_t.c + +libta_abstract_gc_la-table_u.lo: tables/table_u.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_u.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_u.Tpo -c -o libta_abstract_gc_la-table_u.lo `test -f 'tables/table_u.c' || echo '$(srcdir)/'`tables/table_u.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_u.Tpo $(DEPDIR)/libta_abstract_gc_la-table_u.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_u.c' object='libta_abstract_gc_la-table_u.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_u.lo `test -f 'tables/table_u.c' || echo '$(srcdir)/'`tables/table_u.c + +libta_abstract_gc_la-table_v.lo: tables/table_v.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_v.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_v.Tpo -c -o libta_abstract_gc_la-table_v.lo `test -f 'tables/table_v.c' || echo '$(srcdir)/'`tables/table_v.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_v.Tpo $(DEPDIR)/libta_abstract_gc_la-table_v.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_v.c' object='libta_abstract_gc_la-table_v.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_v.lo `test -f 'tables/table_v.c' || echo '$(srcdir)/'`tables/table_v.c + +libta_abstract_gc_la-table_w.lo: tables/table_w.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_w.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_w.Tpo -c -o libta_abstract_gc_la-table_w.lo `test -f 'tables/table_w.c' || echo '$(srcdir)/'`tables/table_w.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_w.Tpo $(DEPDIR)/libta_abstract_gc_la-table_w.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_w.c' object='libta_abstract_gc_la-table_w.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_w.lo `test -f 'tables/table_w.c' || echo '$(srcdir)/'`tables/table_w.c + +libta_abstract_gc_la-table_x.lo: tables/table_x.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_x.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_x.Tpo -c -o libta_abstract_gc_la-table_x.lo `test -f 'tables/table_x.c' || echo '$(srcdir)/'`tables/table_x.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_x.Tpo $(DEPDIR)/libta_abstract_gc_la-table_x.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_x.c' object='libta_abstract_gc_la-table_x.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_x.lo `test -f 'tables/table_x.c' || echo '$(srcdir)/'`tables/table_x.c + +libta_abstract_gc_la-table_y.lo: tables/table_y.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_y.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_y.Tpo -c -o libta_abstract_gc_la-table_y.lo `test -f 'tables/table_y.c' || echo '$(srcdir)/'`tables/table_y.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_y.Tpo $(DEPDIR)/libta_abstract_gc_la-table_y.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_y.c' object='libta_abstract_gc_la-table_y.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_y.lo `test -f 'tables/table_y.c' || echo '$(srcdir)/'`tables/table_y.c + +libta_abstract_gc_la-table_z.lo: tables/table_z.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libta_abstract_gc_la-table_z.lo -MD -MP -MF $(DEPDIR)/libta_abstract_gc_la-table_z.Tpo -c -o libta_abstract_gc_la-table_z.lo `test -f 'tables/table_z.c' || echo '$(srcdir)/'`tables/table_z.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libta_abstract_gc_la-table_z.Tpo $(DEPDIR)/libta_abstract_gc_la-table_z.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/table_z.c' object='libta_abstract_gc_la-table_z.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libta_abstract_gc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libta_abstract_gc_la-table_z.lo `test -f 'tables/table_z.c' || echo '$(srcdir)/'`tables/table_z.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libta_abstractHEADERS: $(libta_abstract_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(libta_abstractdir)" || $(MKDIR_P) "$(DESTDIR)$(libta_abstractdir)" + @list='$(libta_abstract_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(libta_abstractHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libta_abstractdir)/$$f'"; \ + $(libta_abstractHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libta_abstractdir)/$$f"; \ + done + +uninstall-libta_abstractHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libta_abstract_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libta_abstractdir)/$$f'"; \ + rm -f "$(DESTDIR)$(libta_abstractdir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libta_abstractdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-libta_abstractHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libta_abstractHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libta_abstractHEADERS install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libta_abstractHEADERS + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/ta_abstract/excel_glue.c b/src/ta_abstract/excel_glue.c new file mode 100644 index 000000000..043ed2662 --- /dev/null +++ b/src/ta_abstract/excel_glue.c @@ -0,0 +1,202 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* DO NOT MODIFY this file. + * This file is automatically generated by gen_code. + * + * If you are not re-building the excel library (which is most + * likely the case), just ignore this file. + */ + +EXCEL_GLUE_CODE_WITH_1_PARAM(ACOS) +EXCEL_GLUE_CODE_WITH_4_PARAM(AD) +EXCEL_GLUE_CODE_WITH_2_PARAM(ADD) +EXCEL_GLUE_CODE_WITH_6_PARAM(ADOSC) +EXCEL_GLUE_CODE_WITH_4_PARAM(ADX) +EXCEL_GLUE_CODE_WITH_4_PARAM(ADXR) +EXCEL_GLUE_CODE_WITH_4_PARAM(APO) +EXCEL_GLUE_CODE_WITH_3_PARAM(AROON) +EXCEL_GLUE_CODE_WITH_3_PARAM(AROONOSC) +EXCEL_GLUE_CODE_WITH_1_PARAM(ASIN) +EXCEL_GLUE_CODE_WITH_1_PARAM(ATAN) +EXCEL_GLUE_CODE_WITH_4_PARAM(ATR) +EXCEL_GLUE_CODE_WITH_4_PARAM(AVGPRICE) +EXCEL_GLUE_CODE_WITH_5_PARAM(BBANDS) +EXCEL_GLUE_CODE_WITH_3_PARAM(BETA) +EXCEL_GLUE_CODE_WITH_4_PARAM(BOP) +EXCEL_GLUE_CODE_WITH_4_PARAM(CCI) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDL2CROWS) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDL3BLACKCROWS) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDL3INSIDE) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDL3LINESTRIKE) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDL3OUTSIDE) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDL3STARSINSOUTH) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDL3WHITESOLDIERS) +EXCEL_GLUE_CODE_WITH_5_PARAM(CDLABANDONEDBABY) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLADVANCEBLOCK) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLBELTHOLD) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLBREAKAWAY) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLCLOSINGMARUBOZU) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLCONCEALBABYSWALL) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLCOUNTERATTACK) +EXCEL_GLUE_CODE_WITH_5_PARAM(CDLDARKCLOUDCOVER) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLDOJI) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLDOJISTAR) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLDRAGONFLYDOJI) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLENGULFING) +EXCEL_GLUE_CODE_WITH_5_PARAM(CDLEVENINGDOJISTAR) +EXCEL_GLUE_CODE_WITH_5_PARAM(CDLEVENINGSTAR) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLGAPSIDESIDEWHITE) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLGRAVESTONEDOJI) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLHAMMER) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLHANGINGMAN) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLHARAMI) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLHARAMICROSS) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLHIGHWAVE) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLHIKKAKE) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLHIKKAKEMOD) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLHOMINGPIGEON) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLIDENTICAL3CROWS) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLINNECK) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLINVERTEDHAMMER) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLKICKING) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLKICKINGBYLENGTH) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLLADDERBOTTOM) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLLONGLEGGEDDOJI) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLLONGLINE) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLMARUBOZU) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLMATCHINGLOW) +EXCEL_GLUE_CODE_WITH_5_PARAM(CDLMATHOLD) +EXCEL_GLUE_CODE_WITH_5_PARAM(CDLMORNINGDOJISTAR) +EXCEL_GLUE_CODE_WITH_5_PARAM(CDLMORNINGSTAR) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLONNECK) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLPIERCING) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLRICKSHAWMAN) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLRISEFALL3METHODS) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLSEPARATINGLINES) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLSHOOTINGSTAR) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLSHORTLINE) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLSPINNINGTOP) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLSTALLEDPATTERN) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLSTICKSANDWICH) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLTAKURI) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLTASUKIGAP) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLTHRUSTING) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLTRISTAR) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLUNIQUE3RIVER) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLUPSIDEGAP2CROWS) +EXCEL_GLUE_CODE_WITH_4_PARAM(CDLXSIDEGAP3METHODS) +EXCEL_GLUE_CODE_WITH_1_PARAM(CEIL) +EXCEL_GLUE_CODE_WITH_2_PARAM(CMO) +EXCEL_GLUE_CODE_WITH_3_PARAM(CORREL) +EXCEL_GLUE_CODE_WITH_1_PARAM(COS) +EXCEL_GLUE_CODE_WITH_1_PARAM(COSH) +EXCEL_GLUE_CODE_WITH_2_PARAM(DEMA) +EXCEL_GLUE_CODE_WITH_2_PARAM(DIV) +EXCEL_GLUE_CODE_WITH_4_PARAM(DX) +EXCEL_GLUE_CODE_WITH_2_PARAM(EMA) +EXCEL_GLUE_CODE_WITH_1_PARAM(EXP) +EXCEL_GLUE_CODE_WITH_1_PARAM(FLOOR) +EXCEL_GLUE_CODE_WITH_1_PARAM(HT_DCPERIOD) +EXCEL_GLUE_CODE_WITH_1_PARAM(HT_DCPHASE) +EXCEL_GLUE_CODE_WITH_1_PARAM(HT_PHASOR) +EXCEL_GLUE_CODE_WITH_1_PARAM(HT_SINE) +EXCEL_GLUE_CODE_WITH_1_PARAM(HT_TRENDLINE) +EXCEL_GLUE_CODE_WITH_1_PARAM(HT_TRENDMODE) +EXCEL_GLUE_CODE_WITH_2_PARAM(KAMA) +EXCEL_GLUE_CODE_WITH_2_PARAM(LINEARREG) +EXCEL_GLUE_CODE_WITH_2_PARAM(LINEARREG_ANGLE) +EXCEL_GLUE_CODE_WITH_2_PARAM(LINEARREG_INTERCEPT) +EXCEL_GLUE_CODE_WITH_2_PARAM(LINEARREG_SLOPE) +EXCEL_GLUE_CODE_WITH_1_PARAM(LN) +EXCEL_GLUE_CODE_WITH_1_PARAM(LOG10) +EXCEL_GLUE_CODE_WITH_3_PARAM(MA) +EXCEL_GLUE_CODE_WITH_4_PARAM(MACD) +EXCEL_GLUE_CODE_WITH_7_PARAM(MACDEXT) +EXCEL_GLUE_CODE_WITH_2_PARAM(MACDFIX) +EXCEL_GLUE_CODE_WITH_3_PARAM(MAMA) +EXCEL_GLUE_CODE_WITH_5_PARAM(MAVP) +EXCEL_GLUE_CODE_WITH_2_PARAM(MAX) +EXCEL_GLUE_CODE_WITH_2_PARAM(MAXINDEX) +EXCEL_GLUE_CODE_WITH_2_PARAM(MEDPRICE) +EXCEL_GLUE_CODE_WITH_5_PARAM(MFI) +EXCEL_GLUE_CODE_WITH_2_PARAM(MIDPOINT) +EXCEL_GLUE_CODE_WITH_3_PARAM(MIDPRICE) +EXCEL_GLUE_CODE_WITH_2_PARAM(MIN) +EXCEL_GLUE_CODE_WITH_2_PARAM(MININDEX) +EXCEL_GLUE_CODE_WITH_2_PARAM(MINMAX) +EXCEL_GLUE_CODE_WITH_2_PARAM(MINMAXINDEX) +EXCEL_GLUE_CODE_WITH_4_PARAM(MINUS_DI) +EXCEL_GLUE_CODE_WITH_3_PARAM(MINUS_DM) +EXCEL_GLUE_CODE_WITH_2_PARAM(MOM) +EXCEL_GLUE_CODE_WITH_2_PARAM(MULT) +EXCEL_GLUE_CODE_WITH_4_PARAM(NATR) +EXCEL_GLUE_CODE_WITH_2_PARAM(OBV) +EXCEL_GLUE_CODE_WITH_4_PARAM(PLUS_DI) +EXCEL_GLUE_CODE_WITH_3_PARAM(PLUS_DM) +EXCEL_GLUE_CODE_WITH_4_PARAM(PPO) +EXCEL_GLUE_CODE_WITH_2_PARAM(ROC) +EXCEL_GLUE_CODE_WITH_2_PARAM(ROCP) +EXCEL_GLUE_CODE_WITH_2_PARAM(ROCR) +EXCEL_GLUE_CODE_WITH_2_PARAM(ROCR100) +EXCEL_GLUE_CODE_WITH_2_PARAM(RSI) +EXCEL_GLUE_CODE_WITH_4_PARAM(SAR) +EXCEL_GLUE_CODE_WITH_10_PARAM(SAREXT) +EXCEL_GLUE_CODE_WITH_1_PARAM(SIN) +EXCEL_GLUE_CODE_WITH_1_PARAM(SINH) +EXCEL_GLUE_CODE_WITH_2_PARAM(SMA) +EXCEL_GLUE_CODE_WITH_1_PARAM(SQRT) +EXCEL_GLUE_CODE_WITH_3_PARAM(STDDEV) +EXCEL_GLUE_CODE_WITH_8_PARAM(STOCH) +EXCEL_GLUE_CODE_WITH_6_PARAM(STOCHF) +EXCEL_GLUE_CODE_WITH_5_PARAM(STOCHRSI) +EXCEL_GLUE_CODE_WITH_2_PARAM(SUB) +EXCEL_GLUE_CODE_WITH_2_PARAM(SUM) +EXCEL_GLUE_CODE_WITH_3_PARAM(T3) +EXCEL_GLUE_CODE_WITH_1_PARAM(TAN) +EXCEL_GLUE_CODE_WITH_1_PARAM(TANH) +EXCEL_GLUE_CODE_WITH_2_PARAM(TEMA) +EXCEL_GLUE_CODE_WITH_3_PARAM(TRANGE) +EXCEL_GLUE_CODE_WITH_2_PARAM(TRIMA) +EXCEL_GLUE_CODE_WITH_2_PARAM(TRIX) +EXCEL_GLUE_CODE_WITH_2_PARAM(TSF) +EXCEL_GLUE_CODE_WITH_3_PARAM(TYPPRICE) +EXCEL_GLUE_CODE_WITH_6_PARAM(ULTOSC) +EXCEL_GLUE_CODE_WITH_3_PARAM(VAR) +EXCEL_GLUE_CODE_WITH_3_PARAM(WCLPRICE) +EXCEL_GLUE_CODE_WITH_4_PARAM(WILLR) +EXCEL_GLUE_CODE_WITH_2_PARAM(WMA) + +/*************** + * End of File * + ***************/ diff --git a/src/ta_abstract/frames/ta_frame.c b/src/ta_abstract/frames/ta_frame.c new file mode 100644 index 000000000..83fba3582 --- /dev/null +++ b/src/ta_abstract/frames/ta_frame.c @@ -0,0 +1,3407 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Note: This file is generated by gencode, do not + * modify directly. + */ + +/* The function define in this file allows to have a consistent + * framework for calling all the TA function through + * the TA_CallFunc mechanism. + * + * See "ta_abstract.h" + */ + +#ifndef TA_FUNC_H + #include "ta_func.h" +#endif + +#ifndef TA_FRAME_PRIV_H + #include "ta_frame_priv.h" +#endif + +#ifndef TA_FRAME_H + #include "ta_frame.h" +#endif + +/* NEVER CALL directly these functions! Use TA_CallFunc. */ + +/* Generated */ TA_RetCode TA_ACOS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ACOS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ACOS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_ACOS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_AD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_AD( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->in[0].data.inPrice.volume, /* inVolume */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_AD_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_AD_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ADD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ADD( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal0 */ +/* Generated */ params->in[1].data.inReal, /* inReal1 */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ADD_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_ADD_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ADOSC_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ADOSC( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->in[0].data.inPrice.volume, /* inVolume */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ADOSC_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ADOSC_Lookback(params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger /* optInSlowPeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ADX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ADX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ADX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ADX_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ADXR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ADXR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ADXR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ADXR_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_APO_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_APO( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger, /* optInMAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_APO_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_APO_Lookback(params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger /* optInMAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_AROON_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_AROON( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outAroonDown */ +/* Generated */ params->out[1].data.outReal /* outAroonUp */ ); +/* Generated */ } +/* Generated */ unsigned int TA_AROON_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_AROON_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_AROONOSC_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_AROONOSC( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_AROONOSC_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_AROONOSC_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ASIN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ASIN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ASIN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_ASIN_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ATAN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ATAN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ATAN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_ATAN_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ATR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ATR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ATR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ATR_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_AVGPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_AVGPRICE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_AVGPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_AVGPRICE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_BBANDS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_BBANDS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInNbDevUp*/ +/* Generated */ params->optIn[2].data.optInReal, /* optInNbDevDn*/ +/* Generated */ (TA_MAType)params->optIn[3].data.optInInteger, /* optInMAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outRealUpperBand */ +/* Generated */ params->out[1].data.outReal, /* outRealMiddleBand */ +/* Generated */ params->out[2].data.outReal /* outRealLowerBand */ ); +/* Generated */ } +/* Generated */ unsigned int TA_BBANDS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_BBANDS_Lookback(params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInNbDevUp*/ +/* Generated */ params->optIn[2].data.optInReal, /* optInNbDevDn*/ +/* Generated */ (TA_MAType)params->optIn[3].data.optInInteger /* optInMAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_BETA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_BETA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal0 */ +/* Generated */ params->in[1].data.inReal, /* inReal1 */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_BETA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_BETA_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_BOP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_BOP( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_BOP_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_BOP_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CCI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CCI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CCI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CCI_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDL2CROWS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDL2CROWS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDL2CROWS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDL2CROWS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDL3BLACKCROWS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDL3BLACKCROWS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDL3BLACKCROWS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDL3BLACKCROWS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDL3INSIDE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDL3INSIDE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDL3INSIDE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDL3INSIDE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDL3LINESTRIKE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDL3LINESTRIKE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDL3LINESTRIKE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDL3LINESTRIKE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDL3OUTSIDE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDL3OUTSIDE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDL3OUTSIDE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDL3OUTSIDE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDL3STARSINSOUTH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDL3STARSINSOUTH( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDL3STARSINSOUTH_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDL3STARSINSOUTH_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDL3WHITESOLDIERS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDL3WHITESOLDIERS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDL3WHITESOLDIERS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDL3WHITESOLDIERS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLABANDONEDBABY_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLABANDONEDBABY( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInReal, /* optInPenetration*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLABANDONEDBABY_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CDLABANDONEDBABY_Lookback(params->optIn[0].data.optInReal /* optInPenetration*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLADVANCEBLOCK_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLADVANCEBLOCK( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLADVANCEBLOCK_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLADVANCEBLOCK_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLBELTHOLD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLBELTHOLD( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLBELTHOLD_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLBELTHOLD_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLBREAKAWAY_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLBREAKAWAY( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLBREAKAWAY_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLBREAKAWAY_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLCLOSINGMARUBOZU_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLCLOSINGMARUBOZU( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLCLOSINGMARUBOZU_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLCLOSINGMARUBOZU_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLCONCEALBABYSWALL_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLCONCEALBABYSWALL( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLCONCEALBABYSWALL_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLCONCEALBABYSWALL_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLCOUNTERATTACK_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLCOUNTERATTACK( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLCOUNTERATTACK_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLCOUNTERATTACK_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLDARKCLOUDCOVER_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLDARKCLOUDCOVER( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInReal, /* optInPenetration*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLDARKCLOUDCOVER_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CDLDARKCLOUDCOVER_Lookback(params->optIn[0].data.optInReal /* optInPenetration*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLDOJI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLDOJI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLDOJI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLDOJI_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLDOJISTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLDOJISTAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLDOJISTAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLDOJISTAR_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLDRAGONFLYDOJI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLDRAGONFLYDOJI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLDRAGONFLYDOJI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLDRAGONFLYDOJI_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLENGULFING_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLENGULFING( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLENGULFING_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLENGULFING_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLEVENINGDOJISTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLEVENINGDOJISTAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInReal, /* optInPenetration*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLEVENINGDOJISTAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CDLEVENINGDOJISTAR_Lookback(params->optIn[0].data.optInReal /* optInPenetration*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLEVENINGSTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLEVENINGSTAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInReal, /* optInPenetration*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLEVENINGSTAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CDLEVENINGSTAR_Lookback(params->optIn[0].data.optInReal /* optInPenetration*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLGAPSIDESIDEWHITE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLGAPSIDESIDEWHITE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLGAPSIDESIDEWHITE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLGAPSIDESIDEWHITE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLGRAVESTONEDOJI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLGRAVESTONEDOJI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLGRAVESTONEDOJI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLGRAVESTONEDOJI_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLHAMMER_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLHAMMER( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLHAMMER_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLHAMMER_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLHANGINGMAN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLHANGINGMAN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLHANGINGMAN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLHANGINGMAN_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLHARAMI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLHARAMI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLHARAMI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLHARAMI_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLHARAMICROSS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLHARAMICROSS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLHARAMICROSS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLHARAMICROSS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLHIGHWAVE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLHIGHWAVE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLHIGHWAVE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLHIGHWAVE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLHIKKAKE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLHIKKAKE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLHIKKAKE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLHIKKAKE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLHIKKAKEMOD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLHIKKAKEMOD( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLHIKKAKEMOD_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLHIKKAKEMOD_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLHOMINGPIGEON_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLHOMINGPIGEON( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLHOMINGPIGEON_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLHOMINGPIGEON_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLIDENTICAL3CROWS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLIDENTICAL3CROWS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLIDENTICAL3CROWS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLIDENTICAL3CROWS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLINNECK_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLINNECK( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLINNECK_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLINNECK_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLINVERTEDHAMMER_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLINVERTEDHAMMER( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLINVERTEDHAMMER_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLINVERTEDHAMMER_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLKICKING_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLKICKING( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLKICKING_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLKICKING_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLKICKINGBYLENGTH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLKICKINGBYLENGTH( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLKICKINGBYLENGTH_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLKICKINGBYLENGTH_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLLADDERBOTTOM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLLADDERBOTTOM( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLLADDERBOTTOM_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLLADDERBOTTOM_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLLONGLEGGEDDOJI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLLONGLEGGEDDOJI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLLONGLEGGEDDOJI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLLONGLEGGEDDOJI_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLLONGLINE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLLONGLINE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLLONGLINE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLLONGLINE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLMARUBOZU_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLMARUBOZU( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLMARUBOZU_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLMARUBOZU_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLMATCHINGLOW_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLMATCHINGLOW( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLMATCHINGLOW_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLMATCHINGLOW_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLMATHOLD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLMATHOLD( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInReal, /* optInPenetration*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLMATHOLD_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CDLMATHOLD_Lookback(params->optIn[0].data.optInReal /* optInPenetration*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLMORNINGDOJISTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLMORNINGDOJISTAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInReal, /* optInPenetration*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLMORNINGDOJISTAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CDLMORNINGDOJISTAR_Lookback(params->optIn[0].data.optInReal /* optInPenetration*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLMORNINGSTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLMORNINGSTAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInReal, /* optInPenetration*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLMORNINGSTAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CDLMORNINGSTAR_Lookback(params->optIn[0].data.optInReal /* optInPenetration*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLONNECK_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLONNECK( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLONNECK_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLONNECK_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLPIERCING_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLPIERCING( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLPIERCING_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLPIERCING_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLRICKSHAWMAN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLRICKSHAWMAN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLRICKSHAWMAN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLRICKSHAWMAN_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLRISEFALL3METHODS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLRISEFALL3METHODS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLRISEFALL3METHODS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLRISEFALL3METHODS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLSEPARATINGLINES_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLSEPARATINGLINES( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLSEPARATINGLINES_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLSEPARATINGLINES_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLSHOOTINGSTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLSHOOTINGSTAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLSHOOTINGSTAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLSHOOTINGSTAR_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLSHORTLINE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLSHORTLINE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLSHORTLINE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLSHORTLINE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLSPINNINGTOP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLSPINNINGTOP( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLSPINNINGTOP_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLSPINNINGTOP_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLSTALLEDPATTERN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLSTALLEDPATTERN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLSTALLEDPATTERN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLSTALLEDPATTERN_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLSTICKSANDWICH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLSTICKSANDWICH( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLSTICKSANDWICH_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLSTICKSANDWICH_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLTAKURI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLTAKURI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLTAKURI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLTAKURI_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLTASUKIGAP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLTASUKIGAP( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLTASUKIGAP_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLTASUKIGAP_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLTHRUSTING_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLTHRUSTING( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLTHRUSTING_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLTHRUSTING_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLTRISTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLTRISTAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLTRISTAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLTRISTAR_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLUNIQUE3RIVER_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLUNIQUE3RIVER( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLUNIQUE3RIVER_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLUNIQUE3RIVER_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLUPSIDEGAP2CROWS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLUPSIDEGAP2CROWS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLUPSIDEGAP2CROWS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLUPSIDEGAP2CROWS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CDLXSIDEGAP3METHODS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CDLXSIDEGAP3METHODS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.open, /* inOpen */ +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CDLXSIDEGAP3METHODS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CDLXSIDEGAP3METHODS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CEIL_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CEIL( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CEIL_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_CEIL_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CMO_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CMO( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CMO_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CMO_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_CORREL_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_CORREL( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal0 */ +/* Generated */ params->in[1].data.inReal, /* inReal1 */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_CORREL_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_CORREL_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_COS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_COS( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_COS_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_COS_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_COSH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_COSH( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_COSH_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_COSH_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_DEMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_DEMA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_DEMA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_DEMA_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_DIV_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_DIV( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal0 */ +/* Generated */ params->in[1].data.inReal, /* inReal1 */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_DIV_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_DIV_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_DX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_DX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_DX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_DX_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_EMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_EMA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_EMA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_EMA_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_EXP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_EXP( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_EXP_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_EXP_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_FLOOR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_FLOOR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_FLOOR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_FLOOR_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_HT_DCPERIOD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_HT_DCPERIOD( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_HT_DCPERIOD_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_HT_DCPERIOD_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_HT_DCPHASE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_HT_DCPHASE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_HT_DCPHASE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_HT_DCPHASE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_HT_PHASOR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_HT_PHASOR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outInPhase */ +/* Generated */ params->out[1].data.outReal /* outQuadrature */ ); +/* Generated */ } +/* Generated */ unsigned int TA_HT_PHASOR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_HT_PHASOR_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_HT_SINE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_HT_SINE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outSine */ +/* Generated */ params->out[1].data.outReal /* outLeadSine */ ); +/* Generated */ } +/* Generated */ unsigned int TA_HT_SINE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_HT_SINE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_HT_TRENDLINE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_HT_TRENDLINE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_HT_TRENDLINE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_HT_TRENDLINE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_HT_TRENDMODE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_HT_TRENDMODE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_HT_TRENDMODE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_HT_TRENDMODE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_KAMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_KAMA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_KAMA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_KAMA_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_LINEARREG_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_LINEARREG( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_LINEARREG_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_LINEARREG_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_LINEARREG_ANGLE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_LINEARREG_ANGLE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_LINEARREG_ANGLE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_LINEARREG_ANGLE_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_LINEARREG_INTERCEPT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_LINEARREG_INTERCEPT( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_LINEARREG_INTERCEPT_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_LINEARREG_INTERCEPT_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_LINEARREG_SLOPE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_LINEARREG_SLOPE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_LINEARREG_SLOPE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_LINEARREG_SLOPE_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_LN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_LN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_LN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_LN_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_LOG10_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_LOG10( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_LOG10_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_LOG10_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ (TA_MAType)params->optIn[1].data.optInInteger, /* optInMAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MA_Lookback(params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ (TA_MAType)params->optIn[1].data.optInInteger /* optInMAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MACD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MACD( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ params->optIn[2].data.optInInteger, /* optInSignalPeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outMACD */ +/* Generated */ params->out[1].data.outReal, /* outMACDSignal */ +/* Generated */ params->out[2].data.outReal /* outMACDHist */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MACD_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MACD_Lookback(params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ params->optIn[2].data.optInInteger /* optInSignalPeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MACDEXT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MACDEXT( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ (TA_MAType)params->optIn[1].data.optInInteger, /* optInFastMAType*/ +/* Generated */ params->optIn[2].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ (TA_MAType)params->optIn[3].data.optInInteger, /* optInSlowMAType*/ +/* Generated */ params->optIn[4].data.optInInteger, /* optInSignalPeriod*/ +/* Generated */ (TA_MAType)params->optIn[5].data.optInInteger, /* optInSignalMAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outMACD */ +/* Generated */ params->out[1].data.outReal, /* outMACDSignal */ +/* Generated */ params->out[2].data.outReal /* outMACDHist */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MACDEXT_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MACDEXT_Lookback(params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ (TA_MAType)params->optIn[1].data.optInInteger, /* optInFastMAType*/ +/* Generated */ params->optIn[2].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ (TA_MAType)params->optIn[3].data.optInInteger, /* optInSlowMAType*/ +/* Generated */ params->optIn[4].data.optInInteger, /* optInSignalPeriod*/ +/* Generated */ (TA_MAType)params->optIn[5].data.optInInteger /* optInSignalMAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MACDFIX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MACDFIX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInSignalPeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outMACD */ +/* Generated */ params->out[1].data.outReal, /* outMACDSignal */ +/* Generated */ params->out[2].data.outReal /* outMACDHist */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MACDFIX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MACDFIX_Lookback(params->optIn[0].data.optInInteger /* optInSignalPeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MAMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MAMA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInReal, /* optInFastLimit*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInSlowLimit*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outMAMA */ +/* Generated */ params->out[1].data.outReal /* outFAMA */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MAMA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MAMA_Lookback(params->optIn[0].data.optInReal, /* optInFastLimit*/ +/* Generated */ params->optIn[1].data.optInReal /* optInSlowLimit*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MAVP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MAVP( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->in[1].data.inReal, /* inPeriods */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInMinPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInMaxPeriod*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger, /* optInMAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MAVP_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MAVP_Lookback(params->optIn[0].data.optInInteger, /* optInMinPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInMaxPeriod*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger /* optInMAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MAX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MAX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MAX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MAX_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MAXINDEX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MAXINDEX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MAXINDEX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MAXINDEX_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MEDPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MEDPRICE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MEDPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_MEDPRICE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MFI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MFI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->in[0].data.inPrice.volume, /* inVolume */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MFI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MFI_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MIDPOINT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MIDPOINT( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MIDPOINT_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MIDPOINT_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MIDPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MIDPRICE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MIDPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MIDPRICE_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MIN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MIN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MIN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MIN_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MININDEX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MININDEX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger /* outInteger */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MININDEX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MININDEX_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MINMAX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MINMAX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outMin */ +/* Generated */ params->out[1].data.outReal /* outMax */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MINMAX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MINMAX_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MINMAXINDEX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MINMAXINDEX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outInteger, /* outMinIdx */ +/* Generated */ params->out[1].data.outInteger /* outMaxIdx */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MINMAXINDEX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MINMAXINDEX_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MINUS_DI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MINUS_DI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MINUS_DI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MINUS_DI_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MINUS_DM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MINUS_DM( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MINUS_DM_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MINUS_DM_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MOM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MOM( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MOM_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_MOM_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_MULT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_MULT( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal0 */ +/* Generated */ params->in[1].data.inReal, /* inReal1 */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_MULT_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_MULT_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_NATR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_NATR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_NATR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_NATR_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_OBV_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_OBV( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->in[1].data.inPrice.volume, /* inVolume */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_OBV_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_OBV_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_PLUS_DI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_PLUS_DI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_PLUS_DI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_PLUS_DI_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_PLUS_DM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_PLUS_DM( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_PLUS_DM_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_PLUS_DM_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_PPO_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_PPO( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger, /* optInMAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_PPO_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_PPO_Lookback(params->optIn[0].data.optInInteger, /* optInFastPeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowPeriod*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger /* optInMAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ROC_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ROC( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ROC_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ROC_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ROCP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ROCP( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ROCP_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ROCP_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ROCR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ROCR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ROCR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ROCR_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ROCR100_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ROCR100( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ROCR100_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ROCR100_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_RSI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_RSI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_RSI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_RSI_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_SAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_SAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->optIn[0].data.optInReal, /* optInAcceleration*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInMaximum*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_SAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_SAR_Lookback(params->optIn[0].data.optInReal, /* optInAcceleration*/ +/* Generated */ params->optIn[1].data.optInReal /* optInMaximum*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_SAREXT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_SAREXT( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->optIn[0].data.optInReal, /* optInStartValue*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInOffsetOnReverse*/ +/* Generated */ params->optIn[2].data.optInReal, /* optInAccelerationInitLong*/ +/* Generated */ params->optIn[3].data.optInReal, /* optInAccelerationLong*/ +/* Generated */ params->optIn[4].data.optInReal, /* optInAccelerationMaxLong*/ +/* Generated */ params->optIn[5].data.optInReal, /* optInAccelerationInitShort*/ +/* Generated */ params->optIn[6].data.optInReal, /* optInAccelerationShort*/ +/* Generated */ params->optIn[7].data.optInReal, /* optInAccelerationMaxShort*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_SAREXT_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_SAREXT_Lookback(params->optIn[0].data.optInReal, /* optInStartValue*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInOffsetOnReverse*/ +/* Generated */ params->optIn[2].data.optInReal, /* optInAccelerationInitLong*/ +/* Generated */ params->optIn[3].data.optInReal, /* optInAccelerationLong*/ +/* Generated */ params->optIn[4].data.optInReal, /* optInAccelerationMaxLong*/ +/* Generated */ params->optIn[5].data.optInReal, /* optInAccelerationInitShort*/ +/* Generated */ params->optIn[6].data.optInReal, /* optInAccelerationShort*/ +/* Generated */ params->optIn[7].data.optInReal /* optInAccelerationMaxShort*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_SIN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_SIN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_SIN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_SIN_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_SINH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_SINH( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_SINH_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_SINH_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_SMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_SMA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_SMA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_SMA_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_SQRT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_SQRT( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_SQRT_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_SQRT_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_STDDEV_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_STDDEV( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInNbDev*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_STDDEV_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_STDDEV_Lookback(params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInReal /* optInNbDev*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_STOCH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_STOCH( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInFastK_Period*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowK_Period*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger, /* optInSlowK_MAType*/ +/* Generated */ params->optIn[3].data.optInInteger, /* optInSlowD_Period*/ +/* Generated */ (TA_MAType)params->optIn[4].data.optInInteger, /* optInSlowD_MAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outSlowK */ +/* Generated */ params->out[1].data.outReal /* outSlowD */ ); +/* Generated */ } +/* Generated */ unsigned int TA_STOCH_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_STOCH_Lookback(params->optIn[0].data.optInInteger, /* optInFastK_Period*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInSlowK_Period*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger, /* optInSlowK_MAType*/ +/* Generated */ params->optIn[3].data.optInInteger, /* optInSlowD_Period*/ +/* Generated */ (TA_MAType)params->optIn[4].data.optInInteger /* optInSlowD_MAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_STOCHF_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_STOCHF( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInFastK_Period*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInFastD_Period*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger, /* optInFastD_MAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outFastK */ +/* Generated */ params->out[1].data.outReal /* outFastD */ ); +/* Generated */ } +/* Generated */ unsigned int TA_STOCHF_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_STOCHF_Lookback(params->optIn[0].data.optInInteger, /* optInFastK_Period*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInFastD_Period*/ +/* Generated */ (TA_MAType)params->optIn[2].data.optInInteger /* optInFastD_MAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_STOCHRSI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_STOCHRSI( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInFastK_Period*/ +/* Generated */ params->optIn[2].data.optInInteger, /* optInFastD_Period*/ +/* Generated */ (TA_MAType)params->optIn[3].data.optInInteger, /* optInFastD_MAType*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal, /* outFastK */ +/* Generated */ params->out[1].data.outReal /* outFastD */ ); +/* Generated */ } +/* Generated */ unsigned int TA_STOCHRSI_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_STOCHRSI_Lookback(params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInFastK_Period*/ +/* Generated */ params->optIn[2].data.optInInteger, /* optInFastD_Period*/ +/* Generated */ (TA_MAType)params->optIn[3].data.optInInteger /* optInFastD_MAType*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_SUB_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_SUB( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal0 */ +/* Generated */ params->in[1].data.inReal, /* inReal1 */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_SUB_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_SUB_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_SUM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_SUM( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_SUM_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_SUM_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_T3_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_T3( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInVFactor*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_T3_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_T3_Lookback(params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInReal /* optInVFactor*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_TAN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_TAN( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_TAN_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_TAN_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_TANH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_TANH( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_TANH_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_TANH_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_TEMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_TEMA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_TEMA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_TEMA_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_TRANGE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_TRANGE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_TRANGE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_TRANGE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_TRIMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_TRIMA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_TRIMA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_TRIMA_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_TRIX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_TRIX( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_TRIX_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_TRIX_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_TSF_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_TSF( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_TSF_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_TSF_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_TYPPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_TYPPRICE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_TYPPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_TYPPRICE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_ULTOSC_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_ULTOSC( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod1*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInTimePeriod2*/ +/* Generated */ params->optIn[2].data.optInInteger, /* optInTimePeriod3*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_ULTOSC_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_ULTOSC_Lookback(params->optIn[0].data.optInInteger, /* optInTimePeriod1*/ +/* Generated */ params->optIn[1].data.optInInteger, /* optInTimePeriod2*/ +/* Generated */ params->optIn[2].data.optInInteger /* optInTimePeriod3*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_VAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_VAR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInReal, /* optInNbDev*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_VAR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_VAR_Lookback(params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ params->optIn[1].data.optInReal /* optInNbDev*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_WCLPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_WCLPRICE( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_WCLPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ (void)params; +/* Generated */ return TA_WCLPRICE_Lookback( ); +/* Generated */ } +/* Generated */ TA_RetCode TA_WILLR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_WILLR( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inPrice.high, /* inHigh */ +/* Generated */ params->in[0].data.inPrice.low, /* inLow */ +/* Generated */ params->in[0].data.inPrice.close, /* inClose */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_WILLR_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_WILLR_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } +/* Generated */ TA_RetCode TA_WMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +/* Generated */ { +/* Generated */ return TA_WMA( +/* Generated */ startIdx, +/* Generated */ endIdx, +/* Generated */ params->in[0].data.inReal, /* inReal */ +/* Generated */ params->optIn[0].data.optInInteger, /* optInTimePeriod*/ +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ params->out[0].data.outReal /* outReal */ ); +/* Generated */ } +/* Generated */ unsigned int TA_WMA_FramePPLB( const TA_ParamHolderPriv *params ) +/* Generated */ { +/* Generated */ return TA_WMA_Lookback(params->optIn[0].data.optInInteger /* optInTimePeriod*/ ); +/* Generated */ } + +/***************/ +/* End of File */ +/***************/ diff --git a/src/ta_abstract/frames/ta_frame.h b/src/ta_abstract/frames/ta_frame.h new file mode 100644 index 000000000..e75a8c3c0 --- /dev/null +++ b/src/ta_abstract/frames/ta_frame.h @@ -0,0 +1,1481 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TA_FRAME_H +#define TA_FRAME_H + +/* Note: This file is generated by gencode, do not + * modify directly. + */ + +/* The function define in this file allows to call a TA + * function through the TA_CallFunc mechanism. + */ + +#ifndef TA_COMMON_H + #include "ta_common.h" +#endif + +#ifndef TA_FRAME_PRIV_H + #include "ta_frame_priv.h" +#endif + + +/* Generated */ TA_RetCode TA_ACOS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ACOS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_AD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_AD_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ADD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ADD_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ADOSC_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ADOSC_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ADX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ADX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ADXR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ADXR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_APO_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_APO_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_AROON_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_AROON_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_AROONOSC_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_AROONOSC_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ASIN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ASIN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ATAN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ATAN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ATR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ATR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_AVGPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_AVGPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_BBANDS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_BBANDS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_BETA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_BETA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_BOP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_BOP_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CCI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CCI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDL2CROWS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDL2CROWS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDL3BLACKCROWS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDL3BLACKCROWS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDL3INSIDE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDL3INSIDE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDL3LINESTRIKE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDL3LINESTRIKE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDL3OUTSIDE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDL3OUTSIDE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDL3STARSINSOUTH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDL3STARSINSOUTH_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDL3WHITESOLDIERS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDL3WHITESOLDIERS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLABANDONEDBABY_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLABANDONEDBABY_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLADVANCEBLOCK_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLADVANCEBLOCK_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLBELTHOLD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLBELTHOLD_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLBREAKAWAY_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLBREAKAWAY_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLCLOSINGMARUBOZU_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLCLOSINGMARUBOZU_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLCONCEALBABYSWALL_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLCONCEALBABYSWALL_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLCOUNTERATTACK_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLCOUNTERATTACK_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLDARKCLOUDCOVER_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLDARKCLOUDCOVER_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLDOJI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLDOJI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLDOJISTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLDOJISTAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLDRAGONFLYDOJI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLDRAGONFLYDOJI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLENGULFING_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLENGULFING_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLEVENINGDOJISTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLEVENINGDOJISTAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLEVENINGSTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLEVENINGSTAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLGAPSIDESIDEWHITE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLGAPSIDESIDEWHITE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLGRAVESTONEDOJI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLGRAVESTONEDOJI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLHAMMER_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLHAMMER_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLHANGINGMAN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLHANGINGMAN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLHARAMI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLHARAMI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLHARAMICROSS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLHARAMICROSS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLHIGHWAVE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLHIGHWAVE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLHIKKAKE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLHIKKAKE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLHIKKAKEMOD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLHIKKAKEMOD_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLHOMINGPIGEON_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLHOMINGPIGEON_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLIDENTICAL3CROWS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLIDENTICAL3CROWS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLINNECK_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLINNECK_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLINVERTEDHAMMER_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLINVERTEDHAMMER_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLKICKING_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLKICKING_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLKICKINGBYLENGTH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLKICKINGBYLENGTH_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLLADDERBOTTOM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLLADDERBOTTOM_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLLONGLEGGEDDOJI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLLONGLEGGEDDOJI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLLONGLINE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLLONGLINE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLMARUBOZU_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLMARUBOZU_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLMATCHINGLOW_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLMATCHINGLOW_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLMATHOLD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLMATHOLD_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLMORNINGDOJISTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLMORNINGDOJISTAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLMORNINGSTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLMORNINGSTAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLONNECK_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLONNECK_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLPIERCING_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLPIERCING_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLRICKSHAWMAN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLRICKSHAWMAN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLRISEFALL3METHODS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLRISEFALL3METHODS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLSEPARATINGLINES_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLSEPARATINGLINES_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLSHOOTINGSTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLSHOOTINGSTAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLSHORTLINE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLSHORTLINE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLSPINNINGTOP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLSPINNINGTOP_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLSTALLEDPATTERN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLSTALLEDPATTERN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLSTICKSANDWICH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLSTICKSANDWICH_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLTAKURI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLTAKURI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLTASUKIGAP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLTASUKIGAP_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLTHRUSTING_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLTHRUSTING_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLTRISTAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLTRISTAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLUNIQUE3RIVER_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLUNIQUE3RIVER_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLUPSIDEGAP2CROWS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLUPSIDEGAP2CROWS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CDLXSIDEGAP3METHODS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CDLXSIDEGAP3METHODS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CEIL_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CEIL_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CMO_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CMO_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_CORREL_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_CORREL_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_COS_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_COS_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_COSH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_COSH_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_DEMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_DEMA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_DIV_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_DIV_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_DX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_DX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_EMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_EMA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_EXP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_EXP_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_FLOOR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_FLOOR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_HT_DCPERIOD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_HT_DCPERIOD_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_HT_DCPHASE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_HT_DCPHASE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_HT_PHASOR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_HT_PHASOR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_HT_SINE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_HT_SINE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_HT_TRENDLINE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_HT_TRENDLINE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_HT_TRENDMODE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_HT_TRENDMODE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_KAMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_KAMA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_LINEARREG_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_LINEARREG_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_LINEARREG_ANGLE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_LINEARREG_ANGLE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_LINEARREG_INTERCEPT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_LINEARREG_INTERCEPT_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_LINEARREG_SLOPE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_LINEARREG_SLOPE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_LN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_LN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_LOG10_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_LOG10_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MACD_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MACD_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MACDEXT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MACDEXT_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MACDFIX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MACDFIX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MAMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MAMA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MAVP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MAVP_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MAX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MAX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MAXINDEX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MAXINDEX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MEDPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MEDPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MFI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MFI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MIDPOINT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MIDPOINT_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MIDPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MIDPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MIN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MIN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MININDEX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MININDEX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MINMAX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MINMAX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MINMAXINDEX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MINMAXINDEX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MINUS_DI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MINUS_DI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MINUS_DM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MINUS_DM_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MOM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MOM_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_MULT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_MULT_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_NATR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_NATR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_OBV_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_OBV_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_PLUS_DI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_PLUS_DI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_PLUS_DM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_PLUS_DM_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_PPO_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_PPO_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ROC_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ROC_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ROCP_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ROCP_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ROCR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ROCR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ROCR100_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ROCR100_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_RSI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_RSI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_SAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_SAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_SAREXT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_SAREXT_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_SIN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_SIN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_SINH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_SINH_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_SMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_SMA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_SQRT_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_SQRT_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_STDDEV_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_STDDEV_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_STOCH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_STOCH_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_STOCHF_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_STOCHF_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_STOCHRSI_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_STOCHRSI_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_SUB_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_SUB_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_SUM_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_SUM_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_T3_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_T3_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_TAN_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_TAN_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_TANH_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_TANH_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_TEMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_TEMA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_TRANGE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_TRANGE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_TRIMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_TRIMA_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_TRIX_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_TRIX_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_TSF_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_TSF_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_TYPPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_TYPPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_ULTOSC_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_ULTOSC_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_VAR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_VAR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_WCLPRICE_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_WCLPRICE_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_WILLR_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_WILLR_FramePPLB( const TA_ParamHolderPriv *params ) +; + +/* Generated */ TA_RetCode TA_WMA_FramePP( const TA_ParamHolderPriv *params, +/* Generated */ int startIdx, +/* Generated */ int endIdx, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement ) +; +/* Generated */ unsigned int TA_WMA_FramePPLB( const TA_ParamHolderPriv *params ) +; + + +#endif + +/***************/ +/* End of File */ +/***************/ diff --git a/src/ta_abstract/ta_abstract.c b/src/ta_abstract/ta_abstract.c new file mode 100644 index 000000000..8c03e34a8 --- /dev/null +++ b/src/ta_abstract/ta_abstract.c @@ -0,0 +1,1313 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 020101 MF First version. + * 110302 MF Re-design the interface related to TA_CallFunc for being + * faster and use less memory allocation. + * 022904 MF Add TA_GetLookback + * 031404 MF Some function renaming for consistency and better + * Perl integration. + * 110206 AC Change volume and open interest to double + */ + +/* Description: + * Provide a way to abstract the call of the TA functions. + */ + +/**** Headers ****/ +#include +#include +#include +#include "ta_common.h" +#include "ta_memory.h" +#include "ta_abstract.h" +#include "ta_def_ui.h" +#include "ta_frame_priv.h" + +#include + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ + +/* The interface definition of all functions are accessible + * through one of the following 26 tables. + */ +extern const TA_FuncDef *TA_DEF_TableA, *TA_DEF_TableB, *TA_DEF_TableC, + *TA_DEF_TableD, *TA_DEF_TableE, *TA_DEF_TableF, + *TA_DEF_TableG, *TA_DEF_TableH, *TA_DEF_TableI, + *TA_DEF_TableJ, *TA_DEF_TableK, *TA_DEF_TableL, + *TA_DEF_TableM, *TA_DEF_TableN, *TA_DEF_TableO, + *TA_DEF_TableP, *TA_DEF_TableQ, *TA_DEF_TableR, + *TA_DEF_TableS, *TA_DEF_TableT, *TA_DEF_TableU, + *TA_DEF_TableV, *TA_DEF_TableW, *TA_DEF_TableX, + *TA_DEF_TableY, *TA_DEF_TableZ; + +extern const unsigned int TA_DEF_TableASize, TA_DEF_TableBSize, + TA_DEF_TableCSize, TA_DEF_TableDSize, + TA_DEF_TableESize, TA_DEF_TableFSize, + TA_DEF_TableGSize, TA_DEF_TableHSize, + TA_DEF_TableISize, TA_DEF_TableJSize, + TA_DEF_TableKSize, TA_DEF_TableLSize, + TA_DEF_TableMSize, TA_DEF_TableNSize, + TA_DEF_TableOSize, TA_DEF_TablePSize, + TA_DEF_TableQSize, TA_DEF_TableRSize, + TA_DEF_TableSSize, TA_DEF_TableTSize, + TA_DEF_TableUSize, TA_DEF_TableVSize, + TA_DEF_TableWSize, TA_DEF_TableXSize, + TA_DEF_TableYSize, TA_DEF_TableZSize; + +#ifndef TA_GEN_CODE + /* In gen_code, these value does not exist (they are generated by + * gen_code itself!) + * Consequently, the code, when being used to make the gen_code + * executable, must provide the same functionality without using + * these shortcuts. + */ + extern const TA_FuncDef **TA_PerGroupFuncDef[]; + extern const unsigned int TA_PerGroupSize[]; +#endif + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +#ifndef min + #define min(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +typedef struct +{ + unsigned int magicNumber; +} TA_StringTablePriv; + + +/**** Local functions declarations. ****/ + + +#ifdef TA_GEN_CODE + static TA_RetCode getGroupId( const char *groupString, unsigned int *groupId ); + static TA_RetCode getGroupSize( TA_GroupId groupId, unsigned int *groupSize ); + static TA_RetCode getFuncNameByIdx( TA_GroupId groupId, + unsigned int idx, + const char **stringPtr ); +#else + static TA_RetCode getGroupId( const char *groupString, unsigned int *groupId ); + static TA_RetCode getGroupSize( TA_GroupId groupId, unsigned int *groupSize ); + static TA_RetCode getFuncNameByIdx( TA_GroupId groupId, + unsigned int idx, + const char **stringPtr ); +#endif + +/**** Local variables definitions. ****/ + +static const TA_FuncDef **TA_DEF_Tables[26] = +{ + &TA_DEF_TableA, &TA_DEF_TableB, &TA_DEF_TableC, &TA_DEF_TableD, &TA_DEF_TableE, + &TA_DEF_TableF, &TA_DEF_TableG, &TA_DEF_TableH, &TA_DEF_TableI, &TA_DEF_TableJ, + &TA_DEF_TableK, &TA_DEF_TableL, &TA_DEF_TableM, &TA_DEF_TableN, &TA_DEF_TableO, + &TA_DEF_TableP, &TA_DEF_TableQ, &TA_DEF_TableR, &TA_DEF_TableS, &TA_DEF_TableT, + &TA_DEF_TableU, &TA_DEF_TableV, &TA_DEF_TableW, &TA_DEF_TableX, &TA_DEF_TableY, + &TA_DEF_TableZ +}; + +static const unsigned int *TA_DEF_TablesSize[26] = +{ + &TA_DEF_TableASize, &TA_DEF_TableBSize, &TA_DEF_TableCSize, + &TA_DEF_TableDSize, &TA_DEF_TableESize, &TA_DEF_TableFSize, + &TA_DEF_TableGSize, &TA_DEF_TableHSize, &TA_DEF_TableISize, + &TA_DEF_TableJSize, &TA_DEF_TableKSize, &TA_DEF_TableLSize, + &TA_DEF_TableMSize, &TA_DEF_TableNSize, &TA_DEF_TableOSize, + &TA_DEF_TablePSize, &TA_DEF_TableQSize, &TA_DEF_TableRSize, + &TA_DEF_TableSSize, &TA_DEF_TableTSize, &TA_DEF_TableUSize, + &TA_DEF_TableVSize, &TA_DEF_TableWSize, &TA_DEF_TableXSize, + &TA_DEF_TableYSize, &TA_DEF_TableZSize +}; + +/**** Global functions definitions. ****/ +TA_RetCode TA_GroupTableAlloc( TA_StringTable **table ) +{ + TA_StringTable *stringTable; + TA_StringTablePriv *stringTablePriv; + + if( table == NULL ) + { + return TA_BAD_PARAM; + } + + stringTable = (TA_StringTable *)TA_Malloc( sizeof(TA_StringTable) + sizeof(TA_StringTablePriv) ); + if( !stringTable ) + { + *table = NULL; + return TA_ALLOC_ERR; + } + + memset( stringTable, 0, sizeof(TA_StringTable) + sizeof(TA_StringTablePriv) ); + stringTablePriv = (TA_StringTablePriv *)(((char *)stringTable)+sizeof(TA_StringTable)); + stringTablePriv->magicNumber = TA_STRING_TABLE_GROUP_MAGIC_NB; + + stringTable->size = TA_NB_GROUP_ID; + stringTable->string = &TA_GroupString[0]; + stringTable->hiddenData = stringTablePriv; + + /* From this point, TA_FuncTableFree can be safely called. */ + + /* Success. Return the table to the caller. */ + *table = stringTable; + + return TA_SUCCESS; +} + +TA_RetCode TA_GroupTableFree( TA_StringTable *table ) +{ + TA_StringTablePriv *stringTablePriv; + + if( table ) + { + stringTablePriv = (TA_StringTablePriv *)table->hiddenData; + if( !stringTablePriv ) + { + return TA_INTERNAL_ERROR(1); + } + + if( stringTablePriv->magicNumber != TA_STRING_TABLE_GROUP_MAGIC_NB ) + { + return TA_BAD_OBJECT; + } + + TA_Free( table ); + } + + return TA_SUCCESS; +} + +/* Iterate in alphabetical order */ +TA_RetCode TA_ForEachFunc( TA_CallForEachFunc functionToCall, void *opaqueData ) +{ + const TA_FuncDef **funcDefTable; + const TA_FuncDef *funcDef; + const TA_FuncInfo *funcInfo; + unsigned int i, j, funcDefTableSize; + + if( functionToCall == NULL ) + { + return TA_BAD_PARAM; + } + + /* Iterate the tables (each table is for one letter) */ + for( i=0; i < 26; i++ ) + { + funcDefTable = TA_DEF_Tables[i]; + + /* Identify the table size. */ + funcDefTableSize = *TA_DEF_TablesSize[i]; + for( j=0; j < funcDefTableSize; j++ ) + { + funcDef = funcDefTable[j]; + if( !funcDef || !funcDef->funcInfo ) + return TA_INTERNAL_ERROR(3); + + funcInfo = funcDef->funcInfo; + if( !funcInfo ) + return TA_INTERNAL_ERROR(4); + (*functionToCall)( funcInfo, opaqueData ); + } + } + + return TA_SUCCESS; +} + +TA_RetCode TA_FuncTableAlloc( const char *group, TA_StringTable **table ) +{ + TA_RetCode retCode; + unsigned int i; + TA_StringTable *stringTable; + unsigned int groupId; /* TA_GroupId */ + unsigned int groupSize; + const char *stringPtr; + TA_StringTablePriv *stringTablePriv; + + if( (group == NULL) || (table == NULL ) ) + { + return TA_BAD_PARAM; + } + + *table = NULL; + stringPtr = NULL; + + /* Get information on the group. */ + retCode = getGroupId( group, &groupId ); + if( retCode != TA_SUCCESS ) + { + return retCode; + } + + retCode = getGroupSize( (TA_GroupId)groupId, &groupSize ); + if( retCode != TA_SUCCESS ) + { + return retCode; + } + + /* Allocate the table. */ + + stringTable = (TA_StringTable *)TA_Malloc( sizeof(TA_StringTable) + sizeof(TA_StringTablePriv) ); + if( !stringTable ) + { + *table = NULL; + return TA_ALLOC_ERR; + } + + memset( stringTable, 0, sizeof(TA_StringTable) + sizeof(TA_StringTablePriv) ); + stringTablePriv = (TA_StringTablePriv *)(((char *)stringTable)+sizeof(TA_StringTable)); + stringTablePriv->magicNumber = TA_STRING_TABLE_FUNC_MAGIC_NB; + stringTable->hiddenData = stringTablePriv; + + /* From this point, TA_FuncTableFree can be safely called. */ + stringTable->size = groupSize; + if( groupSize != 0 ) + { + stringTable->string = (const char **)TA_Malloc( (stringTable->size) * + sizeof(const char *) ); + + if( stringTable->string == NULL ) + { + *table = NULL; + TA_FuncTableFree( stringTable ); + return TA_ALLOC_ERR; + } + + memset( (void *)stringTable->string, 0, + (stringTable->size) * sizeof(const char *) ); + + for( i=0; i < stringTable->size; i++ ) + { + retCode = getFuncNameByIdx( (TA_GroupId)groupId, i, &stringPtr ); + + if( retCode != TA_SUCCESS ) + { + *table = NULL; + TA_FuncTableFree( stringTable ); + return TA_ALLOC_ERR; + } + + (stringTable->string)[i] = stringPtr; + } + } + + /* Return the table to the caller. */ + *table = stringTable; + + return TA_SUCCESS; +} + +TA_RetCode TA_FuncTableFree( TA_StringTable *table ) +{ + TA_StringTablePriv *stringTablePriv; + + if( table ) + { + stringTablePriv = (TA_StringTablePriv *)table->hiddenData; + if( !stringTablePriv ) + { + return TA_INTERNAL_ERROR(3); + } + + if( stringTablePriv->magicNumber != TA_STRING_TABLE_FUNC_MAGIC_NB ) + { + return TA_BAD_OBJECT; + } + + if( table->string ) + TA_Free( (void *)table->string ); + + TA_Free( table ); + } + + return TA_SUCCESS; +} + +TA_RetCode TA_GetFuncHandle( const char *name, const TA_FuncHandle **handle ) +{ + char firstChar, tmp; + const TA_FuncDef **funcDefTable; + const TA_FuncDef *funcDef; + const TA_FuncInfo *funcInfo; + unsigned int i, funcDefTableSize; + + /* A TA_FuncHandle is internally a TA_FuncDef. Let's find it + * by using the alphabetical tables. + */ + if( (name == NULL) || (handle == NULL) ) + { + return TA_BAD_PARAM; + } + + *handle = NULL; + + firstChar = name[0]; + + if( firstChar == '\0' ) + { + return TA_BAD_PARAM; + } + + tmp = (char)tolower( firstChar ); + + if( (tmp < 'a') || (tmp > 'z') ) + { + return TA_FUNC_NOT_FOUND; + } + + /* Identify the table. */ + tmp -= (char)'a'; + funcDefTable = TA_DEF_Tables[(int)tmp]; + + /* Identify the table size. */ + funcDefTableSize = *TA_DEF_TablesSize[(int)tmp]; + if( funcDefTableSize < 1 ) + { + return TA_FUNC_NOT_FOUND; + } + + /* Iterate all entries of the table and return as soon as found. */ + for( i=0; i < funcDefTableSize; i++ ) + { + funcDef = funcDefTable[i]; + if( !funcDef || !funcDef->funcInfo ) + return TA_INTERNAL_ERROR(3); + + funcInfo = funcDef->funcInfo; + if( !funcInfo ) + return TA_INTERNAL_ERROR(4); + + if( strcmp( funcInfo->name, name ) == 0 ) + { + *handle = (TA_FuncHandle *)funcDef; + return TA_SUCCESS; + } + } + + return TA_FUNC_NOT_FOUND; +} + +TA_RetCode TA_GetFuncInfo( const TA_FuncHandle *handle, + const TA_FuncInfo **funcInfo ) +{ + const TA_FuncDef *funcDef; + + if( !funcInfo || !handle ) + { + return TA_BAD_PARAM; + } + + /* Validate that this is a valid funcHandle. */ + funcDef = (const TA_FuncDef *)handle; + if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB ) + { + return TA_INVALID_HANDLE; + } + + *funcInfo = funcDef->funcInfo; + if( !funcDef->funcInfo ) + return TA_INVALID_HANDLE; + + return TA_SUCCESS; +} + +TA_RetCode TA_GetInputParameterInfo( const TA_FuncHandle *handle, + unsigned int paramIndex, + const TA_InputParameterInfo **info ) +{ + const TA_FuncDef *funcDef; + const TA_FuncInfo *funcInfo; + const TA_InputParameterInfo **inputTable; + + if( (handle == NULL) || (info == NULL) ) + { + return TA_BAD_PARAM; + } + + *info = NULL; + + /* Validate that this is a valid funcHandle. */ + funcDef = (const TA_FuncDef *)handle; + if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB ) + { + return TA_INVALID_HANDLE; + } + funcInfo = funcDef->funcInfo; + + if( !funcInfo ) return TA_INVALID_HANDLE; + + if( paramIndex >= funcInfo->nbInput ) + { + return TA_BAD_PARAM; + } + + inputTable = (const TA_InputParameterInfo **)funcDef->input; + + if( !inputTable ) + return TA_INTERNAL_ERROR(2); + + *info = inputTable[paramIndex]; + + if( !(*info) ) + return TA_INTERNAL_ERROR(3); + + return TA_SUCCESS; +} + +TA_RetCode TA_GetOptInputParameterInfo( const TA_FuncHandle *handle, + unsigned int paramIndex, + const TA_OptInputParameterInfo **info ) +{ + const TA_FuncDef *funcDef; + const TA_FuncInfo *funcInfo; + const TA_OptInputParameterInfo **inputTable; + + if( (handle == NULL) || (info == NULL) ) + { + return TA_BAD_PARAM; + } + + *info = NULL; + + /* Validate that this is a valid funcHandle. */ + funcDef = (const TA_FuncDef *)handle; + if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB ) + { + return TA_INVALID_HANDLE; + } + + funcInfo = funcDef->funcInfo; + + if( !funcInfo ) + return TA_INVALID_HANDLE; + + if( paramIndex >= funcInfo->nbOptInput ) + { + return TA_BAD_PARAM; + } + + inputTable = (const TA_OptInputParameterInfo **)funcDef->optInput; + + if( !inputTable ) + return TA_INTERNAL_ERROR(3); + + *info = inputTable[paramIndex]; + + if( !(*info) ) + return TA_INTERNAL_ERROR(4); + + return TA_SUCCESS; +} + +TA_RetCode TA_GetOutputParameterInfo( const TA_FuncHandle *handle, + unsigned int paramIndex, + const TA_OutputParameterInfo **info ) +{ + + const TA_FuncDef *funcDef; + const TA_FuncInfo *funcInfo; + const TA_OutputParameterInfo **outputTable; + + if( (handle == NULL) || (info == NULL) ) + { + return TA_BAD_PARAM; + } + + *info = NULL; + + /* Validate that this is a valid funcHandle. */ + funcDef = (const TA_FuncDef *)handle; + if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB ) + { + return TA_INVALID_HANDLE; + } + + funcInfo = funcDef->funcInfo; + + if( !funcInfo ) + { + return TA_INVALID_HANDLE; + } + + if( paramIndex >= funcInfo->nbOutput ) + { + return TA_BAD_PARAM; + } + + outputTable = (const TA_OutputParameterInfo **)funcDef->output; + + if( !outputTable ) + { + return TA_INTERNAL_ERROR(4); + } + + *info = outputTable[paramIndex]; + + if( !(*info) ) + { + return TA_INTERNAL_ERROR(5); + } + + return TA_SUCCESS; +} + +TA_RetCode TA_ParamHolderAlloc( const TA_FuncHandle *handle, + TA_ParamHolder **allocatedParams ) +{ + + TA_FuncDef *funcDef; + unsigned int allocSize, i; + TA_ParamHolderInput *input; + TA_ParamHolderOptInput *optInput; + TA_ParamHolderOutput *output; + + const TA_FuncInfo *funcInfo; + TA_ParamHolder *newParams; + TA_ParamHolderPriv *newParamsPriv; + + const TA_InputParameterInfo **inputInfo; + const TA_OptInputParameterInfo **optInputInfo; + const TA_OutputParameterInfo **outputInfo; + + /* Validate the parameters. */ + if( !handle || !allocatedParams) + { + return TA_BAD_PARAM; + } + + /* Validate that this is a valid funcHandle. */ + funcDef = (TA_FuncDef *)handle; + if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB ) + { + *allocatedParams = NULL; + return TA_INVALID_HANDLE; + } + + /* Get the TA_FuncInfo. */ + funcInfo = funcDef->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + + /* Allocate the TA_ParamHolder. */ + newParams = (TA_ParamHolder *)TA_Malloc( sizeof(TA_ParamHolder) + sizeof(TA_ParamHolderPriv)); + if( !newParams ) + { + *allocatedParams = NULL; + return TA_ALLOC_ERR; + } + + memset( newParams, 0, sizeof(TA_ParamHolder) + sizeof(TA_ParamHolderPriv) ); + newParamsPriv = (TA_ParamHolderPriv *)(((char *)newParams)+sizeof(TA_ParamHolder)); + newParamsPriv->magicNumber = TA_PARAM_HOLDER_PRIV_MAGIC_NB; + newParams->hiddenData = newParamsPriv; + + /* From this point, TA_ParamHolderFree can be safely called. */ + + /* Allocate the array of structure holding the info + * for each parameter. + */ + if( funcInfo->nbInput == 0 ) return TA_INTERNAL_ERROR(2); + + allocSize = (funcInfo->nbInput) * sizeof(TA_ParamHolderInput); + input = (TA_ParamHolderInput *)TA_Malloc( allocSize ); + + if( !input ) + { + TA_ParamHolderFree( newParams ); + *allocatedParams = NULL; + return TA_ALLOC_ERR; + } + memset( input, 0, allocSize ); + newParamsPriv->in = input; + + if( funcInfo->nbOptInput == 0 ) + optInput = NULL; + else + { + allocSize = (funcInfo->nbOptInput) * sizeof(TA_ParamHolderOptInput); + optInput = (TA_ParamHolderOptInput *)TA_Malloc( allocSize ); + + if( !optInput ) + { + TA_ParamHolderFree( newParams ); + *allocatedParams = NULL; + return TA_ALLOC_ERR; + } + memset( optInput, 0, allocSize ); + } + newParamsPriv->optIn = optInput; + + allocSize = (funcInfo->nbOutput) * sizeof(TA_ParamHolderOutput); + output = (TA_ParamHolderOutput *)TA_Malloc( allocSize ); + if( !output ) + { + TA_ParamHolderFree( newParams ); + *allocatedParams = NULL; + return TA_ALLOC_ERR; + } + memset( output, 0, allocSize ); + newParamsPriv->out = output; + + newParamsPriv->funcInfo = funcInfo; + + inputInfo = (const TA_InputParameterInfo **)funcDef->input; + optInputInfo = (const TA_OptInputParameterInfo **)funcDef->optInput; + outputInfo = (const TA_OutputParameterInfo **)funcDef->output; + + for( i=0; i < funcInfo->nbInput; i++ ) + { + input[i].inputInfo = inputInfo[i]; + newParamsPriv->inBitmap <<= 1; + newParamsPriv->inBitmap |= 1; + } + + for( i=0; i < funcInfo->nbOptInput; i++ ) + { + optInput[i].optInputInfo = optInputInfo[i]; + if( optInput[i].optInputInfo->type == TA_OptInput_RealRange ) + optInput[i].data.optInReal = optInputInfo[i]->defaultValue; + else + optInput[i].data.optInInteger = (TA_Integer)optInputInfo[i]->defaultValue; + } + + for( i=0; i < funcInfo->nbOutput; i++ ) + { + output[i].outputInfo = outputInfo[i]; + newParamsPriv->outBitmap <<= 1; + newParamsPriv->outBitmap |= 1; + } + + /* Succcess, return the result to the caller. */ + *allocatedParams = newParams; + + return TA_SUCCESS; +} + +TA_RetCode TA_ParamHolderFree( TA_ParamHolder *paramsToFree ) +{ + TA_ParamHolderPriv *paramPriv; + + TA_ParamHolderInput *input; + TA_ParamHolderOptInput *optInput; + TA_ParamHolderOutput *output; + + if( !paramsToFree ) + { + return TA_SUCCESS; + } + + paramPriv = paramsToFree->hiddenData; + + if( !paramPriv ) + { + return TA_INVALID_PARAM_HOLDER; + } + + if( paramPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + optInput = paramPriv->optIn; + if( optInput ) + TA_Free( optInput ); + + input = paramPriv->in; + if( input ) + TA_Free( input ); + + output = paramPriv->out; + if( output ) + TA_Free( output ); + + TA_Free( paramsToFree ); + + return TA_SUCCESS; +} + + +TA_RetCode TA_SetInputParamIntegerPtr( TA_ParamHolder *param, + unsigned int paramIndex, + const TA_Integer *value ) +{ + + TA_ParamHolderPriv *paramHolderPriv; + const TA_InputParameterInfo *paramInfo; + const TA_FuncInfo *funcInfo; + + if( (param == NULL) || (value == NULL) ) + { + return TA_BAD_PARAM; + } + + paramHolderPriv = (TA_ParamHolderPriv *)(param->hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Make sure this index really exist. */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + + if( paramIndex >= funcInfo->nbInput ) + { + return TA_BAD_PARAM; + } + + /* Verify the type of the parameter. */ + paramInfo = paramHolderPriv->in[paramIndex].inputInfo; + if( !paramInfo ) return TA_INTERNAL_ERROR(2); + if( paramInfo->type != TA_Input_Integer ) + { + return TA_INVALID_PARAM_HOLDER_TYPE; + } + + /* keep a copy of the provided parameter. */ + paramHolderPriv->in[paramIndex].data.inInteger = value; + + /* This parameter is now initialized, clear the corresponding bit. */ + paramHolderPriv->inBitmap &= ~(1<hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Make sure this index really exist. */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + + if( paramIndex >= funcInfo->nbInput ) + { + return TA_BAD_PARAM; + } + + /* Verify the type of the parameter. */ + paramInfo = paramHolderPriv->in[paramIndex].inputInfo; + if( !paramInfo ) return TA_INTERNAL_ERROR(2); + if( paramInfo->type != TA_Input_Real ) + { + return TA_INVALID_PARAM_HOLDER_TYPE; + } + + /* keep a copy of the provided parameter. */ + paramHolderPriv->in[paramIndex].data.inReal = value; + + /* This parameter is now initialized, clear the corresponding bit. */ + paramHolderPriv->inBitmap &= ~(1<hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Make sure this index really exist. */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + if( paramIndex >= funcInfo->nbInput ) + { + return TA_BAD_PARAM; + } + + /* Verify the type of the parameter. */ + paramInfo = paramHolderPriv->in[paramIndex].inputInfo; + if( !paramInfo ) return TA_INTERNAL_ERROR(2); + if( paramInfo->type != TA_Input_Price ) + { + return TA_INVALID_PARAM_HOLDER_TYPE; + } + + /* keep a copy of the provided parameter. */ + #define SET_PARAM_INFO(lowerParam,upperParam) \ + { \ + if( paramInfo->flags & TA_IN_PRICE_##upperParam ) \ + { \ + if( lowerParam == NULL ) \ + { \ + return TA_BAD_PARAM; \ + } \ + paramHolderPriv->in[paramIndex].data.inPrice.lowerParam = lowerParam; \ + } \ + } + + SET_PARAM_INFO(open, OPEN ); + SET_PARAM_INFO(high, HIGH ); + SET_PARAM_INFO(low, LOW ); + SET_PARAM_INFO(close, CLOSE ); + SET_PARAM_INFO(volume, VOLUME ); + SET_PARAM_INFO(openInterest, OPENINTEREST ); + + #undef SET_PARAM_INFO + + /* This parameter is now initialized, clear the corresponding bit. */ + paramHolderPriv->inBitmap &= ~(1<hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Make sure this index really exist. */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + if( paramIndex >= funcInfo->nbOptInput ) + { + return TA_BAD_PARAM; + } + + /* Verify the type of the parameter. */ + paramInfo = paramHolderPriv->optIn[paramIndex].optInputInfo; + if( !paramInfo ) return TA_INTERNAL_ERROR(2); + if( (paramInfo->type != TA_OptInput_IntegerRange) && + (paramInfo->type != TA_OptInput_IntegerList) ) + { + return TA_INVALID_PARAM_HOLDER_TYPE; + } + + /* keep a copy of the provided parameter. */ + paramHolderPriv->optIn[paramIndex].data.optInInteger = value; + + return TA_SUCCESS; +} + +TA_RetCode TA_SetOptInputParamReal( TA_ParamHolder *param, + unsigned int paramIndex, + TA_Real value ) +{ + TA_ParamHolderPriv *paramHolderPriv; + const TA_OptInputParameterInfo *paramInfo; + const TA_FuncInfo *funcInfo; + + if( param == NULL ) + { + return TA_BAD_PARAM; + } + + paramHolderPriv = (TA_ParamHolderPriv *)(param->hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Make sure this index really exist. */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + + if( paramIndex >= funcInfo->nbOptInput ) + { + return TA_BAD_PARAM; + } + + /* Verify the type of the parameter. */ + paramInfo = paramHolderPriv->optIn[paramIndex].optInputInfo; + if( !paramInfo ) return TA_INTERNAL_ERROR(2); + if( (paramInfo->type != TA_OptInput_RealRange) && + (paramInfo->type != TA_OptInput_RealList) ) + { + return TA_INVALID_PARAM_HOLDER_TYPE; + } + + /* keep a copy of the provided parameter. */ + paramHolderPriv->optIn[paramIndex].data.optInReal = value; + + return TA_SUCCESS; +} + + +/* Setup the parameters indicating where to store the output. */ +TA_RetCode TA_SetOutputParamIntegerPtr( TA_ParamHolder *param, + unsigned int paramIndex, + TA_Integer *out ) +{ + TA_ParamHolderPriv *paramHolderPriv; + const TA_OutputParameterInfo *paramInfo; + const TA_FuncInfo *funcInfo; + + if( (param == NULL) || (out == NULL) ) + { + return TA_BAD_PARAM; + } + + paramHolderPriv = (TA_ParamHolderPriv *)(param->hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Make sure this index really exist. */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + + if( paramIndex >= funcInfo->nbOutput ) + { + return TA_BAD_PARAM; + } + + /* Verify the type of the parameter. */ + paramInfo = paramHolderPriv->out[paramIndex].outputInfo; + if( !paramInfo ) return TA_INTERNAL_ERROR(2); + if( paramInfo->type != TA_Output_Integer ) + { + return TA_INVALID_PARAM_HOLDER_TYPE; + } + + /* keep a copy of the provided parameter. */ + paramHolderPriv->out[paramIndex].data.outInteger = out; + + /* This parameter is now initialized, clear the corresponding bit. */ + paramHolderPriv->outBitmap &= ~(1<hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Make sure this index really exist. */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + + if( paramIndex >= funcInfo->nbOutput ) + { + return TA_BAD_PARAM; + } + + /* Verify the type of the parameter. */ + paramInfo = paramHolderPriv->out[paramIndex].outputInfo; + if( !paramInfo ) return TA_INTERNAL_ERROR(2); + if( paramInfo->type != TA_Output_Real ) + { + return TA_INVALID_PARAM_HOLDER_TYPE; + } + + /* keep a copy of the provided parameter. */ + paramHolderPriv->out[paramIndex].data.outReal = out; + + /* This parameter is now initialized, clear the corresponding bit. */ + paramHolderPriv->outBitmap &= ~(1<hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Get the pointer on the lookback function. */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + + funcDef = (const TA_FuncDef *)funcInfo->handle; + if( !funcDef ) return TA_INTERNAL_ERROR(2); + lookbackFunction = funcDef->lookback; + if( !lookbackFunction ) return TA_INTERNAL_ERROR(2); + + /* Perform the function call. */ + *lookback = (*lookbackFunction)( paramHolderPriv ); + + return TA_SUCCESS; +} + +/* Finally, call a TA function with the parameters. */ +TA_RetCode TA_CallFunc( const TA_ParamHolder *param, + TA_Integer startIdx, + TA_Integer endIdx, + TA_Integer *outBegIdx, + TA_Integer *outNbElement ) +{ + TA_RetCode retCode; + const TA_ParamHolderPriv *paramHolderPriv; + + const TA_FuncDef *funcDef; + const TA_FuncInfo *funcInfo; + TA_FrameFunction function; + + if( (param == NULL) || + (outBegIdx == NULL) || + (outNbElement == NULL) ) + { + return TA_BAD_PARAM; + } + + paramHolderPriv = (TA_ParamHolderPriv *)(param->hiddenData); + if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB ) + { + return TA_INVALID_PARAM_HOLDER; + } + + /* Check that all parameters are initialize (except the optInput). */ + if( paramHolderPriv->inBitmap != 0 ) + { + return TA_INPUT_NOT_ALL_INITIALIZE; + } + + if( paramHolderPriv->outBitmap != 0 ) + { + return TA_OUTPUT_NOT_ALL_INITIALIZE; + } + + /* Get the pointer on the function */ + funcInfo = paramHolderPriv->funcInfo; + if( !funcInfo ) return TA_INVALID_HANDLE; + funcDef = (const TA_FuncDef *)funcInfo->handle; + if( !funcDef ) return TA_INTERNAL_ERROR(2); + function = funcDef->function; + if( !function ) return TA_INTERNAL_ERROR(2); + + /* Perform the function call. */ + retCode = (*function)( paramHolderPriv, startIdx, endIdx, + outBegIdx, outNbElement ); + return retCode; +} + +/**** Local functions definitions. ****/ +static TA_RetCode getGroupId( const char *groupString, unsigned int *groupId ) +{ + unsigned int i; + + for( i=0; i < TA_NB_GROUP_ID; i++ ) + { + if( strcmp( TA_GroupString[i], groupString ) == 0 ) + { + *groupId = i; + return TA_SUCCESS; + } + } + + return TA_GROUP_NOT_FOUND; +} + +static TA_RetCode getGroupSize( TA_GroupId groupId, unsigned int *groupSize ) +{ + #ifdef TA_GEN_CODE + /* Code used only when compiled with gen_code. */ + + unsigned int i, j; + const TA_FuncDef **funcDefTable; + const TA_FuncDef *funcDef; + unsigned int tableSize; + unsigned int nbFuncFound; + + if( groupId >= TA_NB_GROUP_ID ) return TA_INTERNAL_ERROR(2); + if( !groupSize ) return TA_INTERNAL_ERROR(2); + + nbFuncFound = 0; + for( i=0; i < 26; i++ ) + { + funcDefTable = TA_DEF_Tables[i]; + tableSize = *(TA_DEF_TablesSize[i]); + + for( j=0; j < tableSize; j++ ) + { + funcDef = funcDefTable[j]; + if( funcDef && (funcDef->groupId == groupId) ) + nbFuncFound++; + } + } + + *groupSize = nbFuncFound; + + return TA_SUCCESS; + #else + /* Optimized code in the final library. */ + *groupSize = TA_PerGroupSize[groupId]; + + return TA_SUCCESS; + #endif +} + +#ifdef TA_GEN_CODE + static TA_RetCode getFuncNameByIdx( TA_GroupId groupId, + unsigned int idx, + const char **stringPtr ) +#else + static TA_RetCode getFuncNameByIdx( TA_GroupId groupId, + unsigned int idx, + const char **stringPtr ) +#endif +{ + #ifdef TA_GEN_CODE + /* Code used only when compiled with gen_code. */ + + unsigned int curIdx; + unsigned int i, j, found; + const TA_FuncDef **funcDefTable; + unsigned int tableSize; + const TA_FuncInfo *funcInfo; + + if( !stringPtr ) return TA_INTERNAL_ERROR(2); + + curIdx = 0; + found = 0; + for( i=0; (i < 26) && !found; i++ ) + { + funcDefTable = TA_DEF_Tables[i]; + tableSize = *(TA_DEF_TablesSize[i]); + + for( j=0; (j < tableSize) && !found; j++ ) + { + if( funcDefTable[j]->groupId == groupId ) + { + if( idx == curIdx ) + { + funcInfo = funcDefTable[j]->funcInfo; + if( !funcInfo ) return TA_INTERNAL_ERROR(2); + *stringPtr = funcInfo->name; + found = 1; + } + curIdx++; + } + } + } + + if( found != 1 ) return TA_INTERNAL_ERROR(2); + if( !(*stringPtr) ) return TA_INTERNAL_ERROR(2); + + return TA_SUCCESS; + #else + /* Optimized code in the final library. */ + const TA_FuncDef **funcDefTable; + const TA_FuncInfo *funcInfo; + + funcDefTable = TA_PerGroupFuncDef[groupId]; + funcInfo = funcDefTable[idx]->funcInfo; + *stringPtr = funcInfo->name; + + return TA_SUCCESS; + #endif +} diff --git a/src/ta_abstract/ta_def_ui.c b/src/ta_abstract/ta_def_ui.c new file mode 100644 index 000000000..49d8adbcf --- /dev/null +++ b/src/ta_abstract/ta_def_ui.c @@ -0,0 +1,554 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 130101 MF First version. + * 111503 MF Add TA_DEF_UI_Input_Price_CV + */ + +/* Description: + * Defines const structures representing how data can be + * input/output from the TA functions. + * These structure are mainly used to build the tables\table.c files. + */ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +const char TA_GroupId_MathOperatorsString[] = "Math Operators"; +const char TA_GroupId_MathTransformString[] = "Math Transform"; +const char TA_GroupId_OverlapStudiesString[] = "Overlap Studies"; +const char TA_GroupId_VolatilityIndicatorsString[] = "Volatility Indicators"; +const char TA_GroupId_MomentumIndicatorsString[] = "Momentum Indicators"; +const char TA_GroupId_CycleIndicatorsString[] = "Cycle Indicators"; +const char TA_GroupId_VolumeIndicatorsString[] = "Volume Indicators"; +const char TA_GroupId_PatternRecognitionString[] = "Pattern Recognition"; +const char TA_GroupId_StatisticString[] = "Statistic Functions"; +const char TA_GroupId_PriceTransformString[] = "Price Transform"; + +const char *TA_GroupString[TA_NB_GROUP_ID] = +{ + &TA_GroupId_MathOperatorsString[0], + &TA_GroupId_MathTransformString[0], + &TA_GroupId_OverlapStudiesString[0], + &TA_GroupId_VolatilityIndicatorsString[0], + &TA_GroupId_MomentumIndicatorsString[0], + &TA_GroupId_CycleIndicatorsString[0], + &TA_GroupId_VolumeIndicatorsString[0], + &TA_GroupId_PatternRecognitionString[0], + &TA_GroupId_StatisticString[0], + &TA_GroupId_PriceTransformString[0] +}; + +/************************************************************* + * Define from here the TA_InputParameterInfo + * These shall be sufficient for all possible TA functions. + *************************************************************/ +const TA_InputParameterInfo TA_DEF_UI_Input_Price_OHLCV = + { TA_Input_Price, "inPriceOHLCV", + TA_IN_PRICE_OPEN | + TA_IN_PRICE_HIGH | + TA_IN_PRICE_LOW | + TA_IN_PRICE_CLOSE | + TA_IN_PRICE_VOLUME }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Price_HLCV = + { TA_Input_Price, "inPriceHLCV", + TA_IN_PRICE_HIGH | + TA_IN_PRICE_LOW | + TA_IN_PRICE_CLOSE | + TA_IN_PRICE_VOLUME }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Price_OHLC = + { TA_Input_Price, "inPriceOHLC", + TA_IN_PRICE_OPEN | + TA_IN_PRICE_HIGH | + TA_IN_PRICE_LOW | + TA_IN_PRICE_CLOSE }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Price_HLC = + { TA_Input_Price, "inPriceHLC", + TA_IN_PRICE_HIGH | + TA_IN_PRICE_LOW | + TA_IN_PRICE_CLOSE }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Price_HL = + { TA_Input_Price, "inPriceHL", + TA_IN_PRICE_HIGH | + TA_IN_PRICE_LOW }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Price_CV = + { TA_Input_Price, "inPriceCV", + TA_IN_PRICE_CLOSE | + TA_IN_PRICE_VOLUME }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Price_V = + { TA_Input_Price, "inPriceV", + TA_IN_PRICE_VOLUME }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Real = + { TA_Input_Real, "inReal", 0 }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Periods = + { TA_Input_Real, "inPeriods", 0 }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Real0 = + { TA_Input_Real, "inReal0", 0 }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Real1 = + { TA_Input_Real, "inReal1", 0 }; + +const TA_InputParameterInfo TA_DEF_UI_Input_Integer = + { TA_Input_Integer, "inInteger", 0 }; + + +/************************************************************* + * Define from here the TA_OutputParameterInfo + * These shall be sufficient for most of the TA functions. + *************************************************************/ +const TA_OutputParameterInfo TA_DEF_UI_Output_Real = + { TA_Output_Real, "outReal", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Integer = + { TA_Output_Integer, "outInteger", TA_OUT_LINE }; + +/***************************************************** + * Define from here the TA_Integer ranges + ****************************************************/ + +const TA_IntegerRange TA_DEF_TimePeriod_Positive = +{ + 1, /* min */ + 100000, /* max */ + 1, /* suggested start */ + 200, /* suggested end */ + 1 /* suggested increment */ +}; + +const TA_IntegerRange TA_DEF_TimePeriod_Positive_Minimum5 = +{ + 5, /* min */ + 100000, /* max */ + 5, /* suggested start */ + 200, /* suggested end */ + 1 /* suggested increment */ +}; + +const TA_IntegerRange TA_DEF_TimePeriod_Positive_Minimum2 = +{ + 2, /* min */ + 100000, /* max */ + 4, /* suggested start */ + 200, /* suggested end */ + 1 /* suggested increment */ +}; + +const TA_IntegerRange TA_DEF_HorizontalShiftPeriod = +{ + -200, /* min */ + 200, /* max */ + 0, /* suggested start */ + 8, /* suggested end */ + 1 /* suggested increment */ +}; + + +/***************************************************** + * Define from here the TA_Real ranges + ****************************************************/ +const TA_RealRange TA_DEF_VerticalShiftPercent = +{ + -99.0, /* min */ + 99.0, /* max */ + 1, /* precision */ + -10.0, /* suggested start */ + 10.0, /* suggested end */ + 0.5 /* suggested increment */ +}; + +const TA_RealRange TA_DEF_NbDeviation = +{ + TA_REAL_MIN, /* min */ + TA_REAL_MAX, /* max */ + 2, /* precision */ + -2.0, /* suggested start */ + 2.0, /* suggested end */ + 0.2 /* suggested increment */ +}; + +const TA_RealRange TA_DEF_ZeroToOne = +{ + 0.00, /* min */ + 1.00, /* max */ + 2, /* precision */ + 0.01, /* suggested start */ + 1.00, /* suggested end */ + 0.05 /* suggested increment */ +}; + +const TA_RealRange TA_DEF_RealPositive = +{ + 0.00, /* min */ + TA_REAL_MAX, /* max */ + 0, /* precision */ + 0.0, /* suggested start */ + 0.0, /* suggested end */ + 0.0 /* suggested increment */ +}; + +/***************************************************** + * Define from here the TA_OptInputParameterInfo. + ****************************************************/ + +const TA_OptInputParameterInfo TA_DEF_UI_MinPeriod = +{ + TA_OptInput_IntegerRange, /* type */ + "optInMinPeriod", /* paramName */ + 0, /* flags */ + + "Minimum Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 2, /* defaultValue */ + "Value less than minimum will be changed to Minimum period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_MaxPeriod = +{ + TA_OptInput_IntegerRange, /* type */ + "optInMaxPeriod", /* paramName */ + 0, /* flags */ + + "Maximum Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 30, /* defaultValue */ + "Value higher than maximum will be changed to Maximum period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_30_MINIMUM2 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 30, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_21_MINIMUM2 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 21, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_14_MINIMUM2 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 14, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_14_MINIMUM5 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum5, /* dataSet */ + 14, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_10_MINIMUM2 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 10, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_5_MINIMUM2 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 5, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_30 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 30, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_14 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 14, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_10 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 10, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_5 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod", /* paramName */ + 0, /* flags */ + + "Time Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 5, /* defaultValue */ + "Number of period", /* hint */ + + NULL /* helpFile */ +}; + + +/* Use for the multiplier of standard deviations. */ +const TA_OptInputParameterInfo TA_DEF_UI_NbDeviation = +{ + TA_OptInput_RealRange, /* type */ + "optInNbDev", /* paramName */ + 0, /* flags */ + + "Deviations", /* displayName */ + (const void *)&TA_DEF_NbDeviation, /* dataSet */ + 1.0, /* defaultValue */ + "Nb of deviations", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_Penetration_30 = +{ + TA_OptInput_RealRange, /* type */ + "optInPenetration", /* paramName */ + 0, /* flags */ + + "Penetration", /* displayName */ + (const void *)&TA_DEF_RealPositive, /* dataSet */ + 0.3, /* defaultValue */ + "Percentage of penetration of a candle within another candle", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_Penetration_50 = +{ + TA_OptInput_RealRange, /* type */ + "optInPenetration", /* paramName */ + 0, /* flags */ + + "Penetration", /* displayName */ + (const void *)&TA_DEF_RealPositive, /* dataSet */ + 0.5, /* defaultValue */ + "Percentage of penetration of a candle within another candle", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_VerticalShift = +{ + TA_OptInput_RealRange, /* type */ + "optInVertShift", /* paramName */ + TA_OPTIN_IS_PERCENT, /* flags */ + + "Vertical Shift", /* displayName */ + (const void *)&TA_DEF_VerticalShiftPercent, /* dataSet */ + 0, /* defaultValue */ + "Positive number shift upwards, negative downwards", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_HorizontalShift = +{ + TA_OptInput_IntegerRange, /* type */ + "optInHorizShift", /* paramName */ + 0, /* flags */ + + "Horizontal Shift", /* displayName */ + (const void *)&TA_DEF_HorizontalShiftPeriod, /* dataSet */ + 0, /* defaultValue */ + "Positive number shift 'n' period to the right, negative shift to the left", /* hint */ + + NULL /* helpFile */ +}; + +/* Define the values available for the MA function. + * + * Many TA function using the MA internally may wish to + * re-use this parameter as one of their own. That way a + * new MA will provide automatically a new way of calculating + * to a multitude of other TA functions. + */ +static const TA_IntegerDataPair TA_MA_TypeDataPair[] = +{ + {0,"SMA"}, + {1,"EMA"}, + {2,"WMA"}, + {3,"DEMA" }, + {4,"TEMA" }, + {5,"TRIMA"}, + {6,"KAMA" }, + {7,"MAMA" }, + {8,"T3"} + /*{...,"Linear Regression"}*/ +}; + +const TA_IntegerList TA_MA_TypeList = +{ + &TA_MA_TypeDataPair[0], + sizeof(TA_MA_TypeDataPair)/sizeof(TA_IntegerDataPair) +}; + +const TA_OptInputParameterInfo TA_DEF_UI_MA_Method = +{ + TA_OptInput_IntegerList, /* type */ + "optInMAType", /* paramName */ + 0, /* flags */ + + "MA Type", /* displayName */ + (const void *)&TA_MA_TypeList, /* dataSet */ + 0, /* defaultValue = simple average */ + "Type of Moving Average", /* hint */ + + NULL /* helpFile */ +}; + +/* When a TA function needs two period (often called + * a fast and slow period). + */ +const TA_OptInputParameterInfo TA_DEF_UI_Fast_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInFastPeriod", /* paramName */ + 0, /* flags */ + + "Fast Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 12, /* defaultValue */ + "Number of period for the fast MA", /* hint */ + + NULL /* helpFile */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_Slow_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInSlowPeriod", /* paramName */ + 0, /* flags */ + + "Slow Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 26, /* defaultValue */ + "Number of period for the slow MA", /* hint */ + + NULL /* helpFile */ +}; + diff --git a/src/ta_abstract/ta_def_ui.h b/src/ta_abstract/ta_def_ui.h new file mode 100644 index 000000000..a02f0c4c7 --- /dev/null +++ b/src/ta_abstract/ta_def_ui.h @@ -0,0 +1,291 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TA_DEF_UI_H +#define TA_DEF_UI_H + +/* Offer pre-defined user interface constant. + * + * This allows to avoid to duplicate static data for + * common user interface elements. + */ + +#ifndef TA_ABSTRACT_H + #include "ta_abstract.h" +#endif + +#ifndef TA_FRAME_PRIV_H + #include "ta_frame_priv.h" +#endif + +#if !defined(TA_GEN_CODE) && !defined( TA_FRAME_H ) + #include "ta_frame.h" +#endif + +typedef enum +{ + /* If you modify this enum, make sure you update ta_def_ui.c */ + TA_GroupId_MathOperators, + TA_GroupId_MathTransform, + TA_GroupId_OverlapStudies, + TA_GroupId_VolatilityIndicators, + TA_GroupId_MomentumIndicators, + TA_GroupId_CycleIndicators, + TA_GroupId_VolumeIndicators, + TA_GroupId_PatternRecognition, + TA_GroupId_Statistic, + TA_GroupId_PriceTransform, + TA_NB_GROUP_ID +} TA_GroupId; + +extern const char TA_GroupId_MathOperatorsString[]; +extern const char TA_GroupId_MathTransformString[]; +extern const char TA_GroupId_OverlapStudiesString[]; +extern const char TA_GroupId_VolatilityIndicatorsString[]; +extern const char TA_GroupId_MomentumIndicatorsString[]; +extern const char TA_GroupId_CycleIndicatorsString[]; +extern const char TA_GroupId_VolumeIndicatorsString[]; +extern const char TA_GroupId_PatternRecognitionString[]; +extern const char TA_GroupId_StatisticString[]; +extern const char TA_GroupId_PriceTransformString[]; + +extern const char *TA_GroupString[TA_NB_GROUP_ID]; + +/* Inputs */ +extern const TA_InputParameterInfo TA_DEF_UI_Input_Real; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Real0; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Real1; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Integer; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Price_OHLCV; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Price_HLCV; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Price_OHLC; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Price_HLC; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Price_HL; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Price_CV; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Price_V; +extern const TA_InputParameterInfo TA_DEF_UI_Input_Periods; + + +/* Outputs. */ +extern const TA_OutputParameterInfo TA_DEF_UI_Output_Real; +extern const TA_OutputParameterInfo TA_DEF_UI_Output_Integer; +extern const TA_OutputParameterInfo TA_DEF_UI_Output_Lines; + +/* Optional Inputs. */ +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_30; +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_14; +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_10; +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_5; + +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_30_MINIMUM2; +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_21_MINIMUM2; +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_14_MINIMUM2; +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_14_MINIMUM5; +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_10_MINIMUM2; +extern const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_5_MINIMUM2; + +extern const TA_OptInputParameterInfo TA_DEF_UI_VerticalShift; +extern const TA_OptInputParameterInfo TA_DEF_UI_HorizontalShift; + +extern const TA_OptInputParameterInfo TA_DEF_UI_MA_Method; +extern const TA_OptInputParameterInfo TA_DEF_UI_Fast_Period; +extern const TA_OptInputParameterInfo TA_DEF_UI_Slow_Period; + +extern const TA_OptInputParameterInfo TA_DEF_UI_NbDeviation; + +extern const TA_OptInputParameterInfo TA_DEF_UI_Penetration_30; +extern const TA_OptInputParameterInfo TA_DEF_UI_Penetration_50; + +extern const TA_OptInputParameterInfo TA_DEF_UI_MinPeriod; +extern const TA_OptInputParameterInfo TA_DEF_UI_MaxPeriod; + +/* Re-usable ranges. */ +extern const TA_IntegerRange TA_DEF_TimePeriod_Positive; +extern const TA_IntegerRange TA_DEF_TimePeriod_Positive_Minimum2; +extern const TA_IntegerRange TA_DEF_TimePeriod_Positive_Minimum5; + +extern const TA_RealRange TA_DEF_VerticalShiftPercent; +extern const TA_IntegerRange TA_DEF_HorizontalShiftPeriod; +extern const TA_RealRange TA_DEF_NbDeviation; +extern const TA_RealRange TA_DEF_ZeroToOne; +extern const TA_RealRange TA_DEF_RealPositive; + +/* Useful to build your own TA_DEF_UI with the list of + * implemented Moving Average type. + */ +extern const TA_IntegerList TA_MA_TypeList; + +/* An internal structure for coordinating all these const info. + * One TA_FuncDef instance will exist for each TA function. + */ +typedef struct +{ + /* Magic number is used to detect internal error. */ + const unsigned int magicNumber; + + /* The function will belong to this group. */ + const TA_GroupId groupId; + + /* Some more info. */ + const TA_FuncInfo * const funcInfo; + + /* Description of the parameters. */ + const TA_InputParameterInfo * const input; + const TA_OptInputParameterInfo * const optInput; + const TA_OutputParameterInfo * const output; + + /* Entry point of the TA function and its lookback function. */ + const TA_FrameFunction function; + const TA_FrameLookback lookback; +} TA_FuncDef; + +/* The following MACROs are helpers being used in + * the tables\table.c files. + */ +#if !defined( TA_GEN_CODE ) + /* This definition is used when compiling the end-user library. */ + #define DEF_FUNCTION( name, \ + groupId, \ + hint, \ + camelCaseName, \ + flags ) \ + \ + TA_FuncInfo TA_INFO_##name; \ + \ + const TA_FuncDef TA_DEF_##name = \ + { \ + TA_FUNC_DEF_MAGIC_NB, \ + groupId, \ + &TA_INFO_##name, \ + (const TA_InputParameterInfo * const)&TA_##name##_Inputs[0], \ + (const TA_OptInputParameterInfo * const)&TA_##name##_OptInputs[0], \ + (const TA_OutputParameterInfo * const)&TA_##name##_Outputs[0], \ + TA_##name##_FramePP, \ + TA_##name##_FramePPLB \ + }; \ + TA_FuncInfo TA_INFO_##name = \ + { \ + (const char * const)#name, \ + (const char * const)groupId##String, \ + (const char * const)hint, \ + (const char * const)camelCaseName, \ + (const int)flags, \ + (sizeof(TA_##name##_Inputs) / sizeof(TA_InputParameterInfo *)) - 1, \ + (sizeof(TA_##name##_OptInputs)/ sizeof(TA_OptInputParameterInfo *))- 1, \ + (sizeof(TA_##name##_Outputs) / sizeof(TA_OutputParameterInfo *)) - 1, \ + (const TA_FuncHandle * const)&TA_DEF_##name \ + }; +#else + /* This definition is used only when compiling for gencode. + * Because some pointers may not be defined before gencode + * is run at least once, some value are set to NULL. + */ + #define DEF_FUNCTION( name, \ + groupId, \ + hint, \ + camelCaseName, \ + flags ) \ + \ + TA_FuncInfo TA_INFO_##name; \ + \ + const TA_FuncDef TA_DEF_##name = \ + { \ + TA_FUNC_DEF_MAGIC_NB, \ + groupId, \ + &TA_INFO_##name, \ + (const TA_InputParameterInfo * const)&TA_##name##_Inputs[0], \ + (const TA_OptInputParameterInfo * const)&TA_##name##_OptInputs[0], \ + (const TA_OutputParameterInfo * const)&TA_##name##_Outputs[0], \ + NULL, \ + NULL \ + }; \ + TA_FuncInfo TA_INFO_##name = \ + { \ + (const char * const)#name, \ + (const char * const)groupId##String, \ + (const char * const)hint, \ + (const char * const)camelCaseName, \ + (const int)flags, \ + (sizeof(TA_##name##_Inputs) / sizeof(TA_InputParameterInfo *)) - 1, \ + (sizeof(TA_##name##_OptInputs)/ sizeof(TA_OptInputParameterInfo *))- 1, \ + (sizeof(TA_##name##_Outputs) / sizeof(TA_OutputParameterInfo *)) - 1, \ + (const TA_FuncHandle * const)&TA_DEF_##name \ + }; +#endif + +#define ADD_TO_TABLE(name) &TA_DEF_##name + +/* Utility Macro to quickly define Math operator operating on one array + * with no optional parameter. + */ +#define DEF_MATH_UNARY_OPERATOR(NAME,HINT,CAMELCASENAME) \ + static const TA_InputParameterInfo *TA_##NAME##_Inputs[] = \ +{ \ + &TA_DEF_UI_Input_Real, \ + NULL \ +}; \ +static const TA_OutputParameterInfo *TA_##NAME##_Outputs[] = \ +{ \ + &TA_DEF_UI_Output_Real, \ + NULL \ +}; \ + static const TA_OptInputParameterInfo *TA_##NAME##_OptInputs[] = { NULL }; \ +DEF_FUNCTION( NAME, /* name */ \ + TA_GroupId_MathTransform, /* groupId */ \ + HINT, /* hint */ \ + CAMELCASENAME, /* CamelCase name */ \ + 0 /* flags */ \ + ); + +#define DEF_MATH_BINARY_OPERATOR(NAME,HINT,CAMELCASENAME) \ + static const TA_InputParameterInfo *TA_##NAME##_Inputs[] = \ +{ \ + &TA_DEF_UI_Input_Real0, \ + &TA_DEF_UI_Input_Real1, \ + NULL \ +}; \ +static const TA_OutputParameterInfo *TA_##NAME##_Outputs[] = \ +{ \ + &TA_DEF_UI_Output_Real, \ + NULL \ +}; \ + static const TA_OptInputParameterInfo *TA_##NAME##_OptInputs[] = { NULL }; \ +DEF_FUNCTION( NAME, /* name */ \ + TA_GroupId_MathOperators, /* groupId */ \ + HINT, /* hint */ \ + CAMELCASENAME, /* CamelCase name */ \ + 0 /* flags */ \ + ); + +#endif + diff --git a/src/ta_abstract/ta_frame_priv.h b/src/ta_abstract/ta_frame_priv.h new file mode 100644 index 000000000..0a8e4cf1f --- /dev/null +++ b/src/ta_abstract/ta_frame_priv.h @@ -0,0 +1,128 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +/* TA_ParamHolderPriv is the private implementation of a TA_ParamHolder. */ + +/* Definition in this header shall be used only internaly by the + * ta_abstract module. + * End-user of the TA-LIB shall never attempt to access these + * structure directly. + */ + +#ifndef TA_FRAME_PRIV_H +#define TA_FRAME_PRIV_H + +#ifndef TA_ABSTRACT_H + #include "ta_abstract.h" +#endif + +#ifndef TA_MAGIC_NB_H + #include "ta_magic_nb.h" +#endif + +typedef struct +{ + const TA_Real *open; + const TA_Real *high; + const TA_Real *low; + const TA_Real *close; + const TA_Real *volume; + const TA_Real *openInterest; +} TA_PricePtrs; + +typedef struct +{ + union TA_ParamHolderInputData + { + const TA_Real *inReal; + const TA_Integer *inInteger; + TA_PricePtrs inPrice; + } data; + + const TA_InputParameterInfo *inputInfo; + +} TA_ParamHolderInput; + +typedef struct +{ + union TA_ParamHolderOptInData + { + TA_Integer optInInteger; + TA_Real optInReal; + } data; + + const TA_OptInputParameterInfo *optInputInfo; + +} TA_ParamHolderOptInput; + +typedef struct +{ + union TA_ParamHolderOutputData + { + TA_Real *outReal; + TA_Integer *outInteger; + } data; + + const TA_OutputParameterInfo *outputInfo; +} TA_ParamHolderOutput; + +typedef struct +{ + /* Magic number is used to detect internal error. */ + unsigned int magicNumber; + + TA_ParamHolderInput *in; + TA_ParamHolderOptInput *optIn; + TA_ParamHolderOutput *out; + + /* Indicate which parameter have been initialized. + * The LSB (Less Significant Bit) is the first parameter + * and a bit equal to '1' indicate that the parameter is + * not initialized. + */ + unsigned int inBitmap; + unsigned int outBitmap; + + const TA_FuncInfo *funcInfo; +} TA_ParamHolderPriv; + +typedef TA_RetCode (*TA_FrameFunction)( const TA_ParamHolderPriv *params, + TA_Integer startIdx, + TA_Integer endIdx, + TA_Integer *outBegIdx, + TA_Integer *outNbElement ); + +typedef unsigned int (*TA_FrameLookback)( const TA_ParamHolderPriv *params ); + +#endif diff --git a/src/ta_abstract/ta_func_api.c b/src/ta_abstract/ta_func_api.c new file mode 100644 index 000000000..c2e139195 --- /dev/null +++ b/src/ta_abstract/ta_func_api.c @@ -0,0 +1,8962 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Important: This file is automatically generated by gen_code. + * Any modification will be lost on next execution + * of gen_code. + * + * This file is a binary representation of the func_api.xml file. + */ + +#include "ta_abstract.h" + +static const char TA_FunctionDescriptionXMLArray[] = +{ +0x3C,0x3F,0x78,0x6D,0x6C,0x20,0x76,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x22,0x31,0x2E,0x30,0x22,0x20,0x65 +,0x6E,0x63,0x6F,0x64,0x69,0x6E,0x67,0x3D,0x22,0x75,0x74,0x66,0x2D,0x38,0x22,0x20,0x3F,0x3E,0x0A,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3E,0x0A +,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x43,0x4F,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x43,0x4F,0x53,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x63,0x6F,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x54,0x72,0x69 +,0x67,0x6F,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69,0x63,0x20,0x41,0x43,0x6F,0x73,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D +,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x44,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x44,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x64,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x68,0x61,0x69,0x6B,0x69,0x6E,0x20,0x41,0x2F,0x44,0x20 +,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x56,0x6F,0x6C,0x75,0x6D +,0x65,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x44,0x44,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x44 +,0x44,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x64,0x64,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72 +,0x20,0x41,0x72,0x69,0x74,0x68,0x6D,0x65,0x74,0x69,0x63,0x20,0x41,0x64,0x64,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F,0x72,0x73 +,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x30,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61 +,0x6C,0x31,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x41,0x44,0x4F,0x53,0x43,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69 +,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x44,0x4F,0x53,0x43,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x64,0x4F,0x73,0x63,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x68,0x61,0x69,0x6B,0x69,0x6E,0x20,0x41,0x2F,0x44,0x20 +,0x4F,0x73,0x63,0x69,0x6C,0x6C,0x61,0x74,0x6F,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x56,0x6F,0x6C,0x75,0x6D,0x65 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70 +,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x66,0x61,0x73,0x74,0x20,0x4D +,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56 +,0x61,0x6C,0x75,0x65,0x3E,0x33,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65 +,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x6C,0x6F,0x77,0x20,0x4D,0x41 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x31,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x44,0x58,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x44 +,0x58,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x64,0x78,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x76,0x65,0x72,0x61,0x67 +,0x65,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x65,0x6D,0x65 +,0x6E,0x74,0x20,0x49,0x6E,0x64,0x65,0x78,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D +,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69 +,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E +,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69 +,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31 +,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x44,0x58,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x44,0x58,0x52,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x64,0x78,0x72,0x3C,0x2F,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x20 +,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x65,0x6D,0x65,0x6E,0x74 +,0x20,0x49,0x6E,0x64,0x65,0x78,0x20,0x52,0x61,0x74,0x69,0x6E,0x67,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74 +,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C +,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x50,0x4F,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x50 +,0x4F,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x70,0x6F,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x62,0x73,0x6F,0x6C,0x75 +,0x74,0x65,0x20,0x50,0x72,0x69,0x63,0x65,0x20,0x4F,0x73,0x63,0x69,0x6C,0x6C,0x61,0x74,0x6F,0x72,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49 +,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70 +,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x66,0x61,0x73,0x74,0x20,0x4D +,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56 +,0x61,0x6C,0x75,0x65,0x3E,0x31,0x32,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70 +,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x6C,0x6F,0x77,0x20,0x4D +,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56 +,0x61,0x6C,0x75,0x65,0x3E,0x32,0x36,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20 +,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20 +,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x52 +,0x4F,0x4F,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x52,0x4F,0x4F,0x4E,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61 +,0x6D,0x65,0x3E,0x41,0x72,0x6F,0x6F,0x6E,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x72,0x6F,0x6F,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73 +,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E +,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E +,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x6F,0x75,0x74,0x41,0x72,0x6F,0x6F,0x6E,0x44,0x6F,0x77,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x44,0x61,0x73,0x68,0x65,0x64,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x41,0x72,0x6F,0x6F,0x6E,0x55,0x70,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x52,0x4F,0x4F,0x4E +,0x4F,0x53,0x43,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x52,0x4F,0x4F,0x4E,0x4F,0x53,0x43,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x72,0x6F,0x6F,0x6E,0x4F,0x73,0x63,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x72,0x6F,0x6F,0x6E,0x20,0x4F,0x73,0x63 +,0x69,0x6C,0x6C,0x61,0x74,0x6F,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F +,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x53,0x49,0x4E,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41 +,0x53,0x49,0x4E,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x73,0x69,0x6E +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63 +,0x74,0x6F,0x72,0x20,0x54,0x72,0x69,0x67,0x6F,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69,0x63,0x20,0x41,0x53 +,0x69,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72 +,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41 +,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x41,0x54,0x41 +,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x41,0x54,0x41,0x4E,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x41,0x74,0x61,0x6E,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x54,0x72,0x69,0x67,0x6F,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69 +,0x63,0x20,0x41,0x54,0x61,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74 +,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x41,0x54,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x54,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x41,0x74,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x20,0x54,0x72,0x75,0x65,0x20,0x52,0x61,0x6E,0x67,0x65 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x56,0x6F,0x6C,0x61,0x74,0x69,0x6C,0x69,0x74 +,0x79,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20 +,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x41,0x56,0x47,0x50,0x52,0x49,0x43,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x56,0x47,0x50,0x52,0x49,0x43,0x45 +,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x76,0x67,0x50,0x72,0x69,0x63 +,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x76 +,0x65,0x72,0x61,0x67,0x65,0x20,0x50,0x72,0x69,0x63,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x50,0x72,0x69,0x63,0x65,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65 +,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F +,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69 +,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x42 +,0x42,0x41,0x4E,0x44,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x42,0x42,0x41,0x4E,0x44,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x42,0x62,0x61,0x6E,0x64,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x42,0x6F,0x6C,0x6C,0x69,0x6E,0x67,0x65,0x72,0x20,0x42 +,0x61,0x6E,0x64,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C +,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50 +,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65 +,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x35,0x3C,0x2F,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x44,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x73,0x20,0x75,0x70,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x44,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x20,0x6D,0x75,0x6C,0x74,0x69,0x70,0x6C,0x69,0x65,0x72 +,0x20,0x66,0x6F,0x72,0x20,0x75,0x70,0x70,0x65,0x72,0x20,0x62,0x61,0x6E,0x64,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x2D,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F +,0x6E,0x3E,0x32,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x2D,0x32,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x32,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x44,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x73,0x20,0x64,0x6F,0x77,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x44 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x20,0x6D,0x75,0x6C,0x74,0x69,0x70,0x6C,0x69,0x65,0x72,0x20 +,0x66,0x6F,0x72,0x20,0x6C,0x6F,0x77,0x65,0x72,0x20,0x62,0x61,0x6E,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x2D,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D +,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E +,0x3E,0x32,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x2D,0x32,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x32,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F +,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30,0x3C,0x2F,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x55,0x70,0x70,0x65,0x72 +,0x42,0x61,0x6E,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x70,0x70,0x65,0x72 +,0x20,0x4C,0x69,0x6D,0x69,0x74,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x4D,0x69,0x64,0x64,0x6C +,0x65,0x42,0x61,0x6E,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41 +,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x4C,0x6F,0x77,0x65,0x72,0x42,0x61,0x6E,0x64,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x6F,0x77,0x65,0x72,0x20,0x4C,0x69,0x6D,0x69,0x74 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x42,0x45,0x54,0x41,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x42 +,0x45,0x54,0x41,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x42,0x65,0x74,0x61 +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x42,0x65,0x74 +,0x61,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x53,0x74,0x61,0x74,0x69,0x73,0x74,0x69 +,0x63,0x20,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65 +,0x61,0x6C,0x30,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x31,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x35,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x42,0x4F,0x50,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x42,0x4F,0x50,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x42,0x6F,0x70,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x42,0x61,0x6C,0x61,0x6E,0x63,0x65,0x20,0x4F +,0x66,0x20,0x50,0x6F,0x77,0x65,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F +,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61 +,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F +,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E +,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x43,0x49,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43 +,0x43,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x63,0x69,0x3C,0x2F +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x6F,0x6D,0x6D,0x6F +,0x64,0x69,0x74,0x79,0x20,0x43,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x49,0x6E,0x64,0x65,0x78,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E +,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20 +,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62 +,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09 +,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x32,0x43,0x52,0x4F,0x57,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09 +,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x32 +,0x43,0x52,0x4F,0x57,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64 +,0x6C,0x32,0x43,0x72,0x6F,0x77,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x54,0x77,0x6F,0x20,0x43,0x72,0x6F,0x77,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74 +,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73 +,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x33,0x42,0x4C,0x41 +,0x43,0x4B,0x43,0x52,0x4F,0x57,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x33,0x42,0x4C,0x41,0x43,0x4B,0x43,0x52 +,0x4F,0x57,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x33 +,0x42,0x6C,0x61,0x63,0x6B,0x43,0x72,0x6F,0x77,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x68,0x72,0x65,0x65,0x20,0x42,0x6C,0x61,0x63,0x6B,0x20,0x43 +,0x72,0x6F,0x77,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65 +,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70 +,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48 +,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67 +,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C +,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x33,0x49,0x4E,0x53,0x49,0x44,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09 +,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x33 +,0x49,0x4E,0x53,0x49,0x44,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x64,0x6C,0x33,0x49,0x6E,0x73,0x69,0x64,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x68,0x72,0x65,0x65,0x20,0x49,0x6E,0x73,0x69,0x64,0x65,0x20,0x55 +,0x70,0x2F,0x44,0x6F,0x77,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74 +,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48 +,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F +,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C +,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A +,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x33,0x4C,0x49,0x4E,0x45,0x53,0x54,0x52,0x49,0x4B,0x45 +,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x43,0x44,0x4C,0x33,0x4C,0x49,0x4E,0x45,0x53,0x54,0x52,0x49,0x4B,0x45,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x33,0x4C,0x69,0x6E,0x65,0x53,0x74,0x72 +,0x69,0x6B,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x54,0x68,0x72,0x65,0x65,0x2D,0x4C,0x69,0x6E,0x65,0x20,0x53,0x74,0x72,0x69,0x6B,0x65,0x20,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63 +,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61 +,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44 +,0x4C,0x33,0x4F,0x55,0x54,0x53,0x49,0x44,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x33,0x4F,0x55,0x54,0x53,0x49 +,0x44,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x33,0x4F +,0x75,0x74,0x73,0x69,0x64,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x54,0x68,0x72,0x65,0x65,0x20,0x4F,0x75,0x74,0x73,0x69,0x64,0x65,0x20,0x55,0x70,0x2F +,0x44,0x6F,0x77,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65 +,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70 +,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48 +,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67 +,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C +,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x33,0x53,0x54,0x41,0x52,0x53,0x49,0x4E,0x53,0x4F,0x55,0x54,0x48 +,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x43,0x44,0x4C,0x33,0x53,0x54,0x41,0x52,0x53,0x49,0x4E,0x53,0x4F,0x55,0x54,0x48,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x33,0x53,0x74,0x61,0x72,0x73 +,0x49,0x6E,0x53,0x6F,0x75,0x74,0x68,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x54,0x68,0x72,0x65,0x65,0x20,0x53,0x74,0x61,0x72,0x73,0x20,0x49,0x6E,0x20,0x54 +,0x68,0x65,0x20,0x53,0x6F,0x75,0x74,0x68,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50 +,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x33,0x57,0x48,0x49,0x54,0x45,0x53,0x4F,0x4C +,0x44,0x49,0x45,0x52,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x33,0x57,0x48,0x49,0x54,0x45,0x53,0x4F,0x4C,0x44 +,0x49,0x45,0x52,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C +,0x33,0x57,0x68,0x69,0x74,0x65,0x53,0x6F,0x6C,0x64,0x69,0x65,0x72,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x68,0x72,0x65,0x65,0x20,0x41,0x64,0x76 +,0x61,0x6E,0x63,0x69,0x6E,0x67,0x20,0x57,0x68,0x69,0x74,0x65,0x20,0x53,0x6F,0x6C,0x64,0x69,0x65,0x72 +,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20 +,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65 +,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x43,0x44,0x4C,0x41,0x42,0x41,0x4E,0x44,0x4F,0x4E,0x45,0x44,0x42,0x41,0x42,0x59,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43 +,0x44,0x4C,0x41,0x42,0x41,0x4E,0x44,0x4F,0x4E,0x45,0x44,0x42,0x41,0x42,0x59,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x41,0x62,0x61,0x6E,0x64,0x6F,0x6E,0x65,0x64 +,0x42,0x61,0x62,0x79,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x41,0x62,0x61,0x6E,0x64,0x6F,0x6E,0x65,0x64,0x20,0x42,0x61,0x62,0x79,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E +,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C +,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x50,0x65,0x6E,0x65,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x50,0x65,0x72,0x63,0x65,0x6E,0x74,0x61,0x67,0x65,0x20,0x6F,0x66,0x20,0x70,0x65,0x6E,0x65,0x74 +,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x6F,0x66,0x20,0x61,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x20,0x77 +,0x69,0x74,0x68,0x69,0x6E,0x20,0x61,0x6E,0x6F,0x74,0x68,0x65,0x72,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B +,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69 +,0x73,0x69,0x6F,0x6E,0x3E,0x30,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E +,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A +,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x41,0x44,0x56,0x41,0x4E,0x43,0x45,0x42,0x4C,0x4F,0x43 +,0x4B,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x41,0x44,0x56,0x41,0x4E,0x43,0x45,0x42,0x4C,0x4F,0x43,0x4B,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x41,0x64,0x76,0x61,0x6E,0x63 +,0x65,0x42,0x6C,0x6F,0x63,0x6B,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x41,0x64,0x76,0x61,0x6E,0x63,0x65,0x20,0x42,0x6C,0x6F,0x63,0x6B,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67 +,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64 +,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x42 +,0x45,0x4C,0x54,0x48,0x4F,0x4C,0x44,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x42,0x45,0x4C,0x54,0x48,0x4F,0x4C,0x44 +,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x42,0x65,0x6C,0x74 +,0x48,0x6F,0x6C,0x64,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x42,0x65,0x6C,0x74,0x2D,0x68,0x6F,0x6C,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E +,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63 +,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67 +,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x42,0x52,0x45,0x41,0x4B,0x41,0x57 +,0x41,0x59,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x42,0x52,0x45,0x41,0x4B,0x41,0x57,0x41,0x59,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x42,0x72,0x65,0x61,0x6B,0x61,0x77,0x61 +,0x79,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x42,0x72 +,0x65,0x61,0x6B,0x61,0x77,0x61,0x79,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61 +,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x43,0x4C,0x4F,0x53,0x49,0x4E,0x47,0x4D,0x41,0x52 +,0x55,0x42,0x4F,0x5A,0x55,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x43,0x4C,0x4F,0x53,0x49,0x4E,0x47,0x4D,0x41,0x52 +,0x55,0x42,0x4F,0x5A,0x55,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64 +,0x6C,0x43,0x6C,0x6F,0x73,0x69,0x6E,0x67,0x4D,0x61,0x72,0x75,0x62,0x6F,0x7A,0x75,0x3C,0x2F,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x6C,0x6F,0x73,0x69,0x6E,0x67 +,0x20,0x4D,0x61,0x72,0x75,0x62,0x6F,0x7A,0x75,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C +,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C +,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65 +,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x43,0x4F,0x4E,0x43,0x45,0x41,0x4C,0x42 +,0x41,0x42,0x59,0x53,0x57,0x41,0x4C,0x4C,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x43,0x4F,0x4E,0x43,0x45,0x41,0x4C +,0x42,0x41,0x42,0x59,0x53,0x57,0x41,0x4C,0x4C,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x64,0x6C,0x43,0x6F,0x6E,0x63,0x65,0x61,0x6C,0x42,0x61,0x62,0x79,0x73,0x57,0x61,0x6C +,0x6C,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x6F +,0x6E,0x63,0x65,0x61,0x6C,0x69,0x6E,0x67,0x20,0x42,0x61,0x62,0x79,0x20,0x53,0x77,0x61,0x6C,0x6C,0x6F +,0x77,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20 +,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65 +,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x43,0x44,0x4C,0x43,0x4F,0x55,0x4E,0x54,0x45,0x52,0x41,0x54,0x54,0x41,0x43,0x4B,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43 +,0x44,0x4C,0x43,0x4F,0x55,0x4E,0x54,0x45,0x52,0x41,0x54,0x54,0x41,0x43,0x4B,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x43,0x6F,0x75,0x6E,0x74,0x65,0x72,0x41,0x74 +,0x74,0x61,0x63,0x6B,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x43,0x6F,0x75,0x6E,0x74,0x65,0x72,0x61,0x74,0x74,0x61,0x63,0x6B,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69 +,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65 +,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E +,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x44,0x41,0x52 +,0x4B,0x43,0x4C,0x4F,0x55,0x44,0x43,0x4F,0x56,0x45,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x44,0x41,0x52,0x4B +,0x43,0x4C,0x4F,0x55,0x44,0x43,0x4F,0x56,0x45,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61 +,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x44,0x61,0x72,0x6B,0x43,0x6C,0x6F,0x75,0x64,0x43,0x6F,0x76,0x65,0x72 +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x44,0x61,0x72 +,0x6B,0x20,0x43,0x6C,0x6F,0x75,0x64,0x20,0x43,0x6F,0x76,0x65,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74 +,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73 +,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x50,0x65 +,0x6E,0x65,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50 +,0x65,0x72,0x63,0x65,0x6E,0x74,0x61,0x67,0x65,0x20,0x6F,0x66,0x20,0x70,0x65,0x6E,0x65,0x74,0x72,0x61 +,0x74,0x69,0x6F,0x6E,0x20,0x6F,0x66,0x20,0x61,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x20,0x77,0x69,0x74 +,0x68,0x69,0x6E,0x20,0x61,0x6E,0x6F,0x74,0x68,0x65,0x72,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C +,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69 +,0x6F,0x6E,0x3E,0x30,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x30,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x30,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x35,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67 +,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C +,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x44,0x4F,0x4A,0x49,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x44,0x4F,0x4A,0x49 +,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x44,0x6F,0x6A,0x69 +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x44,0x6F,0x6A +,0x69,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20 +,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65 +,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x43,0x44,0x4C,0x44,0x4F,0x4A,0x49,0x53,0x54,0x41,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x44,0x4F,0x4A +,0x49,0x53,0x54,0x41,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64 +,0x6C,0x44,0x6F,0x6A,0x69,0x53,0x74,0x61,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x44,0x6F,0x6A,0x69,0x20,0x53,0x74,0x61,0x72,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E +,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C +,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x44,0x52 +,0x41,0x47,0x4F,0x4E,0x46,0x4C,0x59,0x44,0x4F,0x4A,0x49,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x44,0x52,0x41,0x47 +,0x4F,0x4E,0x46,0x4C,0x59,0x44,0x4F,0x4A,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x64,0x6C,0x44,0x72,0x61,0x67,0x6F,0x6E,0x66,0x6C,0x79,0x44,0x6F,0x6A,0x69,0x3C,0x2F +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x44,0x72,0x61,0x67,0x6F +,0x6E,0x66,0x6C,0x79,0x20,0x44,0x6F,0x6A,0x69,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C +,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C +,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65 +,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x45,0x4E,0x47,0x55,0x4C,0x46,0x49,0x4E +,0x47,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x45,0x4E,0x47,0x55,0x4C,0x46,0x49,0x4E,0x47,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x45,0x6E,0x67,0x75,0x6C,0x66,0x69,0x6E,0x67 +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x45,0x6E,0x67 +,0x75,0x6C,0x66,0x69,0x6E,0x67,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69 +,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65 +,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E +,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x45,0x56,0x45 +,0x4E,0x49,0x4E,0x47,0x44,0x4F,0x4A,0x49,0x53,0x54,0x41,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x45,0x56,0x45 +,0x4E,0x49,0x4E,0x47,0x44,0x4F,0x4A,0x49,0x53,0x54,0x41,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x45,0x76,0x65,0x6E,0x69,0x6E,0x67,0x44,0x6F,0x6A,0x69,0x53 +,0x74,0x61,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x45,0x76,0x65,0x6E,0x69,0x6E,0x67,0x20,0x44,0x6F,0x6A,0x69,0x20,0x53,0x74,0x61,0x72,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F +,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E +,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x50,0x65,0x6E,0x65,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x50,0x65,0x72,0x63,0x65,0x6E,0x74,0x61,0x67,0x65,0x20,0x6F,0x66,0x20,0x70,0x65,0x6E +,0x65,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x6F,0x66,0x20,0x61,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65 +,0x20,0x77,0x69,0x74,0x68,0x69,0x6E,0x20,0x61,0x6E,0x6F,0x74,0x68,0x65,0x72,0x20,0x63,0x61,0x6E,0x64 +,0x6C,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30 +,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37 +,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65 +,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x30,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72 +,0x74,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E +,0x74,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x45,0x56,0x45,0x4E,0x49,0x4E,0x47,0x53,0x54 +,0x41,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x45,0x56,0x45,0x4E,0x49,0x4E,0x47,0x53,0x54,0x41,0x52,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x45,0x76,0x65,0x6E,0x69,0x6E +,0x67,0x53,0x74,0x61,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x45,0x76,0x65,0x6E,0x69,0x6E,0x67,0x20,0x53,0x74,0x61,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69 +,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65 +,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x50 +,0x65,0x6E,0x65,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x50,0x65,0x72,0x63,0x65,0x6E,0x74,0x61,0x67,0x65,0x20,0x6F,0x66,0x20,0x70,0x65,0x6E,0x65,0x74,0x72 +,0x61,0x74,0x69,0x6F,0x6E,0x20,0x6F,0x66,0x20,0x61,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x20,0x77,0x69 +,0x74,0x68,0x69,0x6E,0x20,0x61,0x6E,0x6F,0x74,0x68,0x65,0x72,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30 +,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D +,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73 +,0x69,0x6F,0x6E,0x3E,0x30,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x30 +,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x30 +,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61 +,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C +,0x75,0x65,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09 +,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x47,0x41,0x50,0x53,0x49,0x44,0x45,0x53,0x49,0x44,0x45,0x57 +,0x48,0x49,0x54,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x47,0x41,0x50,0x53,0x49,0x44,0x45,0x53,0x49,0x44,0x45 +,0x57,0x48,0x49,0x54,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64 +,0x6C,0x47,0x61,0x70,0x53,0x69,0x64,0x65,0x53,0x69,0x64,0x65,0x57,0x68,0x69,0x74,0x65,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x55,0x70,0x2F,0x44,0x6F,0x77 +,0x6E,0x2D,0x67,0x61,0x70,0x20,0x73,0x69,0x64,0x65,0x2D,0x62,0x79,0x2D,0x73,0x69,0x64,0x65,0x20,0x77 +,0x68,0x69,0x74,0x65,0x20,0x6C,0x69,0x6E,0x65,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E +,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63 +,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67 +,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x47,0x52,0x41,0x56,0x45,0x53,0x54 +,0x4F,0x4E,0x45,0x44,0x4F,0x4A,0x49,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x47,0x52,0x41,0x56,0x45,0x53,0x54,0x4F +,0x4E,0x45,0x44,0x4F,0x4A,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x64,0x6C,0x47,0x72,0x61,0x76,0x65,0x73,0x74,0x6F,0x6E,0x65,0x44,0x6F,0x6A,0x69,0x3C,0x2F,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x47,0x72,0x61,0x76,0x65,0x73,0x74 +,0x6F,0x6E,0x65,0x20,0x44,0x6F,0x6A,0x69,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50 +,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x48,0x41,0x4D,0x4D,0x45,0x52,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43 +,0x44,0x4C,0x48,0x41,0x4D,0x4D,0x45,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x43,0x64,0x6C,0x48,0x61,0x6D,0x6D,0x65,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x61,0x6D,0x6D,0x65,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74 +,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73 +,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x48,0x41,0x4E,0x47 +,0x49,0x4E,0x47,0x4D,0x41,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69 +,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x48,0x41,0x4E,0x47,0x49,0x4E,0x47,0x4D,0x41 +,0x4E,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x48,0x61,0x6E +,0x67,0x69,0x6E,0x67,0x4D,0x61,0x6E,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x48,0x61,0x6E,0x67,0x69,0x6E,0x67,0x20,0x4D,0x61,0x6E,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E +,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C +,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x48,0x41 +,0x52,0x41,0x4D,0x49,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x48,0x41,0x52,0x41,0x4D,0x49,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x48,0x61,0x72,0x61,0x6D,0x69,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x61,0x72,0x61,0x6D,0x69 +,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50 +,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x48,0x41,0x52,0x41,0x4D,0x49,0x43,0x52,0x4F +,0x53,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x48,0x41,0x52,0x41,0x4D,0x49,0x43,0x52,0x4F,0x53,0x53,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x48,0x61,0x72,0x61,0x6D,0x69 +,0x43,0x72,0x6F,0x73,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x48,0x61,0x72,0x61,0x6D,0x69,0x20,0x43,0x72,0x6F,0x73,0x73,0x20,0x50,0x61,0x74,0x74,0x65 +,0x72,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E +,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70 +,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x43,0x44,0x4C,0x48,0x49,0x47,0x48,0x57,0x41,0x56,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x48,0x49 +,0x47,0x48,0x57,0x41,0x56,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x64,0x6C,0x48,0x69,0x67,0x6E,0x57,0x61,0x76,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x67,0x68,0x2D,0x57,0x61,0x76,0x65,0x20,0x43,0x61,0x6E +,0x64,0x6C,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72 +,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65 +,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F +,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69 +,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65 +,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21 +,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x48,0x49,0x4B,0x4B,0x41,0x4B,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x48,0x49 +,0x4B,0x4B,0x41,0x4B,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64 +,0x6C,0x48,0x69,0x6B,0x6B,0x61,0x6B,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x6B,0x6B,0x61,0x6B,0x65,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52 +,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41 +,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69 +,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20 +,0x43,0x44,0x4C,0x48,0x49,0x4B,0x4B,0x41,0x4B,0x45,0x4D,0x4F,0x44,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x48,0x49 +,0x4B,0x4B,0x41,0x4B,0x45,0x4D,0x4F,0x44,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x43,0x64,0x6C,0x48,0x69,0x6B,0x6B,0x61,0x6B,0x65,0x4D,0x6F,0x64,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x6F,0x64,0x69,0x66,0x69,0x65,0x64,0x20 +,0x48,0x69,0x6B,0x6B,0x61,0x6B,0x65,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E +,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C +,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x48,0x4F +,0x4D,0x49,0x4E,0x47,0x50,0x49,0x47,0x45,0x4F,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x48,0x4F,0x4D,0x49,0x4E +,0x47,0x50,0x49,0x47,0x45,0x4F,0x4E,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x64,0x6C,0x48,0x6F,0x6D,0x69,0x6E,0x67,0x50,0x69,0x67,0x65,0x6F,0x6E,0x3C,0x2F,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x6F,0x6D,0x69,0x6E,0x67,0x20,0x50 +,0x69,0x67,0x65,0x6F,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74 +,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F +,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69 +,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F +,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09 +,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x49,0x44,0x45,0x4E,0x54,0x49,0x43,0x41,0x4C,0x33,0x43,0x52 +,0x4F,0x57,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x49,0x44,0x45,0x4E,0x54,0x49,0x43,0x41,0x4C,0x33,0x43,0x52 +,0x4F,0x57,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x49 +,0x64,0x65,0x6E,0x74,0x69,0x63,0x61,0x6C,0x33,0x43,0x72,0x6F,0x77,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x49,0x64,0x65,0x6E,0x74,0x69,0x63,0x61,0x6C +,0x20,0x54,0x68,0x72,0x65,0x65,0x20,0x43,0x72,0x6F,0x77,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69 +,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74 +,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x49,0x4E,0x4E,0x45,0x43 +,0x4B,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x49,0x4E,0x4E,0x45,0x43,0x4B,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x49,0x6E,0x4E,0x65,0x63,0x6B,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x49,0x6E,0x2D,0x4E,0x65,0x63,0x6B,0x20,0x50 +,0x61,0x74,0x74,0x65,0x72,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74 +,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48 +,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F +,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C +,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A +,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x49,0x4E,0x56,0x45,0x52,0x54,0x45,0x44,0x48,0x41,0x4D +,0x4D,0x45,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x49,0x4E,0x56,0x45,0x52,0x54,0x45,0x44,0x48,0x41,0x4D,0x4D +,0x45,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x49,0x6E +,0x76,0x65,0x72,0x74,0x65,0x64,0x48,0x61,0x6D,0x6D,0x65,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x49,0x6E,0x76,0x65,0x72,0x74,0x65,0x64,0x20,0x48,0x61 +,0x6D,0x6D,0x65,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65 +,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70 +,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48 +,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67 +,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C +,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x4B,0x49,0x43,0x4B,0x49,0x4E,0x47,0x20,0x2D,0x2D,0x3E,0x0A,0x09 +,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4B +,0x49,0x43,0x4B,0x49,0x4E,0x47,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x64,0x6C,0x4B,0x69,0x63,0x6B,0x69,0x6E,0x67,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4B,0x69,0x63,0x6B,0x69,0x6E,0x67,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74 +,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73 +,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x4B,0x49,0x43,0x4B +,0x49,0x4E,0x47,0x42,0x59,0x4C,0x45,0x4E,0x47,0x54,0x48,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4B,0x49,0x43,0x4B +,0x49,0x4E,0x47,0x42,0x59,0x4C,0x45,0x4E,0x47,0x54,0x48,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x4B,0x69,0x63,0x6B,0x69,0x6E,0x67,0x42,0x79,0x4C,0x65,0x6E,0x67 +,0x74,0x68,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4B +,0x69,0x63,0x6B,0x69,0x6E,0x67,0x20,0x2D,0x20,0x62,0x75,0x6C,0x6C,0x2F,0x62,0x65,0x61,0x72,0x20,0x64 +,0x65,0x74,0x65,0x72,0x6D,0x69,0x6E,0x65,0x64,0x20,0x62,0x79,0x20,0x74,0x68,0x65,0x20,0x6C,0x6F,0x6E +,0x67,0x65,0x72,0x20,0x6D,0x61,0x72,0x75,0x62,0x6F,0x7A,0x75,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69 +,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74 +,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x4C,0x41,0x44,0x44,0x45 +,0x52,0x42,0x4F,0x54,0x54,0x4F,0x4D,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4C,0x41,0x44,0x44,0x45,0x52,0x42,0x4F +,0x54,0x54,0x4F,0x4D,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C +,0x4C,0x61,0x64,0x64,0x65,0x72,0x42,0x6F,0x74,0x74,0x6F,0x6D,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x61,0x64,0x64,0x65,0x72,0x20,0x42,0x6F,0x74,0x74 +,0x6F,0x6D,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E +,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70 +,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x43,0x44,0x4C,0x4C,0x4F,0x4E,0x47,0x4C,0x45,0x47,0x47,0x45,0x44,0x44,0x4F,0x4A,0x49,0x20 +,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x43,0x44,0x4C,0x4C,0x4F,0x4E,0x47,0x4C,0x45,0x47,0x47,0x45,0x44,0x44,0x4F,0x4A,0x49,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x4C,0x6F,0x6E,0x67,0x4C,0x65 +,0x67,0x67,0x65,0x64,0x44,0x6F,0x6A,0x69,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x6F,0x6E,0x67,0x20,0x4C,0x65,0x67,0x67,0x65,0x64,0x20,0x44,0x6F,0x6A +,0x69,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20 +,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65 +,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x43,0x44,0x4C,0x4C,0x4F,0x4E,0x47,0x4C,0x49,0x4E,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4C,0x4F,0x4E +,0x47,0x4C,0x49,0x4E,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64 +,0x6C,0x4C,0x6F,0x6E,0x67,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x6F,0x6E,0x67,0x20,0x4C,0x69,0x6E,0x65,0x20,0x43,0x61,0x6E,0x64 +,0x6C,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E +,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70 +,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x43,0x44,0x4C,0x4D,0x41,0x52,0x55,0x42,0x4F,0x5A,0x55,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4D,0x41 +,0x52,0x55,0x42,0x4F,0x5A,0x55,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x64,0x6C,0x4D,0x61,0x72,0x75,0x62,0x6F,0x7A,0x75,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x61,0x72,0x75,0x62,0x6F,0x7A,0x75,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E +,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C +,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x4D,0x41 +,0x54,0x43,0x48,0x49,0x4E,0x47,0x4C,0x4F,0x57,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4D,0x41,0x54,0x43,0x48,0x49 +,0x4E,0x47,0x4C,0x4F,0x57,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64 +,0x6C,0x4D,0x61,0x74,0x63,0x68,0x69,0x6E,0x67,0x4C,0x6F,0x77,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x61,0x74,0x63,0x68,0x69,0x6E,0x67,0x20,0x4C,0x6F +,0x77,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20 +,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65 +,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x43,0x44,0x4C,0x4D,0x41,0x54,0x48,0x4F,0x4C,0x44,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4D,0x41,0x54,0x48 +,0x4F,0x4C,0x44,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x4D +,0x61,0x74,0x48,0x6F,0x6C,0x64,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x4D,0x61,0x74,0x20,0x48,0x6F,0x6C,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F +,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69 +,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x50,0x65,0x6E,0x65 +,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x65,0x72 +,0x63,0x65,0x6E,0x74,0x61,0x67,0x65,0x20,0x6F,0x66,0x20,0x70,0x65,0x6E,0x65,0x74,0x72,0x61,0x74,0x69 +,0x6F,0x6E,0x20,0x6F,0x66,0x20,0x61,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x20,0x77,0x69,0x74,0x68,0x69 +,0x6E,0x20,0x61,0x6E,0x6F,0x74,0x68,0x65,0x72,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69 +,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D +,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E +,0x3E,0x30,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x30,0x2E,0x30,0x30 +,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x30,0x2E,0x30,0x30 +,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E +,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x35,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x43,0x44,0x4C,0x4D,0x4F,0x52,0x4E,0x49,0x4E,0x47,0x44,0x4F,0x4A,0x49,0x53,0x54,0x41,0x52 +,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x43,0x44,0x4C,0x4D,0x4F,0x52,0x4E,0x49,0x4E,0x47,0x44,0x4F,0x4A,0x49,0x53,0x54,0x41,0x52 +,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x4D,0x6F,0x72,0x6E +,0x69,0x6E,0x67,0x44,0x6F,0x6A,0x69,0x53,0x74,0x61,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x6F,0x72,0x6E,0x69,0x6E,0x67,0x20,0x44,0x6F,0x6A,0x69 +,0x20,0x53,0x74,0x61,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74 +,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F +,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69 +,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F +,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x50,0x65,0x6E,0x65,0x74,0x72,0x61,0x74,0x69,0x6F +,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x65,0x72,0x63,0x65,0x6E,0x74,0x61,0x67 +,0x65,0x20,0x6F,0x66,0x20,0x70,0x65,0x6E,0x65,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x6F,0x66,0x20 +,0x61,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x20,0x77,0x69,0x74,0x68,0x69,0x6E,0x20,0x61,0x6E,0x6F,0x74 +,0x68,0x65,0x72,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30 +,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x30,0x3C,0x2F,0x50,0x72 +,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x30,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30 +,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x4D +,0x4F,0x52,0x4E,0x49,0x4E,0x47,0x53,0x54,0x41,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4D,0x4F,0x52,0x4E,0x49 +,0x4E,0x47,0x53,0x54,0x41,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x64,0x6C,0x4D,0x6F,0x72,0x6E,0x69,0x6E,0x67,0x53,0x74,0x61,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x6F,0x72,0x6E,0x69,0x6E,0x67,0x20,0x53,0x74 +,0x61,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E +,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70 +,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x50,0x65,0x6E,0x65,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x65,0x72,0x63,0x65,0x6E,0x74,0x61,0x67,0x65,0x20,0x6F +,0x66,0x20,0x70,0x65,0x6E,0x65,0x74,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x6F,0x66,0x20,0x61,0x20,0x63 +,0x61,0x6E,0x64,0x6C,0x65,0x20,0x77,0x69,0x74,0x68,0x69,0x6E,0x20,0x61,0x6E,0x6F,0x74,0x68,0x65,0x72 +,0x20,0x63,0x61,0x6E,0x64,0x6C,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x30,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69 +,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x30,0x2E,0x30,0x30,0x30 +,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65 +,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x4F,0x4E,0x4E,0x45 +,0x43,0x4B,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x4F,0x4E,0x4E,0x45,0x43,0x4B,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x4F,0x6E,0x4E,0x65,0x63,0x6B,0x3C,0x2F,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4F,0x6E,0x2D,0x4E,0x65,0x63,0x6B,0x20 +,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61 +,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x50,0x49,0x45,0x52,0x43,0x49,0x4E,0x47,0x20,0x2D +,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x43,0x44,0x4C,0x50,0x49,0x45,0x52,0x43,0x49,0x4E,0x47,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x50,0x69,0x65,0x72,0x63,0x69,0x6E,0x67,0x3C,0x2F,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x69,0x65,0x72,0x63,0x69,0x6E,0x67 +,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50 +,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x52,0x49,0x43,0x4B,0x53,0x48,0x41,0x57,0x4D +,0x41,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x52,0x49,0x43,0x4B,0x53,0x48,0x41,0x57,0x4D,0x41,0x4E,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x52,0x69,0x63,0x6B,0x73,0x68 +,0x61,0x77,0x4D,0x61,0x6E,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x52,0x69,0x63,0x6B,0x73,0x68,0x61,0x77,0x20,0x4D,0x61,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69 +,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65 +,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E +,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x52,0x49,0x53 +,0x45,0x46,0x41,0x4C,0x4C,0x33,0x4D,0x45,0x54,0x48,0x4F,0x44,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x52,0x49 +,0x53,0x45,0x46,0x41,0x4C,0x4C,0x33,0x4D,0x45,0x54,0x48,0x4F,0x44,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x52,0x69,0x73,0x65,0x46,0x61,0x6C,0x6C,0x33,0x4D +,0x65,0x74,0x68,0x6F,0x64,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x52,0x69,0x73,0x69,0x6E,0x67,0x2F,0x46,0x61,0x6C,0x6C,0x69,0x6E,0x67,0x20,0x54,0x68 +,0x72,0x65,0x65,0x20,0x4D,0x65,0x74,0x68,0x6F,0x64,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F +,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69 +,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x53,0x45,0x50,0x41,0x52,0x41 +,0x54,0x49,0x4E,0x47,0x4C,0x49,0x4E,0x45,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x53,0x45,0x50,0x41,0x52,0x41 +,0x54,0x49,0x4E,0x47,0x4C,0x49,0x4E,0x45,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x64,0x6C,0x53,0x65,0x70,0x65,0x72,0x61,0x74,0x69,0x6E,0x67,0x4C,0x69,0x6E,0x65,0x73 +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x65,0x70 +,0x61,0x72,0x61,0x74,0x69,0x6E,0x67,0x20,0x4C,0x69,0x6E,0x65,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74 +,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73 +,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x53,0x48,0x4F,0x4F +,0x54,0x49,0x4E,0x47,0x53,0x54,0x41,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x53,0x48,0x4F,0x4F,0x54,0x49,0x4E +,0x47,0x53,0x54,0x41,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64 +,0x6C,0x53,0x68,0x6F,0x6F,0x74,0x69,0x6E,0x67,0x53,0x74,0x61,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x68,0x6F,0x6F,0x74,0x69,0x6E,0x67,0x20,0x53 +,0x74,0x61,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72 +,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65 +,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F +,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69 +,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65 +,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21 +,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x53,0x48,0x4F,0x52,0x54,0x4C,0x49,0x4E,0x45,0x20,0x2D,0x2D,0x3E,0x0A +,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C +,0x53,0x48,0x4F,0x52,0x54,0x4C,0x49,0x4E,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x64,0x6C,0x53,0x68,0x6F,0x72,0x74,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x68,0x6F,0x72,0x74,0x20,0x4C,0x69,0x6E +,0x65,0x20,0x43,0x61,0x6E,0x64,0x6C,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50 +,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x53,0x50,0x49,0x4E,0x4E,0x49,0x4E,0x47,0x54 +,0x4F,0x50,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x53,0x50,0x49,0x4E,0x4E,0x49,0x4E,0x47,0x54,0x4F,0x50,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x53,0x70,0x69,0x6E,0x6E,0x69 +,0x6E,0x67,0x54,0x6F,0x70,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x53,0x70,0x69,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x54,0x6F,0x70,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69 +,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65 +,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E +,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x53,0x54,0x41 +,0x4C,0x4C,0x45,0x44,0x50,0x41,0x54,0x54,0x45,0x52,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x53,0x54,0x41,0x4C +,0x4C,0x45,0x44,0x50,0x41,0x54,0x54,0x45,0x52,0x4E,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61 +,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x53,0x74,0x61,0x6C,0x6C,0x65,0x64,0x50,0x61,0x74,0x74,0x65,0x72,0x6E +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x74,0x61 +,0x6C,0x6C,0x65,0x64,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69 +,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74 +,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x53,0x54,0x49,0x43,0x4B +,0x53,0x41,0x4E,0x44,0x57,0x49,0x43,0x48,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x53,0x54,0x49,0x43,0x4B,0x53,0x41 +,0x4E,0x44,0x57,0x49,0x43,0x48,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x64,0x6C,0x53,0x74,0x69,0x63,0x6B,0x53,0x61,0x6E,0x64,0x77,0x68,0x69,0x63,0x68,0x3C,0x2F,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x74,0x69,0x63,0x6B,0x20,0x53 +,0x61,0x6E,0x64,0x77,0x69,0x63,0x68,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61 +,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x54,0x41,0x4B,0x55,0x52,0x49,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44 +,0x4C,0x54,0x41,0x4B,0x55,0x52,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x64,0x6C,0x54,0x61,0x6B,0x75,0x72,0x69,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x61,0x6B,0x75,0x72,0x69,0x20,0x28,0x44,0x72,0x61,0x67,0x6F,0x6E +,0x66,0x6C,0x79,0x20,0x44,0x6F,0x6A,0x69,0x20,0x77,0x69,0x74,0x68,0x20,0x76,0x65,0x72,0x79,0x20,0x6C +,0x6F,0x6E,0x67,0x20,0x6C,0x6F,0x77,0x65,0x72,0x20,0x73,0x68,0x61,0x64,0x6F,0x77,0x29,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F +,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E +,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61 +,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F +,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C +,0x54,0x41,0x53,0x55,0x4B,0x49,0x47,0x41,0x50,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x54,0x41,0x53,0x55,0x4B,0x49 +,0x47,0x41,0x50,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x54 +,0x61,0x73,0x75,0x6B,0x69,0x47,0x61,0x70,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x61,0x73,0x75,0x6B,0x69,0x20,0x47,0x61,0x70,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E +,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C +,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x54,0x48 +,0x52,0x55,0x53,0x54,0x49,0x4E,0x47,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x54,0x48,0x52,0x55,0x53,0x54,0x49,0x4E +,0x47,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x54,0x68,0x72 +,0x75,0x73,0x74,0x69,0x6E,0x67,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x54,0x68,0x72,0x75,0x73,0x74,0x69,0x6E,0x67,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52 +,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41 +,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69 +,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20 +,0x43,0x44,0x4C,0x54,0x52,0x49,0x53,0x54,0x41,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x54,0x52,0x49,0x53,0x54 +,0x41,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x54,0x72 +,0x69,0x73,0x74,0x61,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x54,0x72,0x69,0x73,0x74,0x61,0x72,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F +,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E +,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61 +,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F +,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C +,0x55,0x4E,0x49,0x51,0x55,0x45,0x33,0x52,0x49,0x56,0x45,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x55,0x4E,0x49 +,0x51,0x55,0x45,0x33,0x52,0x49,0x56,0x45,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x64,0x6C,0x55,0x6E,0x69,0x71,0x75,0x65,0x33,0x52,0x69,0x76,0x65,0x72,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x55,0x6E,0x69,0x71,0x75,0x65 +,0x20,0x33,0x20,0x52,0x69,0x76,0x65,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50 +,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x55,0x50,0x53,0x49,0x44,0x45,0x47,0x41,0x50 +,0x32,0x43,0x52,0x4F,0x57,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69 +,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x55,0x50,0x53,0x49,0x44,0x45,0x47,0x41,0x50 +,0x32,0x43,0x52,0x4F,0x57,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x64,0x6C,0x55,0x70,0x73,0x69,0x64,0x65,0x47,0x61,0x70,0x32,0x43,0x72,0x6F,0x77,0x73,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x55,0x70,0x73,0x69,0x64,0x65 +,0x20,0x47,0x61,0x70,0x20,0x54,0x77,0x6F,0x20,0x43,0x72,0x6F,0x77,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67,0x6E,0x69 +,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64,0x6C,0x65 +,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E +,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x44,0x4C,0x58,0x53,0x49 +,0x44,0x45,0x47,0x41,0x50,0x33,0x4D,0x45,0x54,0x48,0x4F,0x44,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x44,0x4C,0x58,0x53 +,0x49,0x44,0x45,0x47,0x41,0x50,0x33,0x4D,0x45,0x54,0x48,0x4F,0x44,0x53,0x3C,0x2F,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x64,0x6C,0x58,0x53,0x69,0x64,0x65,0x47,0x61,0x70,0x33,0x4D +,0x65,0x74,0x68,0x6F,0x64,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x55,0x70,0x73,0x69,0x64,0x65,0x2F,0x44,0x6F,0x77,0x6E,0x73,0x69,0x64,0x65,0x20,0x47 +,0x61,0x70,0x20,0x54,0x68,0x72,0x65,0x65,0x20,0x4D,0x65,0x74,0x68,0x6F,0x64,0x73,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x52,0x65,0x63,0x6F,0x67 +,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x43,0x61,0x6E,0x64 +,0x6C,0x65,0x73,0x74,0x69,0x63,0x6B,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x70,0x65,0x6E,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x45,0x49,0x4C +,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x43,0x45,0x49,0x4C,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x65,0x69,0x6C,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x43,0x65,0x69,0x6C,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A +,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x4D,0x4F,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x4D,0x4F,0x3C,0x2F,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6D,0x6F,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x68,0x61,0x6E,0x64,0x65,0x20,0x4D,0x6F,0x6D,0x65,0x6E,0x74 +,0x75,0x6D,0x20,0x4F,0x73,0x63,0x69,0x6C,0x6C,0x61,0x74,0x6F,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74 +,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C +,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20 +,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62 +,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09 +,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x4F,0x52,0x52,0x45,0x4C,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x4F,0x52,0x52,0x45,0x4C,0x3C +,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6F,0x72,0x72,0x65,0x6C,0x3C,0x2F +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x65,0x61,0x72,0x73 +,0x6F,0x6E,0x26,0x61,0x70,0x6F,0x73,0x3B,0x73,0x20,0x43,0x6F,0x72,0x72,0x65,0x6C,0x61,0x74,0x69,0x6F +,0x6E,0x20,0x43,0x6F,0x65,0x66,0x66,0x69,0x63,0x69,0x65,0x6E,0x74,0x20,0x28,0x72,0x29,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x53,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x20,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x30,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41 +,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x31,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D +,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75 +,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D +,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x4F,0x53,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x4F,0x53,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6F,0x73,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x54,0x72,0x69,0x67,0x6F +,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69,0x63,0x20,0x43,0x6F,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41 +,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x43,0x4F,0x53,0x48,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x43,0x4F,0x53,0x48,0x3C,0x2F,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6F,0x73,0x68,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x54,0x72 +,0x69,0x67,0x6F,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69,0x63,0x20,0x43,0x6F,0x73,0x68,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72 +,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52 +,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x44,0x45,0x4D,0x41,0x20,0x2D,0x2D,0x3E,0x0A +,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x44,0x45,0x4D +,0x41,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x44,0x65,0x6D,0x61,0x3C,0x2F +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x45,0x78,0x70,0x6F,0x6E,0x65,0x6E,0x74,0x69,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67 +,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F +,0x76,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69 +,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E +,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69 +,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33 +,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x44,0x49,0x56,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x44,0x49,0x56,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x44,0x69,0x76,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x41,0x72,0x69,0x74 +,0x68,0x6D,0x65,0x74,0x69,0x63,0x20,0x44,0x69,0x76,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x4D,0x61,0x74,0x68,0x20,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x69,0x6E,0x52,0x65,0x61,0x6C,0x30,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x31,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x44,0x58,0x20,0x2D +,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x44,0x58,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x44,0x78,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x44,0x69,0x72,0x65,0x63,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x65,0x6D,0x65,0x6E,0x74,0x20,0x49,0x6E,0x64,0x65,0x78 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20 +,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69 +,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F +,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F +,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66 +,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C +,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72 +,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69 +,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20 +,0x45,0x4D,0x41,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x45,0x4D,0x41,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x45,0x6D,0x61,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x45,0x78,0x70,0x6F,0x6E,0x65,0x6E,0x74,0x69,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20 +,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76 +,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20 +,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x45 +,0x58,0x50,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x45,0x58,0x50,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x45,0x78,0x70,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x41,0x72,0x69,0x74,0x68,0x6D,0x65,0x74,0x69,0x63,0x20,0x45,0x78 +,0x70,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61 +,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x46,0x4C,0x4F,0x4F +,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x46,0x4C,0x4F,0x4F,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x46,0x6C,0x6F,0x6F,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x46,0x6C,0x6F,0x6F,0x72,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D +,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x48,0x54,0x5F,0x44,0x43,0x50,0x45,0x52,0x49,0x4F +,0x44,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x48,0x54,0x5F,0x44,0x43,0x50,0x45,0x52,0x49,0x4F,0x44,0x3C,0x2F,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x74,0x44,0x63,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x6C,0x62,0x65,0x72 +,0x74,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x20,0x2D,0x20,0x44,0x6F,0x6D,0x69,0x6E,0x61 +,0x6E,0x74,0x20,0x43,0x79,0x63,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x43,0x79,0x63,0x6C,0x65,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F +,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65 +,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09 +,0x3C,0x21,0x2D,0x2D,0x20,0x48,0x54,0x5F,0x44,0x43,0x50,0x48,0x41,0x53,0x45,0x20,0x2D,0x2D,0x3E,0x0A +,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x54,0x5F +,0x44,0x43,0x50,0x48,0x41,0x53,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x48,0x74,0x44,0x63,0x50,0x68,0x61,0x73,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x6C,0x62,0x65,0x72,0x74,0x20,0x54,0x72,0x61,0x6E,0x73,0x66 +,0x6F,0x72,0x6D,0x20,0x2D,0x20,0x44,0x6F,0x6D,0x69,0x6E,0x61,0x6E,0x74,0x20,0x43,0x79,0x63,0x6C,0x65 +,0x20,0x50,0x68,0x61,0x73,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x43,0x79,0x63 +,0x6C,0x65,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x48,0x54,0x5F,0x50 +,0x48,0x41,0x53,0x4F,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x54,0x5F,0x50,0x48,0x41,0x53,0x4F,0x52,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x74,0x50,0x68,0x61,0x73,0x6F,0x72,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x6C,0x62,0x65,0x72 +,0x74,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x20,0x2D,0x20,0x50,0x68,0x61,0x73,0x6F,0x72 +,0x20,0x43,0x6F,0x6D,0x70,0x6F,0x6E,0x65,0x6E,0x74,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x43,0x79,0x63,0x6C,0x65,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x50,0x68,0x61,0x73,0x65,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x51,0x75,0x61,0x64 +,0x72,0x61,0x74,0x75,0x72,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x44,0x61,0x73 +,0x68,0x65,0x64,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x48,0x54,0x5F,0x53,0x49,0x4E,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x54,0x5F,0x53,0x49,0x4E,0x45,0x3C,0x2F,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x74,0x53,0x69,0x6E,0x65,0x3C,0x2F,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x6C,0x62,0x65,0x72,0x74 +,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x20,0x2D,0x20,0x53,0x69,0x6E,0x65,0x57,0x61,0x76 +,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x43,0x79,0x63,0x6C,0x65,0x20,0x49,0x6E +,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E +,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x53 +,0x69,0x6E,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x6F,0x75,0x74,0x4C,0x65,0x61,0x64,0x53,0x69,0x6E,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x44,0x61,0x73,0x68,0x65,0x64,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A +,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x48,0x54,0x5F,0x54,0x52,0x45,0x4E,0x44,0x4C,0x49,0x4E,0x45,0x20,0x2D +,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x48,0x54,0x5F,0x54,0x52,0x45,0x4E,0x44,0x4C,0x49,0x4E,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x74,0x54,0x72,0x65,0x6E,0x64,0x6C,0x69,0x6E,0x65,0x3C,0x2F,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x6C,0x62,0x65,0x72,0x74 +,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x20,0x2D,0x20,0x49,0x6E,0x73,0x74,0x61,0x6E,0x74 +,0x61,0x6E,0x65,0x6F,0x75,0x73,0x20,0x54,0x72,0x65,0x6E,0x64,0x6C,0x69,0x6E,0x65,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69 +,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74 +,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x48,0x54,0x5F,0x54,0x52,0x45,0x4E,0x44,0x4D,0x4F,0x44 +,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x48,0x54,0x5F,0x54,0x52,0x45,0x4E,0x44,0x4D,0x4F,0x44,0x45,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x74,0x54,0x72,0x65,0x6E,0x64,0x4D,0x6F,0x64,0x65,0x3C +,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x6C,0x62 +,0x65,0x72,0x74,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x20,0x2D,0x20,0x54,0x72,0x65,0x6E +,0x64,0x20,0x76,0x73,0x20,0x43,0x79,0x63,0x6C,0x65,0x20,0x4D,0x6F,0x64,0x65,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x43,0x79,0x63,0x6C,0x65,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F +,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65 +,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65 +,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4B,0x41,0x4D,0x41,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4B,0x41,0x4D,0x41,0x3C +,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4B,0x61,0x6D,0x61,0x3C,0x2F,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4B,0x61,0x75,0x66,0x6D,0x61,0x6E +,0x20,0x41,0x64,0x61,0x70,0x74,0x69,0x76,0x65,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65 +,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C +,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E +,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E +,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4C,0x49,0x4E,0x45 +,0x41,0x52,0x52,0x45,0x47,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x49,0x4E,0x45,0x41,0x52,0x52,0x45,0x47,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x69,0x6E,0x65,0x61,0x72,0x52,0x65,0x67,0x3C,0x2F +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x69,0x6E,0x65,0x61 +,0x72,0x20,0x52,0x65,0x67,0x72,0x65,0x73,0x73,0x69,0x6F,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x53,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x20,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E +,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E +,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4C,0x49,0x4E,0x45 +,0x41,0x52,0x52,0x45,0x47,0x5F,0x41,0x4E,0x47,0x4C,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x49,0x4E,0x45,0x41,0x52,0x52 +,0x45,0x47,0x5F,0x41,0x4E,0x47,0x4C,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x4C,0x69,0x6E,0x65,0x61,0x72,0x52,0x65,0x67,0x41,0x6E,0x67,0x6C,0x65,0x3C,0x2F,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x69,0x6E,0x65,0x61,0x72,0x20,0x52 +,0x65,0x67,0x72,0x65,0x73,0x73,0x69,0x6F,0x6E,0x20,0x41,0x6E,0x67,0x6C,0x65,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x53,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x20,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F +,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56 +,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61 +,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F +,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E +,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4C,0x49,0x4E,0x45,0x41,0x52 +,0x52,0x45,0x47,0x5F,0x49,0x4E,0x54,0x45,0x52,0x43,0x45,0x50,0x54,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x49,0x4E,0x45,0x41 +,0x52,0x52,0x45,0x47,0x5F,0x49,0x4E,0x54,0x45,0x52,0x43,0x45,0x50,0x54,0x3C,0x2F,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x69,0x6E,0x65,0x61,0x72,0x52,0x65,0x67,0x49,0x6E,0x74,0x65 +,0x72,0x63,0x65,0x70,0x74,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x4C,0x69,0x6E,0x65,0x61,0x72,0x20,0x52,0x65,0x67,0x72,0x65,0x73,0x73,0x69,0x6F,0x6E,0x20 +,0x49,0x6E,0x74,0x65,0x72,0x63,0x65,0x70,0x74,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x53,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x20,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3C +,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44 +,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4C,0x49,0x4E,0x45,0x41,0x52,0x52 +,0x45,0x47,0x5F,0x53,0x4C,0x4F,0x50,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x49,0x4E,0x45,0x41,0x52,0x52,0x45,0x47,0x5F +,0x53,0x4C,0x4F,0x50,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x69 +,0x6E,0x65,0x61,0x72,0x52,0x65,0x67,0x53,0x6C,0x6F,0x70,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x69,0x6E,0x65,0x61,0x72,0x20,0x52,0x65,0x67,0x72 +,0x65,0x73,0x73,0x69,0x6F,0x6E,0x20,0x53,0x6C,0x6F,0x70,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x53,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x20,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52 +,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4C,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x4E,0x3C,0x2F,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6E,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x4C,0x6F,0x67,0x20 +,0x4E,0x61,0x74,0x75,0x72,0x61,0x6C,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61 +,0x74,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52 +,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x4C,0x4F,0x47,0x31,0x30,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x4F,0x47,0x31,0x30,0x3C,0x2F,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x67,0x31,0x30,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x4C,0x6F,0x67,0x31 +,0x30,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61 +,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C +,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x41,0x20,0x2D +,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x4D,0x41,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x6F,0x76,0x69,0x6E +,0x67,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x61,0x76,0x65,0x72,0x61,0x67,0x65,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74 +,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C +,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20 +,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F +,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30,0x3C,0x2F,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21 +,0x2D,0x2D,0x20,0x4D,0x41,0x43,0x44,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72 +,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x41,0x43,0x44,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x61,0x63,0x64,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67 +,0x65,0x20,0x43,0x6F,0x6E,0x76,0x65,0x72,0x67,0x65,0x6E,0x63,0x65,0x2F,0x44,0x69,0x76,0x65,0x72,0x67 +,0x65,0x6E,0x63,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E +,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61 +,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69 +,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x20,0x50,0x65 +,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72 +,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x66 +,0x61,0x73,0x74,0x20,0x4D,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x32,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x20,0x50,0x65 +,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72 +,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73 +,0x6C,0x6F,0x77,0x20,0x4D,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x36,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x69,0x67,0x6E,0x61,0x6C,0x20 +,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x6D,0x6F,0x6F +,0x74,0x68,0x69,0x6E,0x67,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x69,0x67,0x6E,0x61,0x6C +,0x20,0x6C,0x69,0x6E,0x65,0x20,0x28,0x6E,0x62,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x29 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x39,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x4D,0x41,0x43,0x44,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x6F,0x75,0x74,0x4D,0x41,0x43,0x44,0x53,0x69,0x67,0x6E,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x44,0x61,0x73,0x68,0x65,0x64,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x4D,0x41,0x43,0x44,0x48,0x69,0x73,0x74,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x48,0x69,0x73,0x74,0x6F,0x67,0x72,0x61,0x6D,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x4D,0x41,0x43,0x44,0x45,0x58,0x54,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x41,0x43,0x44,0x45,0x58,0x54,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x61,0x63,0x64,0x45,0x78,0x74,0x3C,0x2F +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x41,0x43,0x44,0x20 +,0x77,0x69,0x74,0x68,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x6C,0x61,0x62,0x6C,0x65,0x20,0x4D,0x41 +,0x20,0x74,0x79,0x70,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65 +,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x20,0x50 +,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65 +,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20 +,0x66,0x61,0x73,0x74,0x20,0x4D,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C +,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72 +,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x32,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x20,0x4D +,0x41,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D +,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x20,0x66,0x6F,0x72,0x20,0x66,0x61 +,0x73,0x74,0x20,0x4D,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79 +,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x20,0x50,0x65,0x72,0x69,0x6F +,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66 +,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x6C,0x6F,0x77 +,0x20,0x4D,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E +,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E +,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x36,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x20,0x4D,0x41,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E +,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x20,0x66,0x6F,0x72,0x20,0x73,0x6C,0x6F,0x77,0x20,0x4D +,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x69,0x67,0x6E,0x61,0x6C,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x6D,0x6F,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x66 +,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x69,0x67,0x6E,0x61,0x6C,0x20,0x6C,0x69,0x6E,0x65,0x20,0x28 +,0x6E,0x62,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x29,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x39,0x3C,0x2F +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53 +,0x69,0x67,0x6E,0x61,0x6C,0x20,0x4D,0x41,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79 +,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65 +,0x20,0x66,0x6F,0x72,0x20,0x73,0x69,0x67,0x6E,0x61,0x6C,0x20,0x6C,0x69,0x6E,0x65,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x41,0x43,0x44,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D +,0x41,0x43,0x44,0x53,0x69,0x67,0x6E,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x44,0x61,0x73,0x68,0x65,0x64,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x41,0x43,0x44 +,0x48,0x69,0x73,0x74,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x48,0x69,0x73,0x74,0x6F +,0x67,0x72,0x61,0x6D,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x41,0x43 +,0x44,0x46,0x49,0x58,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x41,0x43,0x44,0x46,0x49,0x58,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x61,0x63,0x64,0x46,0x69,0x78,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65 +,0x72,0x61,0x67,0x65,0x20,0x43,0x6F,0x6E,0x76,0x65,0x72,0x67,0x65,0x6E,0x63,0x65,0x2F,0x44,0x69,0x76 +,0x65,0x72,0x67,0x65,0x6E,0x63,0x65,0x20,0x46,0x69,0x78,0x20,0x31,0x32,0x2F,0x32,0x36,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64 +,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x69,0x67,0x6E,0x61,0x6C,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x6D,0x6F,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x66 +,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x69,0x67,0x6E,0x61,0x6C,0x20,0x6C,0x69,0x6E,0x65,0x20,0x28 +,0x6E,0x62,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x29,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x39,0x3C,0x2F +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x41,0x43,0x44,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x41,0x43 +,0x44,0x53,0x69,0x67,0x6E,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x44,0x61 +,0x73,0x68,0x65,0x64,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x41,0x43,0x44,0x48,0x69 +,0x73,0x74,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x48,0x69,0x73,0x74,0x6F,0x67,0x72 +,0x61,0x6D,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x41,0x4D,0x41,0x20 +,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x4D,0x41,0x4D,0x41,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x61 +,0x6D,0x61,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D +,0x45,0x53,0x41,0x20,0x41,0x64,0x61,0x70,0x74,0x69,0x76,0x65,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20 +,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76 +,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x20,0x4C,0x69,0x6D,0x69,0x74,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x55,0x70,0x70,0x65,0x72,0x20,0x6C,0x69,0x6D,0x69,0x74 +,0x20,0x75,0x73,0x65,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x61,0x64,0x61,0x70,0x74,0x69,0x76,0x65 +,0x20,0x61,0x6C,0x67,0x6F,0x72,0x69,0x74,0x68,0x6D,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x39,0x2E,0x39,0x30 +,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x32,0x3C,0x2F,0x50,0x72,0x65 +,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x32,0x2E,0x31,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x38,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45 +,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x35,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x20,0x4C,0x69,0x6D,0x69,0x74,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x6F,0x77,0x65,0x72,0x20,0x6C,0x69,0x6D,0x69,0x74,0x20,0x75,0x73,0x65 +,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x61,0x64,0x61,0x70,0x74,0x69,0x76,0x65,0x20,0x61,0x6C,0x67 +,0x6F,0x72,0x69,0x74,0x68,0x6D,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x2E,0x30,0x30 +,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x39,0x2E,0x39,0x30,0x30,0x30,0x30,0x30 +,0x65,0x2D,0x31,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x32,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x36,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x35,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x41,0x4D,0x41,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x46 +,0x41,0x4D,0x41,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x44,0x61,0x73,0x68,0x65,0x64 +,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x41 +,0x56,0x50,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x4D,0x41,0x56,0x50,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x56,0x61,0x72,0x69,0x61,0x62 +,0x6C,0x65,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x61,0x76,0x65,0x72,0x61,0x67,0x65,0x20 +,0x77,0x69,0x74,0x68,0x20,0x76,0x61,0x72,0x69,0x61,0x62,0x6C,0x65,0x20,0x70,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x20,0x53 +,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72 +,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x50,0x65,0x72,0x69,0x6F,0x64,0x73,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x61,0x6C,0x75,0x65,0x20,0x6C,0x65,0x73,0x73,0x20,0x74,0x68,0x61 +,0x6E,0x20,0x6D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x63,0x68 +,0x61,0x6E,0x67,0x65,0x64,0x20,0x74,0x6F,0x20,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x20,0x70,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E +,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E +,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C +,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x20,0x50,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x61,0x6C,0x75,0x65,0x20,0x68 +,0x69,0x67,0x68,0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,0x6D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x20,0x77 +,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x74,0x6F,0x20,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4D +,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65 +,0x20,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x41,0x58,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x41,0x58,0x3C,0x2F,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x61,0x78,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x48,0x69,0x67,0x68,0x65,0x73,0x74,0x20,0x76,0x61 +,0x6C,0x75,0x65,0x20,0x6F,0x76,0x65,0x72,0x20,0x61,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64 +,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61 +,0x74,0x68,0x20,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41 +,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65 +,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D +,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C +,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A +,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x41,0x58,0x49,0x4E,0x44,0x45,0x58,0x20,0x2D,0x2D,0x3E,0x0A,0x09 +,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x41,0x58,0x49 +,0x4E,0x44,0x45,0x58,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x61,0x78 +,0x49,0x6E,0x64,0x65,0x78,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x49,0x6E,0x64,0x65,0x78,0x20,0x6F,0x66,0x20,0x68,0x69,0x67,0x68,0x65,0x73,0x74,0x20,0x76 +,0x61,0x6C,0x75,0x65,0x20,0x6F,0x76,0x65,0x72,0x20,0x61,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65 +,0x64,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D +,0x61,0x74,0x68,0x20,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E +,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20 +,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A +,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x45,0x44,0x50,0x52,0x49,0x43,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09 +,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x45,0x44,0x50 +,0x52,0x49,0x43,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x65,0x64 +,0x50,0x72,0x69,0x63,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x4D,0x65,0x64,0x69,0x61,0x6E,0x20,0x50,0x72,0x69,0x63,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x50,0x72,0x69,0x63,0x65,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D +,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x4D,0x46,0x49,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x46,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61 +,0x6D,0x65,0x3E,0x4D,0x66,0x69,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x4D,0x6F,0x6E,0x65,0x79,0x20,0x46,0x6C,0x6F,0x77,0x20,0x49,0x6E,0x64,0x65,0x78,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49 +,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55 +,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67 +,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48 +,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x56,0x6F,0x6C,0x75,0x6D,0x65 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x56,0x6F +,0x6C,0x75,0x6D,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20 +,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49 +,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x4D,0x49,0x44,0x50,0x4F,0x49,0x4E,0x54,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x49,0x44,0x50,0x4F,0x49,0x4E,0x54 +,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x69,0x64,0x50,0x6F,0x69,0x6E +,0x74,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x69 +,0x64,0x50,0x6F,0x69,0x6E,0x74,0x20,0x6F,0x76,0x65,0x72,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74,0x75 +,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61 +,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70 +,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67 +,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D +,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61 +,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45 +,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x49 +,0x44,0x50,0x52,0x49,0x43,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69 +,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x49,0x44,0x50,0x52,0x49,0x43,0x45,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x69,0x64,0x50,0x72,0x69,0x63,0x65,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x69,0x64,0x70,0x6F,0x69 +,0x6E,0x74,0x20,0x50,0x72,0x69,0x63,0x65,0x20,0x6F,0x76,0x65,0x72,0x20,0x70,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x20,0x53 +,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72 +,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D +,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75 +,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D +,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x49,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x49,0x4E,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x69,0x6E,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x6F,0x77,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65 +,0x20,0x6F,0x76,0x65,0x72,0x20,0x61,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x70,0x65 +,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20 +,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F +,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61 +,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69 +,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65 +,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72 +,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D +,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D +,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21 +,0x2D,0x2D,0x20,0x4D,0x49,0x4E,0x49,0x4E,0x44,0x45,0x58,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x49,0x4E,0x49,0x4E,0x44,0x45 +,0x58,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x69,0x6E,0x49,0x6E,0x64 +,0x65,0x78,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x49 +,0x6E,0x64,0x65,0x78,0x20,0x6F,0x66,0x20,0x6C,0x6F,0x77,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65 +,0x20,0x6F,0x76,0x65,0x72,0x20,0x61,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x70,0x65 +,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20 +,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70 +,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67 +,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D +,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61 +,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45 +,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x4D,0x49,0x4E,0x4D,0x41,0x58,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x49,0x4E,0x4D,0x41,0x58,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x69,0x6E,0x4D,0x61,0x78,0x3C,0x2F,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4C,0x6F,0x77,0x65,0x73,0x74,0x20,0x61 +,0x6E,0x64,0x20,0x68,0x69,0x67,0x68,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x73,0x20,0x6F,0x76 +,0x65,0x72,0x20,0x61,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x70,0x65,0x72,0x69,0x6F +,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x4F,0x70,0x65 +,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72 +,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F +,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66 +,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C +,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72 +,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x69,0x6E,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x61,0x78,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D +,0x2D,0x20,0x4D,0x49,0x4E,0x4D,0x41,0x58,0x49,0x4E,0x44,0x45,0x58,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x49,0x4E,0x4D,0x41 +,0x58,0x49,0x4E,0x44,0x45,0x58,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D +,0x69,0x6E,0x4D,0x61,0x78,0x49,0x6E,0x64,0x65,0x78,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73 +,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x49,0x6E,0x64,0x65,0x78,0x65,0x73,0x20,0x6F,0x66,0x20,0x6C,0x6F +,0x77,0x65,0x73,0x74,0x20,0x61,0x6E,0x64,0x20,0x68,0x69,0x67,0x68,0x65,0x73,0x74,0x20,0x76,0x61,0x6C +,0x75,0x65,0x73,0x20,0x6F,0x76,0x65,0x72,0x20,0x61,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64 +,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61 +,0x74,0x68,0x20,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52 +,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F +,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61 +,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32 +,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61 +,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x69,0x6E,0x49,0x64,0x78,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x4D,0x61,0x78 +,0x49,0x64,0x78,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x49,0x4E,0x55,0x53,0x5F,0x44,0x49,0x20 +,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x4D,0x49,0x4E,0x55,0x53,0x5F,0x44,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x4D,0x69,0x6E,0x75,0x73,0x44,0x49,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x69,0x6E,0x75,0x73,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74 +,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C +,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x49,0x4E,0x55,0x53,0x5F,0x44 +,0x4D,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x4D,0x49,0x4E,0x55,0x53,0x5F,0x44,0x4D,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x4D,0x69,0x6E,0x75,0x73,0x44,0x4D,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x69,0x6E,0x75,0x73,0x20,0x44,0x69,0x72,0x65,0x63,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x65,0x6D,0x65,0x6E,0x74,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61 +,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62 +,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61 +,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4D,0x4F,0x4D,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x4F +,0x4D,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x6F,0x6D,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74 +,0x75,0x6D,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75 +,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52 +,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F +,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61 +,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31 +,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61 +,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x4D,0x55,0x4C,0x54,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4D,0x55,0x4C,0x54,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x4D,0x75,0x6C,0x74,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x41,0x72,0x69,0x74,0x68,0x6D,0x65,0x74 +,0x69,0x63,0x20,0x4D,0x75,0x6C,0x74,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61 +,0x74,0x68,0x20,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52 +,0x65,0x61,0x6C,0x30,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x31,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4E,0x41,0x54,0x52,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4E +,0x41,0x54,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4E,0x61,0x74,0x72 +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x6F,0x72 +,0x6D,0x61,0x6C,0x69,0x7A,0x65,0x64,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x20,0x54,0x72,0x75,0x65 +,0x20,0x52,0x61,0x6E,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x56,0x6F,0x6C +,0x61,0x74,0x69,0x6C,0x69,0x74,0x79,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72 +,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69 +,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E +,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69 +,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31 +,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x4F,0x42,0x56,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x4F,0x42,0x56,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x62,0x76,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4F,0x6E,0x20,0x42,0x61,0x6C,0x61,0x6E,0x63,0x65,0x20 +,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x56,0x6F,0x6C +,0x75,0x6D,0x65,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61 +,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69 +,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x56,0x6F +,0x6C,0x75,0x6D,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x50,0x4C,0x55,0x53,0x5F,0x44,0x49,0x20,0x2D,0x2D,0x3E,0x0A,0x09 +,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x4C,0x55,0x53 +,0x5F,0x44,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x50,0x6C,0x75,0x73 +,0x44,0x49,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50 +,0x6C,0x75,0x73,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x20,0x49,0x6E,0x64,0x69 +,0x63,0x61,0x74,0x6F,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65 +,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20 +,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62 +,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09 +,0x3C,0x21,0x2D,0x2D,0x20,0x50,0x4C,0x55,0x53,0x5F,0x44,0x4D,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x4C,0x55,0x53,0x5F,0x44 +,0x4D,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x50,0x6C,0x75,0x73,0x44,0x4D +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x6C,0x75 +,0x73,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x65,0x6D,0x65 +,0x6E,0x74,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75 +,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F +,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61 +,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31 +,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61 +,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x50,0x50,0x4F,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x50,0x4F,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x50,0x70,0x6F,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x50,0x65,0x72,0x63,0x65,0x6E,0x74,0x61,0x67,0x65,0x20,0x50,0x72,0x69,0x63,0x65,0x20,0x4F +,0x73,0x63,0x69,0x6C,0x6C,0x61,0x74,0x6F,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C +,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61 +,0x73,0x74,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E +,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20 +,0x74,0x68,0x65,0x20,0x66,0x61,0x73,0x74,0x20,0x4D,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x32,0x3C,0x2F,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C +,0x6F,0x77,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E +,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20 +,0x74,0x68,0x65,0x20,0x73,0x6C,0x6F,0x77,0x20,0x4D,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x36,0x3C,0x2F,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4D,0x41 +,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20 +,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C +,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x52,0x4F,0x43,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x52,0x4F,0x43,0x3C,0x2F,0x41,0x62 +,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x52,0x6F,0x63,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x52,0x61,0x74,0x65,0x20,0x6F,0x66,0x20,0x63,0x68,0x61 +,0x6E,0x67,0x65,0x20,0x3A,0x20,0x28,0x28,0x70,0x72,0x69,0x63,0x65,0x2F,0x70,0x72,0x65,0x76,0x50,0x72 +,0x69,0x63,0x65,0x29,0x2D,0x31,0x29,0x2A,0x31,0x30,0x30,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72 +,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E +,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x31,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x52,0x4F,0x43,0x50,0x20,0x2D,0x2D,0x3E,0x0A,0x09 +,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x52,0x4F,0x43,0x50 +,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x52,0x6F,0x63,0x50,0x3C,0x2F,0x43 +,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x52,0x61,0x74,0x65,0x20,0x6F +,0x66,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x50,0x65,0x72,0x63,0x65,0x6E,0x74,0x61,0x67,0x65,0x3A +,0x20,0x28,0x70,0x72,0x69,0x63,0x65,0x2D,0x70,0x72,0x65,0x76,0x50,0x72,0x69,0x63,0x65,0x29,0x2F,0x70 +,0x72,0x65,0x76,0x50,0x72,0x69,0x63,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D +,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D +,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75 +,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D +,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x30 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x52,0x4F,0x43,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69 +,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x52,0x4F,0x43,0x52,0x3C,0x2F,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x52,0x6F,0x63,0x52,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x52,0x61,0x74,0x65,0x20,0x6F,0x66,0x20,0x63 +,0x68,0x61,0x6E,0x67,0x65,0x20,0x72,0x61,0x74,0x69,0x6F,0x3A,0x20,0x28,0x70,0x72,0x69,0x63,0x65,0x2F +,0x70,0x72,0x65,0x76,0x50,0x72,0x69,0x63,0x65,0x29,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73 +,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54 +,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D +,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E +,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x31,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x52,0x4F,0x43,0x52,0x31,0x30,0x30,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x52,0x4F +,0x43,0x52,0x31,0x30,0x30,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x52,0x6F +,0x63,0x52,0x31,0x30,0x30,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x52,0x61,0x74,0x65,0x20,0x6F,0x66,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x72,0x61,0x74 +,0x69,0x6F,0x20,0x31,0x30,0x30,0x20,0x73,0x63,0x61,0x6C,0x65,0x3A,0x20,0x28,0x70,0x72,0x69,0x63,0x65 +,0x2F,0x70,0x72,0x65,0x76,0x50,0x72,0x69,0x63,0x65,0x29,0x2A,0x31,0x30,0x30,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63 +,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F +,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56 +,0x61,0x6C,0x75,0x65,0x3E,0x31,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61 +,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F +,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E +,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x52,0x53,0x49,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x52 +,0x53,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x52,0x73,0x69,0x3C,0x2F +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x52,0x65,0x6C,0x61,0x74 +,0x69,0x76,0x65,0x20,0x53,0x74,0x72,0x65,0x6E,0x67,0x74,0x68,0x20,0x49,0x6E,0x64,0x65,0x78,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E +,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E +,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E +,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x41,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x41,0x52,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x61,0x72,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x61,0x72,0x61,0x62,0x6F,0x6C,0x69,0x63 +,0x20,0x53,0x41,0x52,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C +,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x41,0x63,0x63,0x65,0x6C,0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x46,0x61,0x63,0x74,0x6F,0x72 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x63,0x63,0x65,0x6C,0x65,0x72,0x61,0x74,0x69 +,0x6F,0x6E,0x20,0x46,0x61,0x63,0x74,0x6F,0x72,0x20,0x75,0x73,0x65,0x64,0x20,0x75,0x70,0x20,0x74,0x6F +,0x20,0x74,0x68,0x65,0x20,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x20,0x76,0x61,0x6C,0x75,0x65,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C +,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69 +,0x6F,0x6E,0x3E,0x34,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x46,0x20,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x63,0x63,0x65,0x6C,0x65 +,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x46,0x61,0x63,0x74,0x6F,0x72,0x20,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x20,0x76,0x61,0x6C,0x75,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x34,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69 +,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x34,0x2E,0x30,0x30,0x30 +,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65 +,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x41,0x52,0x45,0x58,0x54,0x20,0x2D,0x2D,0x3E,0x0A +,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x41,0x52 +,0x45,0x58,0x54,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x61,0x72,0x45 +,0x78,0x74,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50 +,0x61,0x72,0x61,0x62,0x6F,0x6C,0x69,0x63,0x20,0x53,0x41,0x52,0x20,0x2D,0x20,0x45,0x78,0x74,0x65,0x6E +,0x64,0x65,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61 +,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F +,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x53,0x74,0x61,0x72,0x74,0x20,0x56,0x61,0x6C,0x75,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x53,0x74,0x61,0x72,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x20,0x61,0x6E,0x64,0x20,0x64,0x69,0x72 +,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x30,0x20,0x66,0x6F,0x72,0x20,0x41,0x75,0x74,0x6F,0x2C,0x20 +,0x26,0x67,0x74,0x3B,0x30,0x20,0x66,0x6F,0x72,0x20,0x4C,0x6F,0x6E,0x67,0x2C,0x20,0x26,0x6C,0x74,0x3B +,0x30,0x20,0x66,0x6F,0x72,0x20,0x53,0x68,0x6F,0x72,0x74,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D +,0x3E,0x2D,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33 +,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x34,0x3C +,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C +,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4F,0x66,0x66,0x73,0x65,0x74,0x20,0x6F,0x6E,0x20,0x52 +,0x65,0x76,0x65,0x72,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x50,0x65,0x72,0x63 +,0x65,0x6E,0x74,0x20,0x6F,0x66,0x66,0x73,0x65,0x74,0x20,0x61,0x64,0x64,0x65,0x64,0x2F,0x72,0x65,0x6D +,0x6F,0x76,0x65,0x64,0x20,0x74,0x6F,0x20,0x69,0x6E,0x69,0x74,0x69,0x61,0x6C,0x20,0x73,0x74,0x6F,0x70 +,0x20,0x6F,0x6E,0x20,0x73,0x68,0x6F,0x72,0x74,0x2F,0x6C,0x6F,0x6E,0x67,0x20,0x72,0x65,0x76,0x65,0x72 +,0x73,0x61,0x6C,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33 +,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72 +,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x34,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61 +,0x72,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x2E,0x35,0x30,0x30,0x30,0x30,0x30,0x65 +,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F +,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x41 +,0x46,0x20,0x49,0x6E,0x69,0x74,0x20,0x4C,0x6F,0x6E,0x67,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x41,0x63,0x63,0x65,0x6C,0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x46,0x61,0x63,0x74,0x6F,0x72 +,0x20,0x69,0x6E,0x69,0x74,0x69,0x61,0x6C,0x20,0x76,0x61,0x6C,0x75,0x65,0x20,0x66,0x6F,0x72,0x20,0x74 +,0x68,0x65,0x20,0x4C,0x6F,0x6E,0x67,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D +,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F +,0x6E,0x3E,0x34,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x31,0x2E,0x39,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x46,0x20,0x4C,0x6F,0x6E,0x67 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x63,0x63,0x65,0x6C,0x65,0x72,0x61,0x74,0x69 +,0x6F,0x6E,0x20,0x46,0x61,0x63,0x74,0x6F,0x72,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x4C,0x6F +,0x6E,0x67,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x34,0x3C,0x2F +,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30 +,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30 +,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x2E,0x30,0x30 +,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x46,0x20,0x4D,0x61,0x78,0x20,0x4C,0x6F,0x6E,0x67,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x63,0x63,0x65,0x6C,0x65,0x72,0x61,0x74,0x69,0x6F +,0x6E,0x20,0x46,0x61,0x63,0x74,0x6F,0x72,0x20,0x6D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x20,0x76,0x61,0x6C +,0x75,0x65,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x4C,0x6F,0x6E,0x67,0x20,0x64,0x69,0x72,0x65 +,0x63,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30 +,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65 +,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x34,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x34,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x41,0x46,0x20,0x49,0x6E,0x69,0x74,0x20,0x53,0x68,0x6F,0x72,0x74,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x41,0x63,0x63,0x65,0x6C,0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x46,0x61,0x63 +,0x74,0x6F,0x72,0x20,0x69,0x6E,0x69,0x74,0x69,0x61,0x6C,0x20,0x76,0x61,0x6C,0x75,0x65,0x20,0x66,0x6F +,0x72,0x20,0x74,0x68,0x65,0x20,0x53,0x68,0x6F,0x72,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6F +,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65 +,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D +,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C +,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63 +,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x34,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x2E,0x39,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74 +,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56 +,0x61,0x6C,0x75,0x65,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x46,0x20 +,0x53,0x68,0x6F,0x72,0x74,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x63,0x63,0x65,0x6C +,0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x46,0x61,0x63,0x74,0x6F,0x72,0x20,0x66,0x6F,0x72,0x20,0x74 +,0x68,0x65,0x20,0x53,0x68,0x6F,0x72,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C +,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61 +,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69 +,0x6F,0x6E,0x3E,0x34,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x41,0x46,0x20,0x4D,0x61,0x78 +,0x20,0x53,0x68,0x6F,0x72,0x74,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x41,0x63,0x63,0x65 +,0x6C,0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x46,0x61,0x63,0x74,0x6F,0x72,0x20,0x6D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x20,0x76,0x61,0x6C,0x75,0x65,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x53,0x68 +,0x6F,0x72,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x30,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33 +,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x34,0x3C +,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x34,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30 +,0x30,0x65,0x2D,0x32,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C +,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x49,0x4E,0x20,0x2D +,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x53,0x49,0x4E,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x69,0x6E,0x3C +,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74 +,0x6F,0x72,0x20,0x54,0x72,0x69,0x67,0x6F,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69,0x63,0x20,0x53,0x69,0x6E +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61,0x6E +,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x49,0x4E,0x48,0x20 +,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x53,0x49,0x4E,0x48,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x69 +,0x6E,0x68,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56 +,0x65,0x63,0x74,0x6F,0x72,0x20,0x54,0x72,0x69,0x67,0x6F,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69,0x63,0x20 +,0x53,0x69,0x6E,0x68,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20 +,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53 +,0x4D,0x41,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75 +,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74 +,0x69,0x6F,0x6E,0x3E,0x53,0x4D,0x41,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x53,0x6D,0x61,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x53,0x69,0x6D,0x70,0x6C,0x65,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67 +,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x20 +,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65 +,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52 +,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F +,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61 +,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32 +,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61 +,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61 +,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46 +,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63 +,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D +,0x20,0x53,0x51,0x52,0x54,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x51,0x52,0x54,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x53,0x71,0x72,0x74,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x53,0x71,0x75,0x61,0x72,0x65,0x20,0x52 +,0x6F,0x6F,0x74,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54 +,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09 +,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x54 +,0x44,0x44,0x45,0x56,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x54,0x44,0x44,0x45,0x56,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x74,0x64,0x44,0x65,0x76,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x20,0x44,0x65,0x76 +,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x53,0x74,0x61 +,0x74,0x69,0x73,0x74,0x69,0x63,0x20,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3C,0x2F,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20 +,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62 +,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x35,0x3C,0x2F,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x44,0x65 +,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x73,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x62 +,0x20,0x6F,0x66,0x20,0x64,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x73,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x2D,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D +,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75 +,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C,0x2F,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E +,0x3E,0x32,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x2D,0x32,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x32,0x2E,0x30 +,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61 +,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53 +,0x54,0x4F,0x43,0x48,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C +,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x54,0x4F,0x43,0x48,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x53,0x74,0x6F,0x63,0x68,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65 +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x74,0x6F,0x63,0x68,0x61,0x73,0x74,0x69,0x63,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47 +,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69 +,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x2D,0x4B,0x20 +,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x69,0x6D,0x65 +,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x62,0x75,0x69,0x6C,0x64,0x69,0x6E,0x67 +,0x20,0x74,0x68,0x65,0x20,0x46,0x61,0x73,0x74,0x2D,0x4B,0x20,0x6C,0x69,0x6E,0x65,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D +,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E +,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x35,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x2D,0x4B,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x6D,0x6F,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x66,0x6F,0x72,0x20,0x6D +,0x61,0x6B,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x53,0x6C,0x6F,0x77,0x2D,0x4B,0x20,0x6C,0x69,0x6E +,0x65,0x2E,0x20,0x55,0x73,0x75,0x61,0x6C,0x6C,0x79,0x20,0x73,0x65,0x74,0x20,0x74,0x6F,0x20,0x33,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61 +,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C +,0x75,0x65,0x3E,0x33,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x2D,0x4B,0x20,0x4D,0x41,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41 +,0x76,0x65,0x72,0x61,0x67,0x65,0x20,0x66,0x6F,0x72,0x20,0x53,0x6C,0x6F,0x77,0x2D,0x4B,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x2D,0x44,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x6D,0x6F,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x66,0x6F,0x72,0x20,0x6D +,0x61,0x6B,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x53,0x6C,0x6F,0x77,0x2D,0x44,0x20,0x6C,0x69,0x6E +,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30 +,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56 +,0x61,0x6C,0x75,0x65,0x3E,0x33,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x6C,0x6F,0x77,0x2D,0x44,0x20,0x4D,0x41,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67 +,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x20,0x66,0x6F,0x72,0x20,0x53,0x6C,0x6F,0x77,0x2D,0x44,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x53,0x6C +,0x6F,0x77,0x4B,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x44,0x61,0x73,0x68,0x65,0x64 +,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x53,0x6C,0x6F,0x77,0x44,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x44,0x61,0x73,0x68,0x65,0x64,0x20,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x54,0x4F,0x43,0x48,0x46,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x54 +,0x4F,0x43,0x48,0x46,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x74,0x6F +,0x63,0x68,0x46,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x53,0x74,0x6F,0x63,0x68,0x61,0x73,0x74,0x69,0x63,0x20,0x46,0x61,0x73,0x74,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63 +,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x2D,0x4B,0x20,0x50 +,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x69,0x6D,0x65,0x20 +,0x70,0x65,0x72,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x62,0x75,0x69,0x6C,0x64,0x69,0x6E,0x67,0x20 +,0x74,0x68,0x65,0x20,0x46,0x61,0x73,0x74,0x2D,0x4B,0x20,0x6C,0x69,0x6E,0x65,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69 +,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x35 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x46,0x61,0x73,0x74,0x2D,0x44,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74 +,0x69,0x6F,0x6E,0x3E,0x53,0x6D,0x6F,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x66,0x6F,0x72,0x20,0x6D,0x61 +,0x6B,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x46,0x61,0x73,0x74,0x2D,0x44,0x20,0x6C,0x69,0x6E,0x65 +,0x2E,0x20,0x55,0x73,0x75,0x61,0x6C,0x6C,0x79,0x20,0x73,0x65,0x74,0x20,0x74,0x6F,0x20,0x33,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x33,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x2D,0x44,0x20,0x4D,0x41,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76 +,0x65,0x72,0x61,0x67,0x65,0x20,0x66,0x6F,0x72,0x20,0x46,0x61,0x73,0x74,0x2D,0x44,0x3C,0x2F,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x46,0x61,0x73,0x74,0x4B +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x46,0x61,0x73,0x74,0x44,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x54,0x4F,0x43,0x48,0x52,0x53 +,0x49,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x53,0x54,0x4F,0x43,0x48,0x52,0x53,0x49,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69 +,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E +,0x61,0x6D,0x65,0x3E,0x53,0x74,0x6F,0x63,0x68,0x52,0x73,0x69,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x74,0x6F,0x63,0x68,0x61,0x73,0x74,0x69,0x63,0x20 +,0x52,0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x53,0x74,0x72,0x65,0x6E,0x67,0x74,0x68,0x20,0x49,0x6E +,0x64,0x65,0x78,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74 +,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C +,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61,0x73,0x74,0x2D,0x4B,0x20,0x50,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x69,0x6D,0x65,0x20,0x70,0x65,0x72 +,0x69,0x6F,0x64,0x20,0x66,0x6F,0x72,0x20,0x62,0x75,0x69,0x6C,0x64,0x69,0x6E,0x67,0x20,0x74,0x68,0x65 +,0x20,0x46,0x61,0x73,0x74,0x2D,0x4B,0x20,0x6C,0x69,0x6E,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D +,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x35,0x3C,0x2F,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x61 +,0x73,0x74,0x2D,0x44,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x53,0x6D,0x6F,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x66,0x6F,0x72,0x20,0x6D,0x61,0x6B,0x69,0x6E +,0x67,0x20,0x74,0x68,0x65,0x20,0x46,0x61,0x73,0x74,0x2D,0x44,0x20,0x6C,0x69,0x6E,0x65,0x2E,0x20,0x55 +,0x73,0x75,0x61,0x6C,0x6C,0x79,0x20,0x73,0x65,0x74,0x20,0x74,0x6F,0x20,0x33,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69 +,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x46,0x61,0x73,0x74,0x2D,0x44,0x20,0x4D,0x41,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x54,0x79,0x70,0x65,0x20,0x6F,0x66,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61 +,0x67,0x65,0x20,0x66,0x6F,0x72,0x20,0x46,0x61,0x73,0x74,0x2D,0x44,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x4D,0x41,0x20,0x54,0x79,0x70,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x30,0x3C,0x2F,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44 +,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x46,0x61,0x73,0x74,0x4B,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x46,0x61,0x73 +,0x74,0x44,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x55,0x42,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x55,0x42,0x3C,0x2F +,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D +,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x75,0x62,0x3C,0x2F,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x41,0x72 +,0x69,0x74,0x68,0x6D,0x65,0x74,0x69,0x63,0x20,0x53,0x75,0x62,0x73,0x74,0x72,0x61,0x63,0x74,0x69,0x6F +,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x4F,0x70,0x65 +,0x72,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x30,0x3C,0x2F +,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65 +,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72 +,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x31,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x53,0x55,0x4D,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x55,0x4D,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x75,0x6D,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x53,0x75,0x6D,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x4F,0x70,0x65,0x72,0x61,0x74,0x6F +,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75 +,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65 +,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F +,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75 +,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75 +,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F +,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52 +,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x54,0x33,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x33,0x3C,0x2F,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x33,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x72,0x69,0x70,0x6C,0x65,0x20,0x45,0x78,0x70,0x6F +,0x6E,0x65,0x6E,0x74,0x69,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61 +,0x67,0x65,0x20,0x28,0x54,0x33,0x29,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76 +,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70 +,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x55,0x6E,0x73,0x74,0x61,0x62,0x6C,0x65,0x20,0x50,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64 +,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20 +,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x35,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x46 +,0x61,0x63,0x74,0x6F,0x72,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x6F,0x6C,0x75,0x6D +,0x65,0x20,0x46,0x61,0x63,0x74,0x6F,0x72,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x30,0x2E +,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30 +,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x32,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69 +,0x73,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x2E,0x30,0x30,0x30 +,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x35,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x32,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x37,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65 +,0x2D,0x31,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x54,0x41,0x4E,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x41,0x4E,0x3C,0x2F,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65 +,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x61,0x6E,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20,0x54,0x72,0x69 +,0x67,0x6F,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69,0x63,0x20,0x54,0x61,0x6E,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F +,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C +,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65 +,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x54,0x41,0x4E,0x48,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x41,0x4E,0x48,0x3C +,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x61,0x6E,0x68,0x3C,0x2F,0x43,0x61 +,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x56,0x65,0x63,0x74,0x6F,0x72,0x20 +,0x54,0x72,0x69,0x67,0x6F,0x6E,0x6F,0x6D,0x65,0x74,0x72,0x69,0x63,0x20,0x54,0x61,0x6E,0x68,0x3C,0x2F +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x61,0x74,0x68,0x20,0x54,0x72,0x61,0x6E,0x73,0x66 +,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75 +,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65 +,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x54,0x45,0x4D,0x41,0x20,0x2D,0x2D +,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F +,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x54 +,0x45,0x4D,0x41,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x65,0x6D,0x61 +,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x72,0x69 +,0x70,0x6C,0x65,0x20,0x45,0x78,0x70,0x6F,0x6E,0x65,0x6E,0x74,0x69,0x61,0x6C,0x20,0x4D,0x6F,0x76,0x69 +,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73 +,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64 +,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E +,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x54,0x52,0x41,0x4E,0x47,0x45,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x52 +,0x41,0x4E,0x47,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x72,0x75 +,0x65,0x52,0x61,0x6E,0x67,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x54,0x72,0x75,0x65,0x20,0x52,0x61,0x6E,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x56,0x6F,0x6C,0x61,0x74,0x69,0x6C,0x69,0x74,0x79,0x20,0x49,0x6E,0x64,0x69,0x63 +,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C +,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75 +,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73 +,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43 +,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61 +,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21 +,0x2D,0x2D,0x20,0x54,0x52,0x49,0x4D,0x41,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E +,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x52,0x49,0x4D,0x41,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x72,0x69,0x6D,0x61,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C +,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x72,0x69,0x61,0x6E,0x67,0x75,0x6C,0x61,0x72 +,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F +,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72 +,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65 +,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F +,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E +,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69 +,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E +,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63 +,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C +,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69 +,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E +,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x54,0x52,0x49,0x58,0x20 +,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74 +,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E +,0x3E,0x54,0x52,0x49,0x58,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x72 +,0x69,0x78,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x31 +,0x2D,0x64,0x61,0x79,0x20,0x52,0x61,0x74,0x65,0x2D,0x4F,0x66,0x2D,0x43,0x68,0x61,0x6E,0x67,0x65,0x20 +,0x28,0x52,0x4F,0x43,0x29,0x20,0x6F,0x66,0x20,0x61,0x20,0x54,0x72,0x69,0x70,0x6C,0x65,0x20,0x53,0x6D +,0x6F,0x6F,0x74,0x68,0x20,0x45,0x4D,0x41,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D +,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20 +,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69 +,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D +,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75 +,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72 +,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E +,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D +,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72 +,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30 +,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C +,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A +,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x54,0x53,0x46,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41 +,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x53,0x46,0x3C,0x2F,0x41,0x62,0x62 +,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43 +,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x73,0x66,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x69,0x6D,0x65,0x20,0x53,0x65,0x72,0x69,0x65,0x73,0x20 +,0x46,0x6F,0x72,0x65,0x63,0x61,0x73,0x74,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x53 +,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x20,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3C,0x2F +,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61 +,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F +,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30 +,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D +,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61 +,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C +,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C +,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74 +,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61 +,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x54,0x59,0x50,0x50,0x52,0x49,0x43,0x45 +,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x54,0x59,0x50,0x50,0x52,0x49,0x43,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61 +,0x6D,0x65,0x3E,0x54,0x79,0x70,0x50,0x72,0x69,0x63,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61 +,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63 +,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x54,0x79,0x70,0x69,0x63,0x61,0x6C,0x20,0x50,0x72,0x69,0x63 +,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x72,0x69,0x63,0x65,0x20,0x54,0x72 +,0x61,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09 +,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65 +,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67 +,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F +,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54 +,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65 +,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A +,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x55,0x4C,0x54,0x4F,0x53,0x43,0x20,0x2D,0x2D,0x3E +,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x55,0x4C +,0x54,0x4F,0x53,0x43,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x55,0x6C,0x74 +,0x4F,0x73,0x63,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x55,0x6C,0x74,0x69,0x6D,0x61,0x74,0x65,0x20,0x4F,0x73,0x63,0x69,0x6C,0x6C,0x61,0x74,0x6F,0x72,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49 +,0x6E,0x64,0x69,0x63,0x61,0x74,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79 +,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E +,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F +,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E +,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75 +,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F +,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x46,0x69,0x72,0x73 +,0x74,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75 +,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x62,0x61,0x72,0x73,0x20,0x66,0x6F,0x72,0x20,0x31,0x73,0x74 +,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x2E,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72 +,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E +,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61 +,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31 +,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78 +,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61 +,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C +,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x37,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x53,0x65,0x63,0x6F,0x6E,0x64 +,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D +,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x62,0x61,0x72,0x73,0x20,0x66,0x72,0x6F,0x20,0x32,0x6E,0x64,0x20 +,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65 +,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D +,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74 +,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53 +,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66 +,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C +,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C +,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x68,0x69,0x72,0x64,0x20,0x50 +,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65 +,0x72,0x20,0x6F,0x66,0x20,0x62,0x61,0x72,0x73,0x20,0x66,0x6F,0x72,0x20,0x33,0x72,0x64,0x20,0x70,0x65 +,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65 +,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69 +,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D +,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31 +,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72 +,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E +,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45 +,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x32,0x38,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56 +,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49 +,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73 +,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41 +,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D +,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x56,0x41,0x52 +,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63 +,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F +,0x6E,0x3E,0x56,0x41,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x56,0x61 +,0x72,0x69,0x61,0x6E,0x63,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D +,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x56,0x61,0x72,0x69,0x61,0x6E,0x63,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49 +,0x64,0x3E,0x53,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x20,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E +,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62 +,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F +,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74 +,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65 +,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30 +,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30 +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E +,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49 +,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65 +,0x3E,0x35,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61 +,0x6D,0x65,0x3E,0x44,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x73,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x4E,0x62,0x20,0x6F,0x66,0x20,0x64,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x73,0x3C +,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x3C,0x2F,0x54,0x79,0x70 +,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09 +,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x2D,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B +,0x33,0x37,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D +,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x33,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x33,0x37,0x3C +,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x50,0x72,0x65,0x63 +,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x32,0x3C,0x2F,0x50,0x72,0x65,0x63,0x69,0x73,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74 +,0x3E,0x2D,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B +,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E +,0x74,0x3E,0x32,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2D,0x31,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65 +,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74 +,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x2E,0x30,0x30,0x30,0x30,0x30,0x30,0x65,0x2B,0x30,0x3C,0x2F,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44 +,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C +,0x21,0x2D,0x2D,0x20,0x57,0x43,0x4C,0x50,0x52,0x49,0x43,0x45,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46 +,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x57,0x43,0x4C,0x50,0x52,0x49 +,0x43,0x45,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09 +,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x57,0x63,0x6C,0x50,0x72 +,0x69,0x63,0x65,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E +,0x57,0x65,0x69,0x67,0x68,0x74,0x65,0x64,0x20,0x43,0x6C,0x6F,0x73,0x65,0x20,0x50,0x72,0x69,0x63,0x65 +,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x50,0x72,0x69,0x63,0x65,0x20,0x54,0x72,0x61 +,0x6E,0x73,0x66,0x6F,0x72,0x6D,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C +,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4F,0x76,0x65,0x72 +,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73 +,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65 +,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64 +,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70 +,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09 +,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75 +,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75 +,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54 +,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79 +,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61 +,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C +,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09 +,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E +,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20,0x57,0x49,0x4C,0x4C,0x52,0x20,0x2D,0x2D,0x3E,0x0A,0x09 +,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A +,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x57,0x49,0x4C,0x4C +,0x52,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C +,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x57,0x69,0x6C,0x6C,0x52,0x3C +,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x3C,0x53 +,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x57,0x69,0x6C,0x6C +,0x69,0x61,0x6D,0x73,0x26,0x61,0x70,0x6F,0x73,0x3B,0x20,0x25,0x52,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74 +,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75 +,0x70,0x49,0x64,0x3E,0x4D,0x6F,0x6D,0x65,0x6E,0x74,0x75,0x6D,0x20,0x49,0x6E,0x64,0x69,0x63,0x61,0x74 +,0x6F,0x72,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E +,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x48,0x69 +,0x67,0x68,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x48,0x69,0x67,0x68,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67 +,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x4C,0x6F,0x77 +,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x4C,0x6F +,0x77,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72 +,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x43,0x6C,0x6F,0x73,0x65,0x3C +,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x43,0x6C,0x6F +,0x73,0x65,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69 +,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09 +,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x70,0x74 +,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50,0x65,0x72,0x69,0x6F +,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44 +,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66 +,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69 +,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x49,0x6E,0x74 +,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x52,0x61,0x6E +,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x32,0x3C +,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E +,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53,0x74,0x61,0x72 +,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x53 +,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65 +,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74 +,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F +,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x44,0x65 +,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x31,0x34,0x3C,0x2F,0x44,0x65,0x66,0x61,0x75 +,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E +,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C +,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D +,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C +,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C +,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C +,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69 +,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x09,0x3C,0x21,0x2D,0x2D,0x20 +,0x57,0x4D,0x41,0x20,0x2D,0x2D,0x3E,0x0A,0x09,0x3C,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46 +,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61 +,0x74,0x69,0x6F,0x6E,0x3E,0x57,0x4D,0x41,0x3C,0x2F,0x41,0x62,0x62,0x72,0x65,0x76,0x69,0x61,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65 +,0x3E,0x57,0x6D,0x61,0x3C,0x2F,0x43,0x61,0x6D,0x65,0x6C,0x43,0x61,0x73,0x65,0x4E,0x61,0x6D,0x65,0x3E +,0x0A,0x09,0x09,0x3C,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E +,0x3E,0x57,0x65,0x69,0x67,0x68,0x74,0x65,0x64,0x20,0x4D,0x6F,0x76,0x69,0x6E,0x67,0x20,0x41,0x76,0x65 +,0x72,0x61,0x67,0x65,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69 +,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x3C,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E,0x4F,0x76,0x65,0x72,0x6C +,0x61,0x70,0x20,0x53,0x74,0x75,0x64,0x69,0x65,0x73,0x3C,0x2F,0x47,0x72,0x6F,0x75,0x70,0x49,0x64,0x3E +,0x0A,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E +,0x4F,0x76,0x65,0x72,0x6C,0x61,0x70,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x46 +,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70 +,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x52,0x65,0x71 +,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A +,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72 +,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E +,0x69,0x6E,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x52 +,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74 +,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x49,0x6E,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61 +,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09 +,0x3C,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x54,0x69,0x6D,0x65,0x20,0x50 +,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x4E,0x61,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x53,0x68 +,0x6F,0x72,0x74,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x4E,0x75,0x6D,0x62,0x65 +,0x72,0x20,0x6F,0x66,0x20,0x70,0x65,0x72,0x69,0x6F,0x64,0x3C,0x2F,0x53,0x68,0x6F,0x72,0x74,0x44,0x65 +,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65 +,0x3E,0x49,0x6E,0x74,0x65,0x67,0x65,0x72,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x3C,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x4D,0x69,0x6E,0x69,0x6D,0x75 +,0x6D,0x3E,0x32,0x3C,0x2F,0x4D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C +,0x4D,0x61,0x78,0x69,0x6D,0x75,0x6D,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x4D,0x61,0x78,0x69 +,0x6D,0x75,0x6D,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64 +,0x53,0x74,0x61,0x72,0x74,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73 +,0x74,0x65,0x64,0x53,0x74,0x61,0x72,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67,0x67 +,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x31,0x30,0x30,0x30,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x45,0x6E,0x64,0x3E,0x0A,0x09,0x09,0x09,0x09,0x09,0x3C,0x53,0x75,0x67 +,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65,0x6E,0x74,0x3E,0x31,0x30,0x30,0x30 +,0x30,0x30,0x3C,0x2F,0x53,0x75,0x67,0x67,0x65,0x73,0x74,0x65,0x64,0x49,0x6E,0x63,0x72,0x65,0x6D,0x65 +,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x2F,0x52,0x61,0x6E,0x67,0x65,0x3E,0x0A,0x09,0x09,0x09 +,0x09,0x3C,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x33,0x30,0x3C,0x2F,0x44 +,0x65,0x66,0x61,0x75,0x6C,0x74,0x56,0x61,0x6C,0x75,0x65,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x70 +,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E +,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x49,0x6E,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41,0x72 +,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x4F,0x75,0x74,0x70,0x75,0x74,0x41 +,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x54,0x79,0x70,0x65,0x3E,0x44 +,0x6F,0x75,0x62,0x6C,0x65,0x20,0x41,0x72,0x72,0x61,0x79,0x3C,0x2F,0x54,0x79,0x70,0x65,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x4E,0x61,0x6D,0x65,0x3E,0x6F,0x75,0x74,0x52,0x65,0x61,0x6C,0x3C,0x2F,0x4E,0x61 +,0x6D,0x65,0x3E,0x0A,0x09,0x09,0x09,0x09,0x3C,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x09 +,0x09,0x3C,0x46,0x6C,0x61,0x67,0x3E,0x4C,0x69,0x6E,0x65,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x3E,0x0A,0x09 +,0x09,0x09,0x09,0x3C,0x2F,0x46,0x6C,0x61,0x67,0x73,0x3E,0x0A,0x09,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x3E,0x0A,0x09,0x09,0x3C,0x2F,0x4F,0x75,0x74 +,0x70,0x75,0x74,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x3E,0x0A,0x09,0x3C,0x2F,0x46,0x69,0x6E +,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x3E,0x0A,0x0A,0x0A,0x3C,0x2F +,0x46,0x69,0x6E,0x61,0x6E,0x63,0x69,0x61,0x6C,0x46,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3E,0x0A +}; + +const char *TA_FunctionDescriptionXML() +{ + return TA_FunctionDescriptionXMLArray; +} + +/***************/ +/* End of File */ +/***************/ diff --git a/src/ta_abstract/ta_group_idx.c b/src/ta_abstract/ta_group_idx.c new file mode 100644 index 000000000..d974c6d61 --- /dev/null +++ b/src/ta_abstract/ta_group_idx.c @@ -0,0 +1,447 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Important: This file is automatically generated by gen_code. + * Any modification will be lost on next execution + * of gen_code. + * + * The goal of this file is to build the following global + * constant: + * TA_PerGroupFuncDef + * TA_PerGroupSize + * TA_TotalNbFunction + * + * These constant allows mainly to speed optimize functionality related to + * sequential access to TA_DefFunc by TA_GroupId (see ta_abstract.c) + */ +#include +#include "ta_def_ui.h" +#include "ta_abstract.h" + +extern const TA_FuncDef TA_DEF_ACOS; +extern const TA_FuncDef TA_DEF_AD; +extern const TA_FuncDef TA_DEF_ADD; +extern const TA_FuncDef TA_DEF_ADOSC; +extern const TA_FuncDef TA_DEF_ADX; +extern const TA_FuncDef TA_DEF_ADXR; +extern const TA_FuncDef TA_DEF_APO; +extern const TA_FuncDef TA_DEF_AROON; +extern const TA_FuncDef TA_DEF_AROONOSC; +extern const TA_FuncDef TA_DEF_ASIN; +extern const TA_FuncDef TA_DEF_ATAN; +extern const TA_FuncDef TA_DEF_ATR; +extern const TA_FuncDef TA_DEF_AVGPRICE; +extern const TA_FuncDef TA_DEF_BBANDS; +extern const TA_FuncDef TA_DEF_BETA; +extern const TA_FuncDef TA_DEF_BOP; +extern const TA_FuncDef TA_DEF_CCI; +extern const TA_FuncDef TA_DEF_CDL2CROWS; +extern const TA_FuncDef TA_DEF_CDL3BLACKCROWS; +extern const TA_FuncDef TA_DEF_CDL3INSIDE; +extern const TA_FuncDef TA_DEF_CDL3LINESTRIKE; +extern const TA_FuncDef TA_DEF_CDL3OUTSIDE; +extern const TA_FuncDef TA_DEF_CDL3STARSINSOUTH; +extern const TA_FuncDef TA_DEF_CDL3WHITESOLDIERS; +extern const TA_FuncDef TA_DEF_CDLABANDONEDBABY; +extern const TA_FuncDef TA_DEF_CDLADVANCEBLOCK; +extern const TA_FuncDef TA_DEF_CDLBELTHOLD; +extern const TA_FuncDef TA_DEF_CDLBREAKAWAY; +extern const TA_FuncDef TA_DEF_CDLCLOSINGMARUBOZU; +extern const TA_FuncDef TA_DEF_CDLCONCEALBABYSWALL; +extern const TA_FuncDef TA_DEF_CDLCOUNTERATTACK; +extern const TA_FuncDef TA_DEF_CDLDARKCLOUDCOVER; +extern const TA_FuncDef TA_DEF_CDLDOJI; +extern const TA_FuncDef TA_DEF_CDLDOJISTAR; +extern const TA_FuncDef TA_DEF_CDLDRAGONFLYDOJI; +extern const TA_FuncDef TA_DEF_CDLENGULFING; +extern const TA_FuncDef TA_DEF_CDLEVENINGDOJISTAR; +extern const TA_FuncDef TA_DEF_CDLEVENINGSTAR; +extern const TA_FuncDef TA_DEF_CDLGAPSIDESIDEWHITE; +extern const TA_FuncDef TA_DEF_CDLGRAVESTONEDOJI; +extern const TA_FuncDef TA_DEF_CDLHAMMER; +extern const TA_FuncDef TA_DEF_CDLHANGINGMAN; +extern const TA_FuncDef TA_DEF_CDLHARAMI; +extern const TA_FuncDef TA_DEF_CDLHARAMICROSS; +extern const TA_FuncDef TA_DEF_CDLHIGHWAVE; +extern const TA_FuncDef TA_DEF_CDLHIKKAKE; +extern const TA_FuncDef TA_DEF_CDLHIKKAKEMOD; +extern const TA_FuncDef TA_DEF_CDLHOMINGPIGEON; +extern const TA_FuncDef TA_DEF_CDLIDENTICAL3CROWS; +extern const TA_FuncDef TA_DEF_CDLINNECK; +extern const TA_FuncDef TA_DEF_CDLINVERTEDHAMMER; +extern const TA_FuncDef TA_DEF_CDLKICKING; +extern const TA_FuncDef TA_DEF_CDLKICKINGBYLENGTH; +extern const TA_FuncDef TA_DEF_CDLLADDERBOTTOM; +extern const TA_FuncDef TA_DEF_CDLLONGLEGGEDDOJI; +extern const TA_FuncDef TA_DEF_CDLLONGLINE; +extern const TA_FuncDef TA_DEF_CDLMARUBOZU; +extern const TA_FuncDef TA_DEF_CDLMATCHINGLOW; +extern const TA_FuncDef TA_DEF_CDLMATHOLD; +extern const TA_FuncDef TA_DEF_CDLMORNINGDOJISTAR; +extern const TA_FuncDef TA_DEF_CDLMORNINGSTAR; +extern const TA_FuncDef TA_DEF_CDLONNECK; +extern const TA_FuncDef TA_DEF_CDLPIERCING; +extern const TA_FuncDef TA_DEF_CDLRICKSHAWMAN; +extern const TA_FuncDef TA_DEF_CDLRISEFALL3METHODS; +extern const TA_FuncDef TA_DEF_CDLSEPARATINGLINES; +extern const TA_FuncDef TA_DEF_CDLSHOOTINGSTAR; +extern const TA_FuncDef TA_DEF_CDLSHORTLINE; +extern const TA_FuncDef TA_DEF_CDLSPINNINGTOP; +extern const TA_FuncDef TA_DEF_CDLSTALLEDPATTERN; +extern const TA_FuncDef TA_DEF_CDLSTICKSANDWICH; +extern const TA_FuncDef TA_DEF_CDLTAKURI; +extern const TA_FuncDef TA_DEF_CDLTASUKIGAP; +extern const TA_FuncDef TA_DEF_CDLTHRUSTING; +extern const TA_FuncDef TA_DEF_CDLTRISTAR; +extern const TA_FuncDef TA_DEF_CDLUNIQUE3RIVER; +extern const TA_FuncDef TA_DEF_CDLUPSIDEGAP2CROWS; +extern const TA_FuncDef TA_DEF_CDLXSIDEGAP3METHODS; +extern const TA_FuncDef TA_DEF_CEIL; +extern const TA_FuncDef TA_DEF_CMO; +extern const TA_FuncDef TA_DEF_CORREL; +extern const TA_FuncDef TA_DEF_COS; +extern const TA_FuncDef TA_DEF_COSH; +extern const TA_FuncDef TA_DEF_DEMA; +extern const TA_FuncDef TA_DEF_DIV; +extern const TA_FuncDef TA_DEF_DX; +extern const TA_FuncDef TA_DEF_EMA; +extern const TA_FuncDef TA_DEF_EXP; +extern const TA_FuncDef TA_DEF_FLOOR; +extern const TA_FuncDef TA_DEF_HT_DCPERIOD; +extern const TA_FuncDef TA_DEF_HT_DCPHASE; +extern const TA_FuncDef TA_DEF_HT_PHASOR; +extern const TA_FuncDef TA_DEF_HT_SINE; +extern const TA_FuncDef TA_DEF_HT_TRENDLINE; +extern const TA_FuncDef TA_DEF_HT_TRENDMODE; +extern const TA_FuncDef TA_DEF_KAMA; +extern const TA_FuncDef TA_DEF_LINEARREG; +extern const TA_FuncDef TA_DEF_LINEARREG_ANGLE; +extern const TA_FuncDef TA_DEF_LINEARREG_INTERCEPT; +extern const TA_FuncDef TA_DEF_LINEARREG_SLOPE; +extern const TA_FuncDef TA_DEF_LN; +extern const TA_FuncDef TA_DEF_LOG10; +extern const TA_FuncDef TA_DEF_MA; +extern const TA_FuncDef TA_DEF_MACD; +extern const TA_FuncDef TA_DEF_MACDEXT; +extern const TA_FuncDef TA_DEF_MACDFIX; +extern const TA_FuncDef TA_DEF_MAMA; +extern const TA_FuncDef TA_DEF_MAVP; +extern const TA_FuncDef TA_DEF_MAX; +extern const TA_FuncDef TA_DEF_MAXINDEX; +extern const TA_FuncDef TA_DEF_MEDPRICE; +extern const TA_FuncDef TA_DEF_MFI; +extern const TA_FuncDef TA_DEF_MIDPOINT; +extern const TA_FuncDef TA_DEF_MIDPRICE; +extern const TA_FuncDef TA_DEF_MIN; +extern const TA_FuncDef TA_DEF_MININDEX; +extern const TA_FuncDef TA_DEF_MINMAX; +extern const TA_FuncDef TA_DEF_MINMAXINDEX; +extern const TA_FuncDef TA_DEF_MINUS_DI; +extern const TA_FuncDef TA_DEF_MINUS_DM; +extern const TA_FuncDef TA_DEF_MOM; +extern const TA_FuncDef TA_DEF_MULT; +extern const TA_FuncDef TA_DEF_NATR; +extern const TA_FuncDef TA_DEF_OBV; +extern const TA_FuncDef TA_DEF_PLUS_DI; +extern const TA_FuncDef TA_DEF_PLUS_DM; +extern const TA_FuncDef TA_DEF_PPO; +extern const TA_FuncDef TA_DEF_ROC; +extern const TA_FuncDef TA_DEF_ROCP; +extern const TA_FuncDef TA_DEF_ROCR; +extern const TA_FuncDef TA_DEF_ROCR100; +extern const TA_FuncDef TA_DEF_RSI; +extern const TA_FuncDef TA_DEF_SAR; +extern const TA_FuncDef TA_DEF_SAREXT; +extern const TA_FuncDef TA_DEF_SIN; +extern const TA_FuncDef TA_DEF_SINH; +extern const TA_FuncDef TA_DEF_SMA; +extern const TA_FuncDef TA_DEF_SQRT; +extern const TA_FuncDef TA_DEF_STDDEV; +extern const TA_FuncDef TA_DEF_STOCH; +extern const TA_FuncDef TA_DEF_STOCHF; +extern const TA_FuncDef TA_DEF_STOCHRSI; +extern const TA_FuncDef TA_DEF_SUB; +extern const TA_FuncDef TA_DEF_SUM; +extern const TA_FuncDef TA_DEF_T3; +extern const TA_FuncDef TA_DEF_TAN; +extern const TA_FuncDef TA_DEF_TANH; +extern const TA_FuncDef TA_DEF_TEMA; +extern const TA_FuncDef TA_DEF_TRANGE; +extern const TA_FuncDef TA_DEF_TRIMA; +extern const TA_FuncDef TA_DEF_TRIX; +extern const TA_FuncDef TA_DEF_TSF; +extern const TA_FuncDef TA_DEF_TYPPRICE; +extern const TA_FuncDef TA_DEF_ULTOSC; +extern const TA_FuncDef TA_DEF_VAR; +extern const TA_FuncDef TA_DEF_WCLPRICE; +extern const TA_FuncDef TA_DEF_WILLR; +extern const TA_FuncDef TA_DEF_WMA; + +const TA_FuncDef *TA_PerGroupFunc_0[] = { +&TA_DEF_ADD, +&TA_DEF_DIV, +&TA_DEF_MAX, +&TA_DEF_MAXINDEX, +&TA_DEF_MIN, +&TA_DEF_MININDEX, +&TA_DEF_MINMAX, +&TA_DEF_MINMAXINDEX, +&TA_DEF_MULT, +&TA_DEF_SUB, +&TA_DEF_SUM, +NULL }; +#define SIZE_GROUP_0 ((sizeof(TA_PerGroupFunc_0)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_1[] = { +&TA_DEF_ACOS, +&TA_DEF_ASIN, +&TA_DEF_ATAN, +&TA_DEF_CEIL, +&TA_DEF_COS, +&TA_DEF_COSH, +&TA_DEF_EXP, +&TA_DEF_FLOOR, +&TA_DEF_LN, +&TA_DEF_LOG10, +&TA_DEF_SIN, +&TA_DEF_SINH, +&TA_DEF_SQRT, +&TA_DEF_TAN, +&TA_DEF_TANH, +NULL }; +#define SIZE_GROUP_1 ((sizeof(TA_PerGroupFunc_1)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_2[] = { +&TA_DEF_BBANDS, +&TA_DEF_DEMA, +&TA_DEF_EMA, +&TA_DEF_HT_TRENDLINE, +&TA_DEF_KAMA, +&TA_DEF_MA, +&TA_DEF_MAMA, +&TA_DEF_MAVP, +&TA_DEF_MIDPOINT, +&TA_DEF_MIDPRICE, +&TA_DEF_SAR, +&TA_DEF_SAREXT, +&TA_DEF_SMA, +&TA_DEF_T3, +&TA_DEF_TEMA, +&TA_DEF_TRIMA, +&TA_DEF_WMA, +NULL }; +#define SIZE_GROUP_2 ((sizeof(TA_PerGroupFunc_2)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_3[] = { +&TA_DEF_ATR, +&TA_DEF_NATR, +&TA_DEF_TRANGE, +NULL }; +#define SIZE_GROUP_3 ((sizeof(TA_PerGroupFunc_3)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_4[] = { +&TA_DEF_ADX, +&TA_DEF_ADXR, +&TA_DEF_APO, +&TA_DEF_AROON, +&TA_DEF_AROONOSC, +&TA_DEF_BOP, +&TA_DEF_CCI, +&TA_DEF_CMO, +&TA_DEF_DX, +&TA_DEF_MACD, +&TA_DEF_MACDEXT, +&TA_DEF_MACDFIX, +&TA_DEF_MFI, +&TA_DEF_MINUS_DI, +&TA_DEF_MINUS_DM, +&TA_DEF_MOM, +&TA_DEF_PLUS_DI, +&TA_DEF_PLUS_DM, +&TA_DEF_PPO, +&TA_DEF_ROC, +&TA_DEF_ROCP, +&TA_DEF_ROCR, +&TA_DEF_ROCR100, +&TA_DEF_RSI, +&TA_DEF_STOCH, +&TA_DEF_STOCHF, +&TA_DEF_STOCHRSI, +&TA_DEF_TRIX, +&TA_DEF_ULTOSC, +&TA_DEF_WILLR, +NULL }; +#define SIZE_GROUP_4 ((sizeof(TA_PerGroupFunc_4)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_5[] = { +&TA_DEF_HT_DCPERIOD, +&TA_DEF_HT_DCPHASE, +&TA_DEF_HT_PHASOR, +&TA_DEF_HT_SINE, +&TA_DEF_HT_TRENDMODE, +NULL }; +#define SIZE_GROUP_5 ((sizeof(TA_PerGroupFunc_5)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_6[] = { +&TA_DEF_AD, +&TA_DEF_ADOSC, +&TA_DEF_OBV, +NULL }; +#define SIZE_GROUP_6 ((sizeof(TA_PerGroupFunc_6)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_7[] = { +&TA_DEF_CDL2CROWS, +&TA_DEF_CDL3BLACKCROWS, +&TA_DEF_CDL3INSIDE, +&TA_DEF_CDL3LINESTRIKE, +&TA_DEF_CDL3OUTSIDE, +&TA_DEF_CDL3STARSINSOUTH, +&TA_DEF_CDL3WHITESOLDIERS, +&TA_DEF_CDLABANDONEDBABY, +&TA_DEF_CDLADVANCEBLOCK, +&TA_DEF_CDLBELTHOLD, +&TA_DEF_CDLBREAKAWAY, +&TA_DEF_CDLCLOSINGMARUBOZU, +&TA_DEF_CDLCONCEALBABYSWALL, +&TA_DEF_CDLCOUNTERATTACK, +&TA_DEF_CDLDARKCLOUDCOVER, +&TA_DEF_CDLDOJI, +&TA_DEF_CDLDOJISTAR, +&TA_DEF_CDLDRAGONFLYDOJI, +&TA_DEF_CDLENGULFING, +&TA_DEF_CDLEVENINGDOJISTAR, +&TA_DEF_CDLEVENINGSTAR, +&TA_DEF_CDLGAPSIDESIDEWHITE, +&TA_DEF_CDLGRAVESTONEDOJI, +&TA_DEF_CDLHAMMER, +&TA_DEF_CDLHANGINGMAN, +&TA_DEF_CDLHARAMI, +&TA_DEF_CDLHARAMICROSS, +&TA_DEF_CDLHIGHWAVE, +&TA_DEF_CDLHIKKAKE, +&TA_DEF_CDLHIKKAKEMOD, +&TA_DEF_CDLHOMINGPIGEON, +&TA_DEF_CDLIDENTICAL3CROWS, +&TA_DEF_CDLINNECK, +&TA_DEF_CDLINVERTEDHAMMER, +&TA_DEF_CDLKICKING, +&TA_DEF_CDLKICKINGBYLENGTH, +&TA_DEF_CDLLADDERBOTTOM, +&TA_DEF_CDLLONGLEGGEDDOJI, +&TA_DEF_CDLLONGLINE, +&TA_DEF_CDLMARUBOZU, +&TA_DEF_CDLMATCHINGLOW, +&TA_DEF_CDLMATHOLD, +&TA_DEF_CDLMORNINGDOJISTAR, +&TA_DEF_CDLMORNINGSTAR, +&TA_DEF_CDLONNECK, +&TA_DEF_CDLPIERCING, +&TA_DEF_CDLRICKSHAWMAN, +&TA_DEF_CDLRISEFALL3METHODS, +&TA_DEF_CDLSEPARATINGLINES, +&TA_DEF_CDLSHOOTINGSTAR, +&TA_DEF_CDLSHORTLINE, +&TA_DEF_CDLSPINNINGTOP, +&TA_DEF_CDLSTALLEDPATTERN, +&TA_DEF_CDLSTICKSANDWICH, +&TA_DEF_CDLTAKURI, +&TA_DEF_CDLTASUKIGAP, +&TA_DEF_CDLTHRUSTING, +&TA_DEF_CDLTRISTAR, +&TA_DEF_CDLUNIQUE3RIVER, +&TA_DEF_CDLUPSIDEGAP2CROWS, +&TA_DEF_CDLXSIDEGAP3METHODS, +NULL }; +#define SIZE_GROUP_7 ((sizeof(TA_PerGroupFunc_7)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_8[] = { +&TA_DEF_BETA, +&TA_DEF_CORREL, +&TA_DEF_LINEARREG, +&TA_DEF_LINEARREG_ANGLE, +&TA_DEF_LINEARREG_INTERCEPT, +&TA_DEF_LINEARREG_SLOPE, +&TA_DEF_STDDEV, +&TA_DEF_TSF, +&TA_DEF_VAR, +NULL }; +#define SIZE_GROUP_8 ((sizeof(TA_PerGroupFunc_8)/sizeof(const TA_FuncDef *))-1) + +const TA_FuncDef *TA_PerGroupFunc_9[] = { +&TA_DEF_AVGPRICE, +&TA_DEF_MEDPRICE, +&TA_DEF_TYPPRICE, +&TA_DEF_WCLPRICE, +NULL }; +#define SIZE_GROUP_9 ((sizeof(TA_PerGroupFunc_9)/sizeof(const TA_FuncDef *))-1) +/* Generated */ const TA_FuncDef **TA_PerGroupFuncDef[10] = { +&TA_PerGroupFunc_0[0], +&TA_PerGroupFunc_1[0], +&TA_PerGroupFunc_2[0], +&TA_PerGroupFunc_3[0], +&TA_PerGroupFunc_4[0], +&TA_PerGroupFunc_5[0], +&TA_PerGroupFunc_6[0], +&TA_PerGroupFunc_7[0], +&TA_PerGroupFunc_8[0], +&TA_PerGroupFunc_9[0] +/* Generated */ }; + +/* Generated */ const unsigned int TA_PerGroupSize[10] = { +SIZE_GROUP_0, +SIZE_GROUP_1, +SIZE_GROUP_2, +SIZE_GROUP_3, +SIZE_GROUP_4, +SIZE_GROUP_5, +SIZE_GROUP_6, +SIZE_GROUP_7, +SIZE_GROUP_8, +SIZE_GROUP_9 +/* Generated */ }; + +/* Generated */ const unsigned int TA_TotalNbFunction = +SIZE_GROUP_0+ +SIZE_GROUP_1+ +SIZE_GROUP_2+ +SIZE_GROUP_3+ +SIZE_GROUP_4+ +SIZE_GROUP_5+ +SIZE_GROUP_6+ +SIZE_GROUP_7+ +SIZE_GROUP_8+ +SIZE_GROUP_9; + +/***************/ +/* End of File */ +/***************/ diff --git a/src/ta_abstract/ta_java_defs.h b/src/ta_abstract/ta_java_defs.h new file mode 100644 index 000000000..489a20b76 --- /dev/null +++ b/src/ta_abstract/ta_java_defs.h @@ -0,0 +1,360 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* DO NOT MODIFY this file. + * This file is automatically generated by gen_code. + * + * If you are not re-generating the java code (which is most + * likely the case), just ignore this file. + */ + +#define TA_ACOS_Lookback acosLookback +#define TA_ACOS acos +#define TA_AD_Lookback adLookback +#define TA_AD ad +#define TA_ADD_Lookback addLookback +#define TA_ADD add +#define TA_ADOSC_Lookback adOscLookback +#define TA_ADOSC adOsc +#define TA_ADX_Lookback adxLookback +#define TA_ADX adx +#define TA_ADXR_Lookback adxrLookback +#define TA_ADXR adxr +#define TA_APO_Lookback apoLookback +#define TA_APO apo +#define TA_AROON_Lookback aroonLookback +#define TA_AROON aroon +#define TA_AROONOSC_Lookback aroonOscLookback +#define TA_AROONOSC aroonOsc +#define TA_ASIN_Lookback asinLookback +#define TA_ASIN asin +#define TA_ATAN_Lookback atanLookback +#define TA_ATAN atan +#define TA_ATR_Lookback atrLookback +#define TA_ATR atr +#define TA_AVGPRICE_Lookback avgPriceLookback +#define TA_AVGPRICE avgPrice +#define TA_BBANDS_Lookback bbandsLookback +#define TA_BBANDS bbands +#define TA_BETA_Lookback betaLookback +#define TA_BETA beta +#define TA_BOP_Lookback bopLookback +#define TA_BOP bop +#define TA_CCI_Lookback cciLookback +#define TA_CCI cci +#define TA_CDL2CROWS_Lookback cdl2CrowsLookback +#define TA_CDL2CROWS cdl2Crows +#define TA_CDL3BLACKCROWS_Lookback cdl3BlackCrowsLookback +#define TA_CDL3BLACKCROWS cdl3BlackCrows +#define TA_CDL3INSIDE_Lookback cdl3InsideLookback +#define TA_CDL3INSIDE cdl3Inside +#define TA_CDL3LINESTRIKE_Lookback cdl3LineStrikeLookback +#define TA_CDL3LINESTRIKE cdl3LineStrike +#define TA_CDL3OUTSIDE_Lookback cdl3OutsideLookback +#define TA_CDL3OUTSIDE cdl3Outside +#define TA_CDL3STARSINSOUTH_Lookback cdl3StarsInSouthLookback +#define TA_CDL3STARSINSOUTH cdl3StarsInSouth +#define TA_CDL3WHITESOLDIERS_Lookback cdl3WhiteSoldiersLookback +#define TA_CDL3WHITESOLDIERS cdl3WhiteSoldiers +#define TA_CDLABANDONEDBABY_Lookback cdlAbandonedBabyLookback +#define TA_CDLABANDONEDBABY cdlAbandonedBaby +#define TA_CDLADVANCEBLOCK_Lookback cdlAdvanceBlockLookback +#define TA_CDLADVANCEBLOCK cdlAdvanceBlock +#define TA_CDLBELTHOLD_Lookback cdlBeltHoldLookback +#define TA_CDLBELTHOLD cdlBeltHold +#define TA_CDLBREAKAWAY_Lookback cdlBreakawayLookback +#define TA_CDLBREAKAWAY cdlBreakaway +#define TA_CDLCLOSINGMARUBOZU_Lookback cdlClosingMarubozuLookback +#define TA_CDLCLOSINGMARUBOZU cdlClosingMarubozu +#define TA_CDLCONCEALBABYSWALL_Lookback cdlConcealBabysWallLookback +#define TA_CDLCONCEALBABYSWALL cdlConcealBabysWall +#define TA_CDLCOUNTERATTACK_Lookback cdlCounterAttackLookback +#define TA_CDLCOUNTERATTACK cdlCounterAttack +#define TA_CDLDARKCLOUDCOVER_Lookback cdlDarkCloudCoverLookback +#define TA_CDLDARKCLOUDCOVER cdlDarkCloudCover +#define TA_CDLDOJI_Lookback cdlDojiLookback +#define TA_CDLDOJI cdlDoji +#define TA_CDLDOJISTAR_Lookback cdlDojiStarLookback +#define TA_CDLDOJISTAR cdlDojiStar +#define TA_CDLDRAGONFLYDOJI_Lookback cdlDragonflyDojiLookback +#define TA_CDLDRAGONFLYDOJI cdlDragonflyDoji +#define TA_CDLENGULFING_Lookback cdlEngulfingLookback +#define TA_CDLENGULFING cdlEngulfing +#define TA_CDLEVENINGDOJISTAR_Lookback cdlEveningDojiStarLookback +#define TA_CDLEVENINGDOJISTAR cdlEveningDojiStar +#define TA_CDLEVENINGSTAR_Lookback cdlEveningStarLookback +#define TA_CDLEVENINGSTAR cdlEveningStar +#define TA_CDLGAPSIDESIDEWHITE_Lookback cdlGapSideSideWhiteLookback +#define TA_CDLGAPSIDESIDEWHITE cdlGapSideSideWhite +#define TA_CDLGRAVESTONEDOJI_Lookback cdlGravestoneDojiLookback +#define TA_CDLGRAVESTONEDOJI cdlGravestoneDoji +#define TA_CDLHAMMER_Lookback cdlHammerLookback +#define TA_CDLHAMMER cdlHammer +#define TA_CDLHANGINGMAN_Lookback cdlHangingManLookback +#define TA_CDLHANGINGMAN cdlHangingMan +#define TA_CDLHARAMI_Lookback cdlHaramiLookback +#define TA_CDLHARAMI cdlHarami +#define TA_CDLHARAMICROSS_Lookback cdlHaramiCrossLookback +#define TA_CDLHARAMICROSS cdlHaramiCross +#define TA_CDLHIGHWAVE_Lookback cdlHignWaveLookback +#define TA_CDLHIGHWAVE cdlHignWave +#define TA_CDLHIKKAKE_Lookback cdlHikkakeLookback +#define TA_CDLHIKKAKE cdlHikkake +#define TA_CDLHIKKAKEMOD_Lookback cdlHikkakeModLookback +#define TA_CDLHIKKAKEMOD cdlHikkakeMod +#define TA_CDLHOMINGPIGEON_Lookback cdlHomingPigeonLookback +#define TA_CDLHOMINGPIGEON cdlHomingPigeon +#define TA_CDLIDENTICAL3CROWS_Lookback cdlIdentical3CrowsLookback +#define TA_CDLIDENTICAL3CROWS cdlIdentical3Crows +#define TA_CDLINNECK_Lookback cdlInNeckLookback +#define TA_CDLINNECK cdlInNeck +#define TA_CDLINVERTEDHAMMER_Lookback cdlInvertedHammerLookback +#define TA_CDLINVERTEDHAMMER cdlInvertedHammer +#define TA_CDLKICKING_Lookback cdlKickingLookback +#define TA_CDLKICKING cdlKicking +#define TA_CDLKICKINGBYLENGTH_Lookback cdlKickingByLengthLookback +#define TA_CDLKICKINGBYLENGTH cdlKickingByLength +#define TA_CDLLADDERBOTTOM_Lookback cdlLadderBottomLookback +#define TA_CDLLADDERBOTTOM cdlLadderBottom +#define TA_CDLLONGLEGGEDDOJI_Lookback cdlLongLeggedDojiLookback +#define TA_CDLLONGLEGGEDDOJI cdlLongLeggedDoji +#define TA_CDLLONGLINE_Lookback cdlLongLineLookback +#define TA_CDLLONGLINE cdlLongLine +#define TA_CDLMARUBOZU_Lookback cdlMarubozuLookback +#define TA_CDLMARUBOZU cdlMarubozu +#define TA_CDLMATCHINGLOW_Lookback cdlMatchingLowLookback +#define TA_CDLMATCHINGLOW cdlMatchingLow +#define TA_CDLMATHOLD_Lookback cdlMatHoldLookback +#define TA_CDLMATHOLD cdlMatHold +#define TA_CDLMORNINGDOJISTAR_Lookback cdlMorningDojiStarLookback +#define TA_CDLMORNINGDOJISTAR cdlMorningDojiStar +#define TA_CDLMORNINGSTAR_Lookback cdlMorningStarLookback +#define TA_CDLMORNINGSTAR cdlMorningStar +#define TA_CDLONNECK_Lookback cdlOnNeckLookback +#define TA_CDLONNECK cdlOnNeck +#define TA_CDLPIERCING_Lookback cdlPiercingLookback +#define TA_CDLPIERCING cdlPiercing +#define TA_CDLRICKSHAWMAN_Lookback cdlRickshawManLookback +#define TA_CDLRICKSHAWMAN cdlRickshawMan +#define TA_CDLRISEFALL3METHODS_Lookback cdlRiseFall3MethodsLookback +#define TA_CDLRISEFALL3METHODS cdlRiseFall3Methods +#define TA_CDLSEPARATINGLINES_Lookback cdlSeperatingLinesLookback +#define TA_CDLSEPARATINGLINES cdlSeperatingLines +#define TA_CDLSHOOTINGSTAR_Lookback cdlShootingStarLookback +#define TA_CDLSHOOTINGSTAR cdlShootingStar +#define TA_CDLSHORTLINE_Lookback cdlShortLineLookback +#define TA_CDLSHORTLINE cdlShortLine +#define TA_CDLSPINNINGTOP_Lookback cdlSpinningTopLookback +#define TA_CDLSPINNINGTOP cdlSpinningTop +#define TA_CDLSTALLEDPATTERN_Lookback cdlStalledPatternLookback +#define TA_CDLSTALLEDPATTERN cdlStalledPattern +#define TA_CDLSTICKSANDWICH_Lookback cdlStickSandwhichLookback +#define TA_CDLSTICKSANDWICH cdlStickSandwhich +#define TA_CDLTAKURI_Lookback cdlTakuriLookback +#define TA_CDLTAKURI cdlTakuri +#define TA_CDLTASUKIGAP_Lookback cdlTasukiGapLookback +#define TA_CDLTASUKIGAP cdlTasukiGap +#define TA_CDLTHRUSTING_Lookback cdlThrustingLookback +#define TA_CDLTHRUSTING cdlThrusting +#define TA_CDLTRISTAR_Lookback cdlTristarLookback +#define TA_CDLTRISTAR cdlTristar +#define TA_CDLUNIQUE3RIVER_Lookback cdlUnique3RiverLookback +#define TA_CDLUNIQUE3RIVER cdlUnique3River +#define TA_CDLUPSIDEGAP2CROWS_Lookback cdlUpsideGap2CrowsLookback +#define TA_CDLUPSIDEGAP2CROWS cdlUpsideGap2Crows +#define TA_CDLXSIDEGAP3METHODS_Lookback cdlXSideGap3MethodsLookback +#define TA_CDLXSIDEGAP3METHODS cdlXSideGap3Methods +#define TA_CEIL_Lookback ceilLookback +#define TA_CEIL ceil +#define TA_CMO_Lookback cmoLookback +#define TA_CMO cmo +#define TA_CORREL_Lookback correlLookback +#define TA_CORREL correl +#define TA_COS_Lookback cosLookback +#define TA_COS cos +#define TA_COSH_Lookback coshLookback +#define TA_COSH cosh +#define TA_DEMA_Lookback demaLookback +#define TA_DEMA dema +#define TA_DIV_Lookback divLookback +#define TA_DIV div +#define TA_DX_Lookback dxLookback +#define TA_DX dx +#define TA_EMA_Lookback emaLookback +#define TA_EMA ema +#define TA_EXP_Lookback expLookback +#define TA_EXP exp +#define TA_FLOOR_Lookback floorLookback +#define TA_FLOOR floor +#define TA_HT_DCPERIOD_Lookback htDcPeriodLookback +#define TA_HT_DCPERIOD htDcPeriod +#define TA_HT_DCPHASE_Lookback htDcPhaseLookback +#define TA_HT_DCPHASE htDcPhase +#define TA_HT_PHASOR_Lookback htPhasorLookback +#define TA_HT_PHASOR htPhasor +#define TA_HT_SINE_Lookback htSineLookback +#define TA_HT_SINE htSine +#define TA_HT_TRENDLINE_Lookback htTrendlineLookback +#define TA_HT_TRENDLINE htTrendline +#define TA_HT_TRENDMODE_Lookback htTrendModeLookback +#define TA_HT_TRENDMODE htTrendMode +#define TA_KAMA_Lookback kamaLookback +#define TA_KAMA kama +#define TA_LINEARREG_Lookback linearRegLookback +#define TA_LINEARREG linearReg +#define TA_LINEARREG_ANGLE_Lookback linearRegAngleLookback +#define TA_LINEARREG_ANGLE linearRegAngle +#define TA_LINEARREG_INTERCEPT_Lookback linearRegInterceptLookback +#define TA_LINEARREG_INTERCEPT linearRegIntercept +#define TA_LINEARREG_SLOPE_Lookback linearRegSlopeLookback +#define TA_LINEARREG_SLOPE linearRegSlope +#define TA_LN_Lookback lnLookback +#define TA_LN ln +#define TA_LOG10_Lookback log10Lookback +#define TA_LOG10 log10 +#define TA_MA_Lookback movingAverageLookback +#define TA_MA movingAverage +#define TA_MACD_Lookback macdLookback +#define TA_MACD macd +#define TA_MACDEXT_Lookback macdExtLookback +#define TA_MACDEXT macdExt +#define TA_MACDFIX_Lookback macdFixLookback +#define TA_MACDFIX macdFix +#define TA_MAMA_Lookback mamaLookback +#define TA_MAMA mama +#define TA_MAVP_Lookback movingAverageVariablePeriodLookback +#define TA_MAVP movingAverageVariablePeriod +#define TA_MAX_Lookback maxLookback +#define TA_MAX max +#define TA_MAXINDEX_Lookback maxIndexLookback +#define TA_MAXINDEX maxIndex +#define TA_MEDPRICE_Lookback medPriceLookback +#define TA_MEDPRICE medPrice +#define TA_MFI_Lookback mfiLookback +#define TA_MFI mfi +#define TA_MIDPOINT_Lookback midPointLookback +#define TA_MIDPOINT midPoint +#define TA_MIDPRICE_Lookback midPriceLookback +#define TA_MIDPRICE midPrice +#define TA_MIN_Lookback minLookback +#define TA_MIN min +#define TA_MININDEX_Lookback minIndexLookback +#define TA_MININDEX minIndex +#define TA_MINMAX_Lookback minMaxLookback +#define TA_MINMAX minMax +#define TA_MINMAXINDEX_Lookback minMaxIndexLookback +#define TA_MINMAXINDEX minMaxIndex +#define TA_MINUS_DI_Lookback minusDILookback +#define TA_MINUS_DI minusDI +#define TA_MINUS_DM_Lookback minusDMLookback +#define TA_MINUS_DM minusDM +#define TA_MOM_Lookback momLookback +#define TA_MOM mom +#define TA_MULT_Lookback multLookback +#define TA_MULT mult +#define TA_NATR_Lookback natrLookback +#define TA_NATR natr +#define TA_OBV_Lookback obvLookback +#define TA_OBV obv +#define TA_PLUS_DI_Lookback plusDILookback +#define TA_PLUS_DI plusDI +#define TA_PLUS_DM_Lookback plusDMLookback +#define TA_PLUS_DM plusDM +#define TA_PPO_Lookback ppoLookback +#define TA_PPO ppo +#define TA_ROC_Lookback rocLookback +#define TA_ROC roc +#define TA_ROCP_Lookback rocPLookback +#define TA_ROCP rocP +#define TA_ROCR_Lookback rocRLookback +#define TA_ROCR rocR +#define TA_ROCR100_Lookback rocR100Lookback +#define TA_ROCR100 rocR100 +#define TA_RSI_Lookback rsiLookback +#define TA_RSI rsi +#define TA_SAR_Lookback sarLookback +#define TA_SAR sar +#define TA_SAREXT_Lookback sarExtLookback +#define TA_SAREXT sarExt +#define TA_SIN_Lookback sinLookback +#define TA_SIN sin +#define TA_SINH_Lookback sinhLookback +#define TA_SINH sinh +#define TA_SMA_Lookback smaLookback +#define TA_SMA sma +#define TA_SQRT_Lookback sqrtLookback +#define TA_SQRT sqrt +#define TA_STDDEV_Lookback stdDevLookback +#define TA_STDDEV stdDev +#define TA_STOCH_Lookback stochLookback +#define TA_STOCH stoch +#define TA_STOCHF_Lookback stochFLookback +#define TA_STOCHF stochF +#define TA_STOCHRSI_Lookback stochRsiLookback +#define TA_STOCHRSI stochRsi +#define TA_SUB_Lookback subLookback +#define TA_SUB sub +#define TA_SUM_Lookback sumLookback +#define TA_SUM sum +#define TA_T3_Lookback t3Lookback +#define TA_T3 t3 +#define TA_TAN_Lookback tanLookback +#define TA_TAN tan +#define TA_TANH_Lookback tanhLookback +#define TA_TANH tanh +#define TA_TEMA_Lookback temaLookback +#define TA_TEMA tema +#define TA_TRANGE_Lookback trueRangeLookback +#define TA_TRANGE trueRange +#define TA_TRIMA_Lookback trimaLookback +#define TA_TRIMA trima +#define TA_TRIX_Lookback trixLookback +#define TA_TRIX trix +#define TA_TSF_Lookback tsfLookback +#define TA_TSF tsf +#define TA_TYPPRICE_Lookback typPriceLookback +#define TA_TYPPRICE typPrice +#define TA_ULTOSC_Lookback ultOscLookback +#define TA_ULTOSC ultOsc +#define TA_VAR_Lookback varianceLookback +#define TA_VAR variance +#define TA_WCLPRICE_Lookback wclPriceLookback +#define TA_WCLPRICE wclPrice +#define TA_WILLR_Lookback willRLookback +#define TA_WILLR willR +#define TA_WMA_Lookback wmaLookback +#define TA_WMA wma + +/*************** + * End of File * + ***************/ diff --git a/src/ta_abstract/tables/table_a.c b/src/ta_abstract/tables/table_a.c new file mode 100644 index 000000000..f830a6daf --- /dev/null +++ b/src/ta_abstract/tables/table_a.c @@ -0,0 +1,373 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'A' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* ACOS BEGIN */ +DEF_MATH_UNARY_OPERATOR( ACOS, "Vector Trigonometric ACos", "Acos" ) +/* ACOS END */ + +/* AD BEGIN */ +static const TA_InputParameterInfo *TA_AD_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLCV, + NULL +}; + +static const TA_OutputParameterInfo *TA_AD_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_AD_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( AD, /* name */ + TA_GroupId_VolumeIndicators, /* groupId */ + "Chaikin A/D Line", /* hint */ + "Ad", /* CamelCase name */ + 0 /* flags */ + ); +/* AD END */ + +/* ADD BEGIN */ +DEF_MATH_BINARY_OPERATOR( ADD, "Vector Arithmetic Add", "Add" ) +/* ADD END */ + +/* ADOSC BEGIN */ +static const TA_OptInputParameterInfo TA_DEF_UI_FastADOSC_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInFastPeriod", /* paramName */ + 0, /* flags */ + + "Fast Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 3, /* defaultValue */ + "Number of period for the fast MA", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_SlowADOSC_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInSlowPeriod", /* paramName */ + 0, /* flags */ + + "Slow Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive_Minimum2, /* dataSet */ + 10, /* defaultValue */ + "Number of period for the slow MA", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_InputParameterInfo *TA_ADOSC_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLCV, + NULL +}; + +static const TA_OutputParameterInfo *TA_ADOSC_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ADOSC_OptInputs[] = +{ + &TA_DEF_UI_FastADOSC_Period, + &TA_DEF_UI_SlowADOSC_Period, + NULL +}; + +DEF_FUNCTION( ADOSC, /* name */ + TA_GroupId_VolumeIndicators, /* groupId */ + "Chaikin A/D Oscillator", /* hint */ + "AdOsc", /* CamelCase name */ + 0 /* flags */ + ); +/* ADOSC END */ + +/* ADX BEGIN */ +static const TA_InputParameterInfo *TA_ADX_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_ADX_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ADX_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( ADX, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Average Directional Movement Index", /* hint */ + "Adx", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* ADX END */ + +/* ADXR BEGIN */ +static const TA_InputParameterInfo *TA_ADXR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_ADXR_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ADXR_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( ADXR, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Average Directional Movement Index Rating", /* hint */ + "Adxr", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* ADXR END */ + +/* APO BEGIN */ +static const TA_InputParameterInfo *TA_APO_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_APO_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_APO_OptInputs[] = +{ &TA_DEF_UI_Fast_Period, + &TA_DEF_UI_Slow_Period, + &TA_DEF_UI_MA_Method, + NULL +}; + +DEF_FUNCTION( APO, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Absolute Price Oscillator", /* hint */ + "Apo", /* CamelCase name */ + 0 /* flags */ + ); +/* APO END */ + +/* AROON BEGIN */ +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_AroonUp = + { TA_Output_Real, "outAroonDown", TA_OUT_DASH_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_AroonDown = + { TA_Output_Real, "outAroonUp", TA_OUT_LINE }; + +static const TA_InputParameterInfo *TA_AROON_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HL, + NULL +}; + +static const TA_OutputParameterInfo *TA_AROON_Outputs[] = +{ + &TA_DEF_UI_Output_Real_AroonUp, + &TA_DEF_UI_Output_Real_AroonDown, + NULL +}; + +static const TA_OptInputParameterInfo *TA_AROON_OptInputs[] = +{ + &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( AROON, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Aroon", /* hint */ + "Aroon", /* CamelCase name */ + 0 /* flags */ + ); + +/* AROON END */ + +/* AROONOSC BEGIN */ +static const TA_InputParameterInfo *TA_AROONOSC_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HL, + NULL +}; + +static const TA_OutputParameterInfo *TA_AROONOSC_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_AROONOSC_OptInputs[] = +{ + &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( AROONOSC, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Aroon Oscillator", /* hint */ + "AroonOsc", /* CamelCase name */ + 0 /* flags */ + ); + +/* AROONOSC END */ + +/* ASIN BEGIN */ +DEF_MATH_UNARY_OPERATOR( ASIN, "Vector Trigonometric ASin", "Asin" ) +/* ASIN END */ + +/* ATAN BEGIN */ +DEF_MATH_UNARY_OPERATOR( ATAN, "Vector Trigonometric ATan", "Atan" ) +/* ATAN END */ + +/* ATR BEGIN */ +static const TA_InputParameterInfo *TA_ATR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_ATR_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ATR_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14, + NULL +}; + +DEF_FUNCTION( ATR, /* name */ + TA_GroupId_VolatilityIndicators, /* groupId */ + "Average True Range", /* hint */ + "Atr", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* ATR END */ + +/* AVGPRICE BEGIN */ +static const TA_InputParameterInfo *TA_AVGPRICE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_AVGPRICE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_AVGPRICE_OptInputs[] = { NULL }; + +DEF_FUNCTION( AVGPRICE, /* name */ + TA_GroupId_PriceTransform, /* groupId */ + "Average Price", /* hint */ + "AvgPrice", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* AVGPRICE END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableA[] = +{ + ADD_TO_TABLE(ACOS), + ADD_TO_TABLE(AD), + ADD_TO_TABLE(ADD), + ADD_TO_TABLE(ADOSC), + ADD_TO_TABLE(ADX), + ADD_TO_TABLE(ADXR), + ADD_TO_TABLE(APO), + ADD_TO_TABLE(AROON), + ADD_TO_TABLE(AROONOSC), + ADD_TO_TABLE(ASIN), + ADD_TO_TABLE(ATAN), + ADD_TO_TABLE(ATR), + ADD_TO_TABLE(AVGPRICE), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableASize = + ((sizeof(TA_DEF_TableA)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_b.c b/src/ta_abstract/tables/table_b.c new file mode 100644 index 000000000..e944f1158 --- /dev/null +++ b/src/ta_abstract/tables/table_b.c @@ -0,0 +1,196 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'B' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* BBANDS BEGIN */ + +/* Nb Deviation up/down is used for bollinger bands. */ +const TA_OptInputParameterInfo TA_DEF_UI_NbDeviationUp = +{ + TA_OptInput_RealRange, /* type */ + "optInNbDevUp", /* paramName */ + 0, /* flags */ + + "Deviations up", /* displayName */ + (const void *)&TA_DEF_NbDeviation, /* dataSet */ + 2.0, /* defaultValue */ + "Deviation multiplier for upper band", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_NbDeviationDn = +{ + TA_OptInput_RealRange, /* type */ + "optInNbDevDn", /* paramName */ + 0, /* flags */ + + "Deviations down", /* displayName */ + (const void *)&TA_DEF_NbDeviation, /* dataSet */ + 2.0, /* defaultValue */ + "Deviation multiplier for lower band", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_BBANDS_Middle = + { TA_Output_Real, "outRealMiddleBand", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_BBANDS_Upper = + { TA_Output_Real, "outRealUpperBand", TA_OUT_UPPER_LIMIT }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_BBANDS_Lower = + { TA_Output_Real, "outRealLowerBand", TA_OUT_LOWER_LIMIT }; + +static const TA_InputParameterInfo *TA_BBANDS_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_BBANDS_Outputs[] = +{ + &TA_DEF_UI_Output_Real_BBANDS_Upper, + &TA_DEF_UI_Output_Real_BBANDS_Middle, + &TA_DEF_UI_Output_Real_BBANDS_Lower, + NULL +}; + +static const TA_OptInputParameterInfo *TA_BBANDS_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_5_MINIMUM2, + &TA_DEF_UI_NbDeviationUp, + &TA_DEF_UI_NbDeviationDn, + &TA_DEF_UI_MA_Method, + NULL +}; + +DEF_FUNCTION( BBANDS, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Bollinger Bands", /* hint */ + "Bbands", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* BBANDS END */ + + +/* BOP BEGIN */ +static const TA_InputParameterInfo *TA_BOP_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_BOP_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_BOP_OptInputs[] = { NULL }; + +DEF_FUNCTION( BOP, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Balance Of Power", /* hint */ + "Bop", /* CamelCase name */ + 0 /* flags */ + ); +/* BOP END */ + +/* BETA BEGIN */ +static const TA_InputParameterInfo *TA_BETA_Inputs[] = +{ + &TA_DEF_UI_Input_Real0, + &TA_DEF_UI_Input_Real1, + NULL +}; + +static const TA_OutputParameterInfo *TA_BETA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_BETA_OptInputs[] = +{ + &TA_DEF_UI_TimePeriod_5, + NULL +}; + +DEF_FUNCTION( BETA, /* name */ + TA_GroupId_Statistic, /* groupId */ + "Beta", /* hint */ + "Beta", /* CamelCase name */ + 0 /* flags */ + ); +/* BETA END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableB[] = +{ + ADD_TO_TABLE(BBANDS), + ADD_TO_TABLE(BETA), + ADD_TO_TABLE(BOP), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableBSize = + ((sizeof(TA_DEF_TableB)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_c.c b/src/ta_abstract/tables/table_c.c new file mode 100644 index 000000000..ba3f289e1 --- /dev/null +++ b/src/ta_abstract/tables/table_c.c @@ -0,0 +1,1885 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'C' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* CCI BEGIN */ +static const TA_InputParameterInfo *TA_CCI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CCI_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CCI_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( CCI, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Commodity Channel Index", /* hint */ + "Cci", /* CamelCase name */ + 0 /* flags */ ); + +/* CCI END */ + +/* CDL2CROWS BEGIN */ +static const TA_InputParameterInfo *TA_CDL2CROWS_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDL2CROWS_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDL2CROWS_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDL2CROWS, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Two Crows", /* hint */ + "Cdl2Crows", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDL2CROWS END */ + +/* CDL3BLACKCROWS BEGIN */ +static const TA_InputParameterInfo *TA_CDL3BLACKCROWS_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDL3BLACKCROWS_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDL3BLACKCROWS_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDL3BLACKCROWS, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Three Black Crows", /* hint */ + "Cdl3BlackCrows", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDL3BLACKCROWS END */ + +/* CDL3INSIDE BEGIN */ +static const TA_InputParameterInfo *TA_CDL3INSIDE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDL3INSIDE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDL3INSIDE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDL3INSIDE, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Three Inside Up/Down", /* hint */ + "Cdl3Inside", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDL3INSIDE END */ + +/* CDL3LINESTRIKE BEGIN */ +static const TA_InputParameterInfo *TA_CDL3LINESTRIKE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDL3LINESTRIKE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDL3LINESTRIKE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDL3LINESTRIKE, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Three-Line Strike ", /* hint */ + "Cdl3LineStrike", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDL3LINESTRIKE END */ + +/* CDL3OUTSIDE BEGIN */ +static const TA_InputParameterInfo *TA_CDL3OUTSIDE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDL3OUTSIDE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDL3OUTSIDE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDL3OUTSIDE, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Three Outside Up/Down", /* hint */ + "Cdl3Outside", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDL3OUTSIDE END */ + +/* CDL3STARSINSOUTH BEGIN */ +static const TA_InputParameterInfo *TA_CDL3STARSINSOUTH_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDL3STARSINSOUTH_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDL3STARSINSOUTH_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDL3STARSINSOUTH, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Three Stars In The South", /* hint */ + "Cdl3StarsInSouth", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDL3STARSINSOUTH END */ + +/* CDL3WHITESOLDIERS BEGIN */ +static const TA_InputParameterInfo *TA_CDL3WHITESOLDIERS_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDL3WHITESOLDIERS_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDL3WHITESOLDIERS_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDL3WHITESOLDIERS, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Three Advancing White Soldiers", /* hint */ + "Cdl3WhiteSoldiers", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDL3WHITESOLDIERS END */ + +/* CDLABANDONEDBABY BEGIN */ +static const TA_InputParameterInfo *TA_CDLABANDONEDBABY_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLABANDONEDBABY_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLABANDONEDBABY_OptInputs[] = +{ + &TA_DEF_UI_Penetration_30, + NULL +}; + +DEF_FUNCTION( CDLABANDONEDBABY, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Abandoned Baby", /* hint */ + "CdlAbandonedBaby", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLABANDONEDBABY END */ + +/* CDLADVANCEBLOCK BEGIN */ +static const TA_InputParameterInfo *TA_CDLADVANCEBLOCK_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLADVANCEBLOCK_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLADVANCEBLOCK_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLADVANCEBLOCK, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Advance Block", /* hint */ + "CdlAdvanceBlock", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLADVANCEBLOCK END */ + +/* CDLBELTHOLD BEGIN */ +static const TA_InputParameterInfo *TA_CDLBELTHOLD_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLBELTHOLD_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLBELTHOLD_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLBELTHOLD, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Belt-hold", /* hint */ + "CdlBeltHold", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLBELTHOLD END */ + +/* CDLBREAKAWAY BEGIN */ +static const TA_InputParameterInfo *TA_CDLBREAKAWAY_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLBREAKAWAY_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLBREAKAWAY_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLBREAKAWAY, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Breakaway", /* hint */ + "CdlBreakaway", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLBREAKAWAY END */ + +/* CDLCLOSINGMARUBOZU BEGIN */ +static const TA_InputParameterInfo *TA_CDLCLOSINGMARUBOZU_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLCLOSINGMARUBOZU_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLCLOSINGMARUBOZU_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLCLOSINGMARUBOZU, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Closing Marubozu", /* hint */ + "CdlClosingMarubozu", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLCLOSINGMARUBOZU END */ + +/* CDLCONCEALBABYSWALL BEGIN */ +static const TA_InputParameterInfo *TA_CDLCONCEALBABYSWALL_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLCONCEALBABYSWALL_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLCONCEALBABYSWALL_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLCONCEALBABYSWALL, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Concealing Baby Swallow", /* hint */ + "CdlConcealBabysWall", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLCONCEALBABYSWALL END */ + +/* CDLCOUNTERATTACK BEGIN */ +static const TA_InputParameterInfo *TA_CDLCOUNTERATTACK_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLCOUNTERATTACK_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLCOUNTERATTACK_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLCOUNTERATTACK, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Counterattack", /* hint */ + "CdlCounterAttack", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLCOUNTERATTACK END */ + +/* CDLDARKCLOUDCOVER BEGIN */ +static const TA_InputParameterInfo *TA_CDLDARKCLOUDCOVER_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLDARKCLOUDCOVER_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLDARKCLOUDCOVER_OptInputs[] = +{ + &TA_DEF_UI_Penetration_50, + NULL +}; + +DEF_FUNCTION( CDLDARKCLOUDCOVER, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Dark Cloud Cover", /* hint */ + "CdlDarkCloudCover", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLDARKCLOUDCOVER END */ + +/* CDLDOJI BEGIN */ +static const TA_InputParameterInfo *TA_CDLDOJI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLDOJI_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLDOJI_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLDOJI, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Doji", /* hint */ + "CdlDoji", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLDOJI END */ + +/* CDLDOJISTAR BEGIN */ +static const TA_InputParameterInfo *TA_CDLDOJISTAR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLDOJISTAR_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLDOJISTAR_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLDOJISTAR, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Doji Star", /* hint */ + "CdlDojiStar", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLDOJISTAR END */ + +/* CDLDRAGONFLYDOJI BEGIN */ +static const TA_InputParameterInfo *TA_CDLDRAGONFLYDOJI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLDRAGONFLYDOJI_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLDRAGONFLYDOJI_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLDRAGONFLYDOJI, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Dragonfly Doji", /* hint */ + "CdlDragonflyDoji", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLDRAGONFLYDOJI END */ + +/* CDLENGULFING BEGIN */ +static const TA_InputParameterInfo *TA_CDLENGULFING_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLENGULFING_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLENGULFING_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLENGULFING, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Engulfing Pattern", /* hint */ + "CdlEngulfing", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLENGULFING END */ + +/* CDLEVENINGDOJISTAR BEGIN */ +static const TA_InputParameterInfo *TA_CDLEVENINGDOJISTAR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLEVENINGDOJISTAR_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLEVENINGDOJISTAR_OptInputs[] = +{ + &TA_DEF_UI_Penetration_30, + NULL +}; + +DEF_FUNCTION( CDLEVENINGDOJISTAR, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Evening Doji Star", /* hint */ + "CdlEveningDojiStar", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLEVENINGDOJISTAR END */ + +/* CDLEVENINGSTAR BEGIN */ +static const TA_InputParameterInfo *TA_CDLEVENINGSTAR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLEVENINGSTAR_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLEVENINGSTAR_OptInputs[] = +{ + &TA_DEF_UI_Penetration_30, + NULL +}; + +DEF_FUNCTION( CDLEVENINGSTAR, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Evening Star", /* hint */ + "CdlEveningStar", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLEVENINGSTAR END */ + +/* CDLEVENINGDOJISTAR END */ + +/* CDLGAPSIDESIDEWHITE BEGIN */ +static const TA_InputParameterInfo *TA_CDLGAPSIDESIDEWHITE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLGAPSIDESIDEWHITE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLGAPSIDESIDEWHITE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLGAPSIDESIDEWHITE, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Up/Down-gap side-by-side white lines", /* hint */ + "CdlGapSideSideWhite", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLGAPSIDESIDEWHITE END */ + +/* CDLGRAVESTONEDOJI BEGIN */ +static const TA_InputParameterInfo *TA_CDLGRAVESTONEDOJI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLGRAVESTONEDOJI_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLGRAVESTONEDOJI_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLGRAVESTONEDOJI, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Gravestone Doji", /* hint */ + "CdlGravestoneDoji", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLGRAVESTONEDOJI END */ + +/* CDLHAMMER BEGIN */ +static const TA_InputParameterInfo *TA_CDLHAMMER_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLHAMMER_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLHAMMER_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLHAMMER, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Hammer", /* hint */ + "CdlHammer", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLHAMMER END */ + +/* CDLHANGINGMAN BEGIN */ +static const TA_InputParameterInfo *TA_CDLHANGINGMAN_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLHANGINGMAN_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLHANGINGMAN_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLHANGINGMAN, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Hanging Man", /* hint */ + "CdlHangingMan", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLHANGINGMAN END */ + +/* CDLHARAMI BEGIN */ +static const TA_InputParameterInfo *TA_CDLHARAMI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLHARAMI_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLHARAMI_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLHARAMI, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Harami Pattern", /* hint */ + "CdlHarami", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLHARAMI END */ + +/* CDLHARAMICROSS BEGIN */ +static const TA_InputParameterInfo *TA_CDLHARAMICROSS_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLHARAMICROSS_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLHARAMICROSS_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLHARAMICROSS, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Harami Cross Pattern", /* hint */ + "CdlHaramiCross", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLHARAMICROSS END */ + +/* CDLHIGHWAVE BEGIN */ +static const TA_InputParameterInfo *TA_CDLHIGHWAVE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLHIGHWAVE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLHIGHWAVE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLHIGHWAVE, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "High-Wave Candle", /* hint */ + "CdlHignWave", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLHIGHWAVE END */ + +/* CDLHIKKAKE BEGIN */ +static const TA_InputParameterInfo *TA_CDLHIKKAKE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLHIKKAKE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLHIKKAKE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLHIKKAKE, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Hikkake Pattern", /* hint */ + "CdlHikkake", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLHIKKAKE END */ + +/* CDLHIKKAKEMOD BEGIN */ +static const TA_InputParameterInfo *TA_CDLHIKKAKEMOD_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLHIKKAKEMOD_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLHIKKAKEMOD_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLHIKKAKEMOD, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Modified Hikkake Pattern", /* hint */ + "CdlHikkakeMod", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLHIKKAKEMOD END */ + +/* CDLHOMINGPIGEON BEGIN */ +static const TA_InputParameterInfo *TA_CDLHOMINGPIGEON_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLHOMINGPIGEON_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLHOMINGPIGEON_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLHOMINGPIGEON, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Homing Pigeon", /* hint */ + "CdlHomingPigeon", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLHOMINGPIGEON END */ + +/* CDLIDENTICAL3CROWS BEGIN */ +static const TA_InputParameterInfo *TA_CDLIDENTICAL3CROWS_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLIDENTICAL3CROWS_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLIDENTICAL3CROWS_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLIDENTICAL3CROWS, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Identical Three Crows", /* hint */ + "CdlIdentical3Crows", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLIDENTICAL3CROWS END */ + +/* CDLINNECK BEGIN */ +static const TA_InputParameterInfo *TA_CDLINNECK_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLINNECK_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLINNECK_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLINNECK, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "In-Neck Pattern", /* hint */ + "CdlInNeck", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLINNECK END */ + +/* CDLINVERTEDHAMMER BEGIN */ +static const TA_InputParameterInfo *TA_CDLINVERTEDHAMMER_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLINVERTEDHAMMER_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLINVERTEDHAMMER_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLINVERTEDHAMMER, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Inverted Hammer", /* hint */ + "CdlInvertedHammer", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLINVERTEDHAMMER END */ + +/* CDLKICKING BEGIN */ +static const TA_InputParameterInfo *TA_CDLKICKING_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLKICKING_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLKICKING_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLKICKING, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Kicking", /* hint */ + "CdlKicking", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLKICKING END */ + +/* CDLKICKINGBYLENGTH BEGIN */ +static const TA_InputParameterInfo *TA_CDLKICKINGBYLENGTH_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLKICKINGBYLENGTH_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLKICKINGBYLENGTH_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLKICKINGBYLENGTH, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Kicking - bull/bear determined by the longer marubozu", /* hint */ + "CdlKickingByLength", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLKICKINGBYLENGTH END */ + +/* CDLLADDERBOTTOM BEGIN */ +static const TA_InputParameterInfo *TA_CDLLADDERBOTTOM_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLLADDERBOTTOM_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLLADDERBOTTOM_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLLADDERBOTTOM, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Ladder Bottom", /* hint */ + "CdlLadderBottom", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLLADDERBOTTOM END */ + +/* CDLLONGLEGGEDDOJI BEGIN */ +static const TA_InputParameterInfo *TA_CDLLONGLEGGEDDOJI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLLONGLEGGEDDOJI_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLLONGLEGGEDDOJI_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLLONGLEGGEDDOJI, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Long Legged Doji", /* hint */ + "CdlLongLeggedDoji", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLLONGLEGGEDDOJI END */ + +/* CDLLONGLINE BEGIN */ +static const TA_InputParameterInfo *TA_CDLLONGLINE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLLONGLINE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLLONGLINE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLLONGLINE, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Long Line Candle", /* hint */ + "CdlLongLine", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLLONGLINE END */ + +/* CDLMARUBOZU BEGIN */ +static const TA_InputParameterInfo *TA_CDLMARUBOZU_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLMARUBOZU_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLMARUBOZU_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLMARUBOZU, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Marubozu", /* hint */ + "CdlMarubozu", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLMARUBOZU END */ + +/* CDLMATCHINGLOW BEGIN */ +static const TA_InputParameterInfo *TA_CDLMATCHINGLOW_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLMATCHINGLOW_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLMATCHINGLOW_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLMATCHINGLOW, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Matching Low", /* hint */ + "CdlMatchingLow", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLMATCHINGLOW END */ + +/* CDLMATHOLD BEGIN */ +static const TA_InputParameterInfo *TA_CDLMATHOLD_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLMATHOLD_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLMATHOLD_OptInputs[] = +{ + &TA_DEF_UI_Penetration_50, + NULL +}; + +DEF_FUNCTION( CDLMATHOLD, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Mat Hold", /* hint */ + "CdlMatHold", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLMATHOLD END */ + +/* CDLMORNINGDOJISTAR BEGIN */ +static const TA_InputParameterInfo *TA_CDLMORNINGDOJISTAR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLMORNINGDOJISTAR_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLMORNINGDOJISTAR_OptInputs[] = +{ + &TA_DEF_UI_Penetration_30, + NULL +}; + +DEF_FUNCTION( CDLMORNINGDOJISTAR, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Morning Doji Star", /* hint */ + "CdlMorningDojiStar", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLMORNINGDOJISTAR END */ + +/* CDLMORNINGSTAR BEGIN */ +static const TA_InputParameterInfo *TA_CDLMORNINGSTAR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLMORNINGSTAR_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLMORNINGSTAR_OptInputs[] = +{ + &TA_DEF_UI_Penetration_30, + NULL +}; + +DEF_FUNCTION( CDLMORNINGSTAR, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Morning Star", /* hint */ + "CdlMorningStar", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLMORNINGSTAR END */ + +/* CDLONNECK BEGIN */ +static const TA_InputParameterInfo *TA_CDLONNECK_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLONNECK_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLONNECK_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLONNECK, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "On-Neck Pattern", /* hint */ + "CdlOnNeck", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLONNECK END */ + +/* CDLPIERCING BEGIN */ +static const TA_InputParameterInfo *TA_CDLPIERCING_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLPIERCING_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLPIERCING_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLPIERCING, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Piercing Pattern", /* hint */ + "CdlPiercing", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLPIERCING END */ + +/* CDLRICKSHAWMAN BEGIN */ +static const TA_InputParameterInfo *TA_CDLRICKSHAWMAN_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLRICKSHAWMAN_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLRICKSHAWMAN_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLRICKSHAWMAN, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Rickshaw Man", /* hint */ + "CdlRickshawMan", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLRICKSHAWMAN END */ + +/* CDLRISEFALL3METHODS BEGIN */ +static const TA_InputParameterInfo *TA_CDLRISEFALL3METHODS_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLRISEFALL3METHODS_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLRISEFALL3METHODS_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLRISEFALL3METHODS, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Rising/Falling Three Methods", /* hint */ + "CdlRiseFall3Methods", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLRISEFALL3METHODS END */ + +/* CDLSEPARATINGLINES BEGIN */ +static const TA_InputParameterInfo *TA_CDLSEPARATINGLINES_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLSEPARATINGLINES_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLSEPARATINGLINES_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLSEPARATINGLINES, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Separating Lines", /* hint */ + "CdlSeperatingLines", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLSEPARATINGLINES END */ + +/* CDLSHOOTINGSTAR BEGIN */ +static const TA_InputParameterInfo *TA_CDLSHOOTINGSTAR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLSHOOTINGSTAR_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLSHOOTINGSTAR_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLSHOOTINGSTAR, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Shooting Star", /* hint */ + "CdlShootingStar", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLSHOOTINGSTAR END */ + +/* CDLSHORTLINE BEGIN */ +static const TA_InputParameterInfo *TA_CDLSHORTLINE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLSHORTLINE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLSHORTLINE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLSHORTLINE, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Short Line Candle", /* hint */ + "CdlShortLine", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLSHORTLINE END */ + +/* CDLSPINNINGTOP BEGIN */ +static const TA_InputParameterInfo *TA_CDLSPINNINGTOP_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLSPINNINGTOP_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLSPINNINGTOP_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLSPINNINGTOP, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Spinning Top", /* hint */ + "CdlSpinningTop", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLSPINNINGTOP END */ + +/* CDLSTALLEDPATTERN BEGIN */ +static const TA_InputParameterInfo *TA_CDLSTALLEDPATTERN_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLSTALLEDPATTERN_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLSTALLEDPATTERN_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLSTALLEDPATTERN, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Stalled Pattern", /* hint */ + "CdlStalledPattern", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLSTALLEDPATTERN END */ + +/* CDLSTICKSANDWICH BEGIN */ +static const TA_InputParameterInfo *TA_CDLSTICKSANDWICH_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLSTICKSANDWICH_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLSTICKSANDWICH_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLSTICKSANDWICH, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Stick Sandwich", /* hint */ + "CdlStickSandwhich", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLSTICKSANDWICH END */ + +/* CDLTAKURI BEGIN */ +static const TA_InputParameterInfo *TA_CDLTAKURI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLTAKURI_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLTAKURI_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLTAKURI, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Takuri (Dragonfly Doji with very long lower shadow)", /* hint */ + "CdlTakuri", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLTAKURI END */ + +/* CDLTASUKIGAP BEGIN */ +static const TA_InputParameterInfo *TA_CDLTASUKIGAP_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLTASUKIGAP_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLTASUKIGAP_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLTASUKIGAP, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Tasuki Gap", /* hint */ + "CdlTasukiGap", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLTASUKIGAP END */ + +/* CDLTHRUSTING BEGIN */ +static const TA_InputParameterInfo *TA_CDLTHRUSTING_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLTHRUSTING_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLTHRUSTING_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLTHRUSTING, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Thrusting Pattern", /* hint */ + "CdlThrusting", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLTHRUSTING END */ + +/* CDLTRISTAR BEGIN */ +static const TA_InputParameterInfo *TA_CDLTRISTAR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLTRISTAR_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLTRISTAR_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLTRISTAR, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Tristar Pattern", /* hint */ + "CdlTristar", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLTRISTAR END */ + +/* CDLUNIQUE3RIVER BEGIN */ +static const TA_InputParameterInfo *TA_CDLUNIQUE3RIVER_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLUNIQUE3RIVER_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLUNIQUE3RIVER_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLUNIQUE3RIVER, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Unique 3 River", /* hint */ + "CdlUnique3River", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLUNIQUE3RIVER END */ + +/* CDLUPSIDEGAP2CROWS BEGIN */ +static const TA_InputParameterInfo *TA_CDLUPSIDEGAP2CROWS_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLUPSIDEGAP2CROWS_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLUPSIDEGAP2CROWS_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLUPSIDEGAP2CROWS, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Upside Gap Two Crows", /* hint */ + "CdlUpsideGap2Crows", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLUPSIDEGAP2CROWS END */ + +/* CDLXSIDEGAP3METHODS BEGIN */ +static const TA_InputParameterInfo *TA_CDLXSIDEGAP3METHODS_Inputs[] = +{ + &TA_DEF_UI_Input_Price_OHLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_CDLXSIDEGAP3METHODS_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CDLXSIDEGAP3METHODS_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( CDLXSIDEGAP3METHODS, /* name */ + TA_GroupId_PatternRecognition, /* groupId */ + "Upside/Downside Gap Three Methods", /* hint */ + "CdlXSideGap3Methods", /* CamelCase name */ + TA_FUNC_FLG_CANDLESTICK /* flags */ + ); + +/* CDLXSIDEGAP3METHODS END */ + +/* CEIL BEGIN */ +DEF_MATH_UNARY_OPERATOR( CEIL, "Vector Ceil", "Ceil" ) +/* CEIL END */ + +/* CMO BEGIN */ +static const TA_InputParameterInfo *TA_CMO_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_CMO_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CMO_OptInputs[] = +{ + &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( CMO, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Chande Momentum Oscillator", /* hint */ + "Cmo", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* CMO END */ + +/* CORREL BEGIN */ +static const TA_InputParameterInfo *TA_CORREL_Inputs[] = +{ + &TA_DEF_UI_Input_Real0, + &TA_DEF_UI_Input_Real1, + NULL +}; + +static const TA_OutputParameterInfo *TA_CORREL_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_CORREL_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30, + NULL +}; + +DEF_FUNCTION( CORREL, /* name */ + TA_GroupId_Statistic, /* groupId */ + "Pearson's Correlation Coefficient (r)", /* hint */ + "Correl", /* CamelCase name */ + 0 /* flags */ + ); +/* CORREL END */ + +/* COS BEGIN */ +DEF_MATH_UNARY_OPERATOR( COS, "Vector Trigonometric Cos", "Cos" ) +/* COS END */ + +/* COSH BEGIN */ +DEF_MATH_UNARY_OPERATOR( COSH, "Vector Trigonometric Cosh", "Cosh" ) +/* COSH END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableC[] = +{ + ADD_TO_TABLE(CCI), + ADD_TO_TABLE(CDL2CROWS), + ADD_TO_TABLE(CDL3BLACKCROWS), + ADD_TO_TABLE(CDL3INSIDE), + ADD_TO_TABLE(CDL3LINESTRIKE), + ADD_TO_TABLE(CDL3OUTSIDE), + ADD_TO_TABLE(CDL3STARSINSOUTH), + ADD_TO_TABLE(CDL3WHITESOLDIERS), + ADD_TO_TABLE(CDLABANDONEDBABY), + ADD_TO_TABLE(CDLADVANCEBLOCK), + ADD_TO_TABLE(CDLBELTHOLD), + ADD_TO_TABLE(CDLBREAKAWAY), + ADD_TO_TABLE(CDLCLOSINGMARUBOZU), + ADD_TO_TABLE(CDLCONCEALBABYSWALL), + ADD_TO_TABLE(CDLCOUNTERATTACK), + ADD_TO_TABLE(CDLDARKCLOUDCOVER), + ADD_TO_TABLE(CDLDOJI), + ADD_TO_TABLE(CDLDOJISTAR), + ADD_TO_TABLE(CDLDRAGONFLYDOJI), + ADD_TO_TABLE(CDLENGULFING), + ADD_TO_TABLE(CDLEVENINGDOJISTAR), + ADD_TO_TABLE(CDLEVENINGSTAR), + ADD_TO_TABLE(CDLGAPSIDESIDEWHITE), + ADD_TO_TABLE(CDLGRAVESTONEDOJI), + ADD_TO_TABLE(CDLHAMMER), + ADD_TO_TABLE(CDLHANGINGMAN), + ADD_TO_TABLE(CDLHARAMI), + ADD_TO_TABLE(CDLHARAMICROSS), + ADD_TO_TABLE(CDLHIGHWAVE), + ADD_TO_TABLE(CDLHIKKAKE), + ADD_TO_TABLE(CDLHIKKAKEMOD), + ADD_TO_TABLE(CDLHOMINGPIGEON), + ADD_TO_TABLE(CDLIDENTICAL3CROWS), + ADD_TO_TABLE(CDLINNECK), + ADD_TO_TABLE(CDLINVERTEDHAMMER), + ADD_TO_TABLE(CDLKICKING), + ADD_TO_TABLE(CDLKICKINGBYLENGTH), + ADD_TO_TABLE(CDLLADDERBOTTOM), + ADD_TO_TABLE(CDLLONGLEGGEDDOJI), + ADD_TO_TABLE(CDLLONGLINE), + ADD_TO_TABLE(CDLMARUBOZU), + ADD_TO_TABLE(CDLMATCHINGLOW), + ADD_TO_TABLE(CDLMATHOLD), + ADD_TO_TABLE(CDLMORNINGDOJISTAR), + ADD_TO_TABLE(CDLMORNINGSTAR), + ADD_TO_TABLE(CDLONNECK), + ADD_TO_TABLE(CDLPIERCING), + ADD_TO_TABLE(CDLRICKSHAWMAN), + ADD_TO_TABLE(CDLRISEFALL3METHODS), + ADD_TO_TABLE(CDLSEPARATINGLINES), + ADD_TO_TABLE(CDLSHOOTINGSTAR), + ADD_TO_TABLE(CDLSHORTLINE), + ADD_TO_TABLE(CDLSPINNINGTOP), + ADD_TO_TABLE(CDLSTALLEDPATTERN), + ADD_TO_TABLE(CDLSTICKSANDWICH), + ADD_TO_TABLE(CDLTAKURI), + ADD_TO_TABLE(CDLTASUKIGAP), + ADD_TO_TABLE(CDLTHRUSTING), + ADD_TO_TABLE(CDLTRISTAR), + ADD_TO_TABLE(CDLUNIQUE3RIVER), + ADD_TO_TABLE(CDLUPSIDEGAP2CROWS), + ADD_TO_TABLE(CDLXSIDEGAP3METHODS), + ADD_TO_TABLE(CEIL), + ADD_TO_TABLE(CMO), + ADD_TO_TABLE(CORREL), + ADD_TO_TABLE(COS), + ADD_TO_TABLE(COSH), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableCSize = + ((sizeof(TA_DEF_TableC)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_d.c b/src/ta_abstract/tables/table_d.c new file mode 100644 index 000000000..16918eeda --- /dev/null +++ b/src/ta_abstract/tables/table_d.c @@ -0,0 +1,129 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'D' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* DEMA BEGIN */ +static const TA_InputParameterInfo *TA_DEMA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_DEMA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_DEMA_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( DEMA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Double Exponential Moving Average", /* hint */ + "Dema", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* DEMA END */ + +/* DIV BEGIN */ +DEF_MATH_BINARY_OPERATOR( DIV, "Vector Arithmetic Div", "Div" ) +/* DIV END */ + +/* DX BEGIN */ +static const TA_InputParameterInfo *TA_DX_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_DX_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_DX_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( DX, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Directional Movement Index", /* hint */ + "Dx", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* DX END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableD[] = +{ + ADD_TO_TABLE(DEMA), + ADD_TO_TABLE(DIV), + ADD_TO_TABLE(DX), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableDSize = + ((sizeof(TA_DEF_TableD)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_e.c b/src/ta_abstract/tables/table_e.c new file mode 100644 index 000000000..cedc9e5b8 --- /dev/null +++ b/src/ta_abstract/tables/table_e.c @@ -0,0 +1,102 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'E' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* EMA BEGIN */ +static const TA_InputParameterInfo *TA_EMA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_EMA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_EMA_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( EMA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Exponential Moving Average", /* hint */ + "Ema", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP|TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* EMA END */ + +/* EXP BEGIN */ +DEF_MATH_UNARY_OPERATOR( EXP, "Vector Arithmetic Exp", "Exp" ) +/* EXP END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableE[] = +{ + ADD_TO_TABLE(EMA), + ADD_TO_TABLE(EXP), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableESize = + ((sizeof(TA_DEF_TableE)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_f.c b/src/ta_abstract/tables/table_f.c new file mode 100644 index 000000000..f861d1b91 --- /dev/null +++ b/src/ta_abstract/tables/table_f.c @@ -0,0 +1,76 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'F' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* Floor BEGIN */ +DEF_MATH_UNARY_OPERATOR( FLOOR, "Vector Floor", "Floor" ) +/* Floor END */ + + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableF[] = +{ + ADD_TO_TABLE(FLOOR), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableFSize = + ((sizeof(TA_DEF_TableF)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_g.c b/src/ta_abstract/tables/table_g.c new file mode 100644 index 000000000..07287c2ed --- /dev/null +++ b/src/ta_abstract/tables/table_g.c @@ -0,0 +1,72 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'G' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* None */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableG[] = +{ + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableGSize = + ((sizeof(TA_DEF_TableG)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_h.c b/src/ta_abstract/tables/table_h.c new file mode 100644 index 000000000..ffc30fb47 --- /dev/null +++ b/src/ta_abstract/tables/table_h.c @@ -0,0 +1,246 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'H' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* HT_DCPERIOD */ +static const TA_InputParameterInfo *TA_HT_DCPERIOD_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_HT_DCPERIOD_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_HT_DCPERIOD_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( HT_DCPERIOD, /* name */ + TA_GroupId_CycleIndicators, /* groupId */ + "Hilbert Transform - Dominant Cycle Period", /* hint */ + "HtDcPeriod", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* HT_DCPERIOD END */ + +/* HT_DCPHASE */ +static const TA_InputParameterInfo *TA_HT_DCPHASE_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_HT_DCPHASE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_HT_DCPHASE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( HT_DCPHASE, /* name */ + TA_GroupId_CycleIndicators, /* groupId */ + "Hilbert Transform - Dominant Cycle Phase", /* hint */ + "HtDcPhase", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* HT_DCPHASE END */ + +/* HT_PHASOR */ +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_InPhase = + { TA_Output_Real, "outInPhase", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_Quadrature = + { TA_Output_Real, "outQuadrature", TA_OUT_DASH_LINE }; + +static const TA_InputParameterInfo *TA_HT_PHASOR_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_HT_PHASOR_Outputs[] = +{ + &TA_DEF_UI_Output_Real_InPhase, + &TA_DEF_UI_Output_Real_Quadrature, + NULL +}; + +static const TA_OptInputParameterInfo *TA_HT_PHASOR_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( HT_PHASOR, /* name */ + TA_GroupId_CycleIndicators, /* groupId */ + "Hilbert Transform - Phasor Components", /* hint */ + "HtPhasor", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* HT_PHASOR END */ + +/* HT_SINE */ +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_Sine = + { TA_Output_Real, "outSine", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_LeadSine = + { TA_Output_Real, "outLeadSine", TA_OUT_DASH_LINE }; + +static const TA_InputParameterInfo *TA_HT_SINE_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_HT_SINE_Outputs[] = +{ + &TA_DEF_UI_Output_Real_Sine, + &TA_DEF_UI_Output_Real_LeadSine, + NULL +}; + +static const TA_OptInputParameterInfo *TA_HT_SINE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( HT_SINE, /* name */ + TA_GroupId_CycleIndicators, /* groupId */ + "Hilbert Transform - SineWave", /* hint */ + "HtSine", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* HT_SINE END */ + +/* HT_TRENDLINE */ +static const TA_InputParameterInfo *TA_HT_TRENDLINE_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_HT_TRENDLINE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_HT_TRENDLINE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( HT_TRENDLINE, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Hilbert Transform - Instantaneous Trendline", /* hint */ + "HtTrendline", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER|TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* HT_TRENDLINE END */ + +/* HT_TRENDMODE */ +static const TA_InputParameterInfo *TA_HT_TRENDMODE_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_HT_TRENDMODE_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_HT_TRENDMODE_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( HT_TRENDMODE, /* name */ + TA_GroupId_CycleIndicators, /* groupId */ + "Hilbert Transform - Trend vs Cycle Mode", /* hint */ + "HtTrendMode", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* HT_TRENDMODE END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableH[] = +{ + ADD_TO_TABLE(HT_DCPERIOD), + ADD_TO_TABLE(HT_DCPHASE), + ADD_TO_TABLE(HT_PHASOR), + ADD_TO_TABLE(HT_SINE), + ADD_TO_TABLE(HT_TRENDLINE), + ADD_TO_TABLE(HT_TRENDMODE), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableHSize = + ((sizeof(TA_DEF_TableH)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_i.c b/src/ta_abstract/tables/table_i.c new file mode 100644 index 000000000..d9403f82d --- /dev/null +++ b/src/ta_abstract/tables/table_i.c @@ -0,0 +1,72 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'I' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* None */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableI[] = +{ + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableISize = + ((sizeof(TA_DEF_TableI)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_j.c b/src/ta_abstract/tables/table_j.c new file mode 100644 index 000000000..264b643ff --- /dev/null +++ b/src/ta_abstract/tables/table_j.c @@ -0,0 +1,72 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'J' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* None */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableJ[] = +{ + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableJSize = + ((sizeof(TA_DEF_TableJ)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_k.c b/src/ta_abstract/tables/table_k.c new file mode 100644 index 000000000..c93f6ca71 --- /dev/null +++ b/src/ta_abstract/tables/table_k.c @@ -0,0 +1,98 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'K' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* KAMA BEGIN */ +static const TA_InputParameterInfo *TA_KAMA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_KAMA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_KAMA_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( KAMA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Kaufman Adaptive Moving Average", /* hint */ + "Kama", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP|TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* KAMA END */ + + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableK[] = +{ + ADD_TO_TABLE(KAMA), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableKSize = + ((sizeof(TA_DEF_TableK)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_l.c b/src/ta_abstract/tables/table_l.c new file mode 100644 index 000000000..87595526a --- /dev/null +++ b/src/ta_abstract/tables/table_l.c @@ -0,0 +1,188 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'L' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* LINEARREG BEGIN */ +static const TA_InputParameterInfo *TA_LINEARREG_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_LINEARREG_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_LINEARREG_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( LINEARREG, /* name */ + TA_GroupId_Statistic,/* groupId */ + "Linear Regression", /* hint */ + "LinearReg", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* LINEARREG END */ + +/* LINEARREG_SLOPE BEGIN */ +static const TA_InputParameterInfo *TA_LINEARREG_SLOPE_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_LINEARREG_SLOPE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_LINEARREG_SLOPE_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( LINEARREG_SLOPE, /* name */ + TA_GroupId_Statistic,/* groupId */ + "Linear Regression Slope", /* hint */ + "LinearRegSlope", /* CamelCase name */ + 0 /* flags */ + ); +/* LINEARREG_SLOPE END */ + +/* LINEARREG_ANGLE BEGIN */ +static const TA_InputParameterInfo *TA_LINEARREG_ANGLE_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_LINEARREG_ANGLE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_LINEARREG_ANGLE_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( LINEARREG_ANGLE, /* name */ + TA_GroupId_Statistic,/* groupId */ + "Linear Regression Angle", /* hint */ + "LinearRegAngle", /* CamelCase name */ + 0 /* flags */ + ); +/* LINEARREG_ANGLE END */ + +/* LINEARREG_INTERCEPT BEGIN */ +static const TA_InputParameterInfo *TA_LINEARREG_INTERCEPT_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_LINEARREG_INTERCEPT_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_LINEARREG_INTERCEPT_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( LINEARREG_INTERCEPT, /* name */ + TA_GroupId_Statistic,/* groupId */ + "Linear Regression Intercept", /* hint */ + "LinearRegIntercept", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* LINEARREG_INTERCEPT END */ + +/* LN BEGIN */ +DEF_MATH_UNARY_OPERATOR( LN, "Vector Log Natural", "Ln" ) +/* LN END */ + +/* LOG10 BEGIN */ +DEF_MATH_UNARY_OPERATOR( LOG10, "Vector Log10", "Log10" ) +/* LOG10 END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableL[] = +{ + ADD_TO_TABLE(LINEARREG), + ADD_TO_TABLE(LINEARREG_ANGLE), + ADD_TO_TABLE(LINEARREG_INTERCEPT), + ADD_TO_TABLE(LINEARREG_SLOPE), + ADD_TO_TABLE(LN), + ADD_TO_TABLE(LOG10), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableLSize = + ((sizeof(TA_DEF_TableL)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_m.c b/src/ta_abstract/tables/table_m.c new file mode 100644 index 000000000..3ff2acd1b --- /dev/null +++ b/src/ta_abstract/tables/table_m.c @@ -0,0 +1,739 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'M' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +const TA_OptInputParameterInfo TA_DEF_UI_Signal_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInSignalPeriod", /* paramName */ + 0, /* flags */ + + "Signal Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 9, /* defaultValue */ + "Smoothing for the signal line (nb of period)", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_Slow_MA_Type = +{ + TA_OptInput_IntegerList, /* type */ + "optInSlowMAType", /* paramName */ + 0, /* flags */ + + "Slow MA", /* displayName */ + (const void *)&TA_MA_TypeList, /* dataSet */ + 0, /* defaultValue = simple average */ + "Type of Moving Average for slow MA", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_Fast_MA_Type = +{ + TA_OptInput_IntegerList, /* type */ + "optInFastMAType", /* paramName */ + 0, /* flags */ + + "Fast MA", /* displayName */ + (const void *)&TA_MA_TypeList, /* dataSet */ + 0, /* defaultValue = simple average */ + "Type of Moving Average for fast MA", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_Signal_MA_Type = +{ + TA_OptInput_IntegerList, /* type */ + "optInSignalMAType", /* paramName */ + 0, /* flags */ + "Signal MA", /* displayName */ + (const void *)&TA_MA_TypeList, /* dataSet */ + 0, /* defaultValue = simple average */ + "Type of Moving Average for signal line", /* hint */ + + NULL /* CamelCase name */ +}; + +/* MA BEGIN */ +static const TA_InputParameterInfo *TA_MA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MA_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30, + &TA_DEF_UI_MA_Method, + NULL +}; + +DEF_FUNCTION( MA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Moving average", /* hint */ + "MovingAverage", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* MA END */ + +/* MACD BEGIN */ +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_MACD = + { TA_Output_Real, "outMACD", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_MACDSignal = + { TA_Output_Real, "outMACDSignal", TA_OUT_DASH_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_MACDHist = + { TA_Output_Real, "outMACDHist", TA_OUT_HISTO }; + +static const TA_InputParameterInfo *TA_MACD_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MACD_Outputs[] = +{ + &TA_DEF_UI_Output_Real_MACD, + &TA_DEF_UI_Output_Real_MACDSignal, + &TA_DEF_UI_Output_Real_MACDHist, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MACD_OptInputs[] = +{ &TA_DEF_UI_Fast_Period, + &TA_DEF_UI_Slow_Period, + &TA_DEF_UI_Signal_Period, + NULL +}; + +DEF_FUNCTION( MACD, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Moving Average Convergence/Divergence", /* hint */ + "Macd", /* CamelCase name */ + 0 /* flags */ + ); +/* MACD END */ + +/* MACDEXT BEGIN */ +static const TA_InputParameterInfo *TA_MACDEXT_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MACDEXT_Outputs[] = +{ + &TA_DEF_UI_Output_Real_MACD, + &TA_DEF_UI_Output_Real_MACDSignal, + &TA_DEF_UI_Output_Real_MACDHist, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MACDEXT_OptInputs[] = +{ &TA_DEF_UI_Fast_Period, + &TA_DEF_UI_Fast_MA_Type, + &TA_DEF_UI_Slow_Period, + &TA_DEF_UI_Slow_MA_Type, + &TA_DEF_UI_Signal_Period, + &TA_DEF_UI_Signal_MA_Type, + NULL +}; + +DEF_FUNCTION( MACDEXT, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "MACD with controllable MA type", /* hint */ + "MacdExt", /* CamelCase name */ + 0 /* flags */ + ); +/* MACDEXT END */ + +/* MACDFIX BEGIN */ +static const TA_InputParameterInfo *TA_MACDFIX_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MACDFIX_Outputs[] = +{ + &TA_DEF_UI_Output_Real_MACD, + &TA_DEF_UI_Output_Real_MACDSignal, + &TA_DEF_UI_Output_Real_MACDHist, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MACDFIX_OptInputs[] = +{ &TA_DEF_UI_Signal_Period, + NULL +}; + +DEF_FUNCTION( MACDFIX, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Moving Average Convergence/Divergence Fix 12/26", /* hint */ + "MacdFix", /* CamelCase name */ + 0 /* flags */ + ); +/* MACDFIX END */ + +/* MAMA BEGIN */ +const TA_RealRange TA_DEF_MAMA_FastLimit = +{ + 0.01, /* min */ + 0.99, /* max */ + 2, /* precision */ + 0.21, /* suggested start */ + 0.80, /* suggested end */ + 0.01 /* suggested increment */ +}; + +const TA_RealRange TA_DEF_MAMA_SlowLimit = +{ + 0.01, /* min */ + 0.99, /* max */ + 2, /* precision */ + 0.01, /* suggested start */ + 0.60, /* suggested end */ + 0.01 /* suggested increment */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_MAMA_FastLimit = +{ + TA_OptInput_RealRange, /* type */ + "optInFastLimit", /* paramName */ + 0, /* flags */ + "Fast Limit", /* displayName */ + (const void *)&TA_DEF_MAMA_FastLimit, /* dataSet */ + 0.5, /* defaultValue */ + "Upper limit use in the adaptive algorithm", /* hint */ + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_MAMA_SlowLimit = +{ + TA_OptInput_RealRange, /* type */ + "optInSlowLimit", /* paramName */ + 0, /* flags */ + + "Slow Limit", /* displayName */ + (const void *)&TA_DEF_MAMA_SlowLimit, /* dataSet */ + 0.05, /* defaultValue */ + "Lower limit use in the adaptive algorithm", /* hint */ + NULL /* CamelCase name */ +}; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_MAMA = + { TA_Output_Real, "outMAMA", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_FAMA = + { TA_Output_Real, "outFAMA", TA_OUT_DASH_LINE }; + +static const TA_InputParameterInfo *TA_MAMA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MAMA_Outputs[] = +{ + &TA_DEF_UI_Output_Real_MAMA, + &TA_DEF_UI_Output_Real_FAMA, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MAMA_OptInputs[] = +{ &TA_DEF_UI_MAMA_FastLimit, + &TA_DEF_UI_MAMA_SlowLimit, + NULL +}; + +DEF_FUNCTION( MAMA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "MESA Adaptive Moving Average", /* hint */ + "Mama", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER|TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* MAMA END */ + +/* MAVP BEGIN */ +static const TA_InputParameterInfo *TA_MAVP_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + &TA_DEF_UI_Input_Periods, + NULL +}; + +static const TA_OutputParameterInfo *TA_MAVP_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MAVP_OptInputs[] = +{ + &TA_DEF_UI_MinPeriod, + &TA_DEF_UI_MaxPeriod, + &TA_DEF_UI_MA_Method, + NULL +}; + +DEF_FUNCTION( MAVP, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Moving average with variable period", /* hint */ + "MovingAverageVariablePeriod", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* MAVP END */ + +/* MAX BEGIN */ +static const TA_InputParameterInfo *TA_MAX_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MAX_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MAX_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MAX, /* name */ + TA_GroupId_MathOperators, /* groupId */ + "Highest value over a specified period", /* hint */ + "Max", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* MAX END */ + +/* MAXINDEX BEGIN */ +static const TA_InputParameterInfo *TA_MAXINDEX_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MAXINDEX_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MAXINDEX_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MAXINDEX, /* name */ + TA_GroupId_MathOperators, /* groupId */ + "Index of highest value over a specified period", /* hint */ + "MaxIndex", /* CamelCase name */ + 0 /* flags */ + ); +/* MAXINDEX END */ + +/* MEDPRICE BEGIN */ +static const TA_InputParameterInfo *TA_MEDPRICE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HL, + NULL +}; + +static const TA_OutputParameterInfo *TA_MEDPRICE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MEDPRICE_OptInputs[] = { NULL }; + +DEF_FUNCTION( MEDPRICE, /* name */ + TA_GroupId_PriceTransform, /* groupId */ + "Median Price", /* hint */ + "MedPrice", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); + +/* MEDPRICE END */ + +/* MFI BEGIN */ +static const TA_InputParameterInfo *TA_MFI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLCV, + NULL +}; + +static const TA_OutputParameterInfo *TA_MFI_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MFI_OptInputs[] = +{ + &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MFI, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Money Flow Index", /* hint */ + "Mfi", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* MFI END */ + +/* MIDPRICE BEGIN */ +static const TA_InputParameterInfo *TA_MIDPRICE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HL, + NULL +}; + +static const TA_OutputParameterInfo *TA_MIDPRICE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MIDPRICE_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MIDPRICE, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Midpoint Price over period",/* hint */ + "MidPrice", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); + +/* MIDPRICE END */ + +/* MIDPOINT BEGIN */ +static const TA_InputParameterInfo *TA_MIDPOINT_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MIDPOINT_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MIDPOINT_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MIDPOINT, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "MidPoint over period", /* hint */ + "MidPoint", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* MIDPOINT END */ + +/* MIN BEGIN */ +static const TA_InputParameterInfo *TA_MIN_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MIN_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MIN_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MIN, /* name */ + TA_GroupId_MathOperators, /* groupId */ + "Lowest value over a specified period", /* hint */ + "Min", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* MIN END */ + +/* MININDEX BEGIN */ +static const TA_InputParameterInfo *TA_MININDEX_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MININDEX_Outputs[] = +{ + &TA_DEF_UI_Output_Integer, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MININDEX_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MININDEX, /* name */ + TA_GroupId_MathOperators, /* groupId */ + "Index of lowest value over a specified period", /* hint */ + "MinIndex", /* CamelCase name */ + 0 /* flags */ + ); +/* MININDEX END */ + +/* MINMAX BEGIN */ +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_Min = + { TA_Output_Real, "outMin", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Real_Max = + { TA_Output_Real, "outMax", TA_OUT_LINE }; + +static const TA_InputParameterInfo *TA_MINMAX_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MINMAX_Outputs[] = +{ + &TA_DEF_UI_Output_Real_Min, + &TA_DEF_UI_Output_Real_Max, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MINMAX_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MINMAX, /* name */ + TA_GroupId_MathOperators, /* groupId */ + "Lowest and highest values over a specified period", /* hint */ + "MinMax", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* MINMAX END */ + +/* MINMAXINDEX BEGIN */ +const TA_OutputParameterInfo TA_DEF_UI_Output_Integer_MinIdx = + { TA_Output_Integer, "outMinIdx", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_Integer_MaxIdx = + { TA_Output_Integer, "outMaxIdx", TA_OUT_LINE }; + +static const TA_InputParameterInfo *TA_MINMAXINDEX_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MINMAXINDEX_Outputs[] = +{ + &TA_DEF_UI_Output_Integer_MinIdx, + &TA_DEF_UI_Output_Integer_MaxIdx, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MINMAXINDEX_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( MINMAXINDEX, /* name */ + TA_GroupId_MathOperators, /* groupId */ + "Indexes of lowest and highest values over a specified period", /* hint */ + "MinMaxIndex", /* CamelCase name */ + 0 /* flags */ + ); +/* MINMAXINDEX END */ + +/* MINUS_DI BEGIN */ +static const TA_InputParameterInfo *TA_MINUS_DI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_MINUS_DI_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MINUS_DI_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14, + NULL +}; + +DEF_FUNCTION( MINUS_DI, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Minus Directional Indicator", /* hint */ + "MinusDI", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); + +/* MINUS_DI END */ + +/* MINUS_DM BEGIN */ +static const TA_InputParameterInfo *TA_MINUS_DM_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HL, + NULL +}; + +static const TA_OutputParameterInfo *TA_MINUS_DM_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MINUS_DM_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14, + NULL +}; + +DEF_FUNCTION( MINUS_DM, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Minus Directional Movement", /* hint */ + "MinusDM", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); + +/* MINUS_DM END */ + +/* MOM BEGIN */ +static const TA_InputParameterInfo *TA_MOM_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_MOM_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_MOM_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_10, + NULL +}; + +DEF_FUNCTION( MOM, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Momentum", /* hint */ + "Mom", /* CamelCase name */ + 0 /* flags */ + ); +/* MOM END */ + +/* MULT BEGIN */ +DEF_MATH_BINARY_OPERATOR( MULT, "Vector Arithmetic Mult", "Mult" ) +/* MULT END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableM[] = +{ + ADD_TO_TABLE(MA), + ADD_TO_TABLE(MACD), + ADD_TO_TABLE(MACDEXT), + ADD_TO_TABLE(MACDFIX), + ADD_TO_TABLE(MAMA), + ADD_TO_TABLE(MAVP), + ADD_TO_TABLE(MAX), + ADD_TO_TABLE(MAXINDEX), + ADD_TO_TABLE(MEDPRICE), + ADD_TO_TABLE(MFI), + ADD_TO_TABLE(MIDPOINT), + ADD_TO_TABLE(MIDPRICE), + ADD_TO_TABLE(MIN), + ADD_TO_TABLE(MININDEX), + ADD_TO_TABLE(MINMAX), + ADD_TO_TABLE(MINMAXINDEX), + ADD_TO_TABLE(MINUS_DI), + ADD_TO_TABLE(MINUS_DM), + ADD_TO_TABLE(MOM), + ADD_TO_TABLE(MULT), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableMSize = + ((sizeof(TA_DEF_TableM)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_n.c b/src/ta_abstract/tables/table_n.c new file mode 100644 index 000000000..05d2bb1d6 --- /dev/null +++ b/src/ta_abstract/tables/table_n.c @@ -0,0 +1,127 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'N' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* NATR BEGIN */ +static const TA_InputParameterInfo *TA_NATR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_NATR_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_NATR_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14, + NULL +}; + +DEF_FUNCTION( NATR, /* name */ + TA_GroupId_VolatilityIndicators, /* groupId */ + "Normalized Average True Range", /* hint */ + "Natr", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* NATR END */ + +#if 0 +Will be implemented later +/* NVI BEGIN */ +static const TA_InputParameterInfo *TA_NVI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_CV, + NULL +}; + +static const TA_OutputParameterInfo *TA_NVI_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_NVI_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( NVI, /* name */ + TA_GroupId_VolumeIndicators, /* groupId */ + "Negative Volume Index", /* hint */ + "Nvi", /* CamelCase name */ + 0 /* flags */ + ); + +/* NVI END */ +#endif + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableN[] = +{ + ADD_TO_TABLE(NATR), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableNSize = + ((sizeof(TA_DEF_TableN)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_o.c b/src/ta_abstract/tables/table_o.c new file mode 100644 index 000000000..17763c333 --- /dev/null +++ b/src/ta_abstract/tables/table_o.c @@ -0,0 +1,96 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'O' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* OBV BEGIN */ +static const TA_InputParameterInfo *TA_OBV_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + &TA_DEF_UI_Input_Price_V, + NULL +}; + +static const TA_OutputParameterInfo *TA_OBV_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_OBV_OptInputs[] = +{ NULL }; + +DEF_FUNCTION( OBV, /* name */ + TA_GroupId_VolumeIndicators, /* groupId */ + "On Balance Volume", /* hint */ + "Obv", /* CamelCase name */ + 0 /* flags */ + ); +/* OBV END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableO[] = +{ + ADD_TO_TABLE(OBV), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableOSize = + ((sizeof(TA_DEF_TableO)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_p.c b/src/ta_abstract/tables/table_p.c new file mode 100644 index 000000000..87d587349 --- /dev/null +++ b/src/ta_abstract/tables/table_p.c @@ -0,0 +1,186 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'P' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* PLUS_DI BEGIN */ +static const TA_InputParameterInfo *TA_PLUS_DI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_PLUS_DI_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_PLUS_DI_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14, + NULL +}; + +DEF_FUNCTION( PLUS_DI, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Plus Directional Indicator", /* hint */ + "PlusDI", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); + +/* PLUS_DI END */ + +/* PLUS_DM BEGIN */ +static const TA_InputParameterInfo *TA_PLUS_DM_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HL, + NULL +}; + +static const TA_OutputParameterInfo *TA_PLUS_DM_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_PLUS_DM_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14, + NULL +}; + +DEF_FUNCTION( PLUS_DM, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Plus Directional Movement", /* hint */ + "PlusDM", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); + +/* PLUS_DM END */ + +/* PPO BEGIN */ +static const TA_InputParameterInfo *TA_PPO_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_PPO_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_PPO_OptInputs[] = +{ &TA_DEF_UI_Fast_Period, + &TA_DEF_UI_Slow_Period, + &TA_DEF_UI_MA_Method, + NULL +}; + +DEF_FUNCTION( PPO, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Percentage Price Oscillator", /* hint */ + "Ppo", /* CamelCase name */ + 0 /* flags */ + ); +/* PPO END */ + +#if 0 +Will be implemented later +/* PVI BEGIN */ +static const TA_InputParameterInfo *TA_PVI_Inputs[] = +{ + &TA_DEF_UI_Input_Price_CV, + NULL +}; + +static const TA_OutputParameterInfo *TA_PVI_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_PVI_OptInputs[] = +{ + NULL +}; + +DEF_FUNCTION( PVI, /* name */ + TA_GroupId_VolumeIndicators, /* groupId */ + "Positive Volume Index", /* hint */ + "Pvi", /* CamelCase name */ + 0 /* flags */ + ); + +/* PVI END */ +#endif + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableP[] = +{ + ADD_TO_TABLE(PLUS_DI), + ADD_TO_TABLE(PLUS_DM), + ADD_TO_TABLE(PPO), + /* ADD_TO_TABLE(PVI),*/ + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TablePSize = + ((sizeof(TA_DEF_TableP)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_q.c b/src/ta_abstract/tables/table_q.c new file mode 100644 index 000000000..b64342ab2 --- /dev/null +++ b/src/ta_abstract/tables/table_q.c @@ -0,0 +1,72 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'Q' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* None */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableQ[] = +{ + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableQSize = + ((sizeof(TA_DEF_TableQ)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_r.c b/src/ta_abstract/tables/table_r.c new file mode 100644 index 000000000..9d6a84645 --- /dev/null +++ b/src/ta_abstract/tables/table_r.c @@ -0,0 +1,206 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'R' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* ROC BEGIN */ +static const TA_InputParameterInfo *TA_ROC_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_ROC_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ROC_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_10, + NULL +}; + +DEF_FUNCTION( ROC, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Rate of change : ((price/prevPrice)-1)*100", /* hint */ + "Roc", /* CamelCase name */ + 0 /* flags */ + ); +/* ROC END */ + +/* ROCP BEGIN */ +static const TA_InputParameterInfo *TA_ROCP_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_ROCP_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ROCP_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_10, + NULL +}; + +DEF_FUNCTION( ROCP, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Rate of change Percentage: (price-prevPrice)/prevPrice", /* hint */ + "RocP", /* CamelCase name */ + 0 /* flags */ + ); +/* ROCP END */ + +/* ROCR BEGIN */ +static const TA_InputParameterInfo *TA_ROCR_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_ROCR_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ROCR_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_10, + NULL +}; + +DEF_FUNCTION( ROCR, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Rate of change ratio: (price/prevPrice)", /* hint */ + "RocR", /* CamelCase name */ + 0 /* flags */ + ); +/* ROCR END */ + +/* ROCR100 BEGIN */ +static const TA_InputParameterInfo *TA_ROCR100_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_ROCR100_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ROCR100_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_10, + NULL +}; + +DEF_FUNCTION( ROCR100, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Rate of change ratio 100 scale: (price/prevPrice)*100", /* hint */ + "RocR100", /* CamelCase name */ + 0 /* flags */ + ); +/* ROCR100 END */ + +/* RSI BEGIN */ +static const TA_InputParameterInfo *TA_RSI_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_RSI_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_RSI_OptInputs[] = +{ + &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( RSI, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Relative Strength Index", /* hint */ + "Rsi", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* RSI END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableR[] = +{ + ADD_TO_TABLE(ROC), + ADD_TO_TABLE(ROCP), + ADD_TO_TABLE(ROCR), + ADD_TO_TABLE(ROCR100), + ADD_TO_TABLE(RSI), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableRSize = + ((sizeof(TA_DEF_TableR)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_s.c b/src/ta_abstract/tables/table_s.c new file mode 100644 index 000000000..bced2d9b9 --- /dev/null +++ b/src/ta_abstract/tables/table_s.c @@ -0,0 +1,630 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'S' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* SAR BEGIN */ +static const TA_RealRange TA_DEF_AccelerationFactor = +{ + 0.0, /* min */ + TA_REAL_MAX, /* max */ + 4, /* precision */ + 0.01, /* suggested start */ + 0.20, /* suggested end */ + 0.01 /* suggested increment */ +}; + +static const TA_RealRange TA_DEF_AccelerationMax = +{ + 0.0, /* min */ + TA_REAL_MAX, /* max */ + 4, /* precision */ + 0.20, /* suggested start */ + 0.40, /* suggested end */ + 0.01 /* suggested increment */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_AccelerationFactor = +{ + TA_OptInput_RealRange, /* type */ + "optInAcceleration", /* paramName */ + 0, /* flags */ + + "Acceleration Factor", /* displayName */ + (const void *)&TA_DEF_AccelerationFactor, /* dataSet */ + 0.02, /* defaultValue */ + "Acceleration Factor used up to the Maximum value", /* hint */ + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_AccelerationMaximum = +{ + TA_OptInput_RealRange, /* type */ + "optInMaximum", /* paramName */ + 0, /* flags */ + + "AF Maximum", /* displayName */ + (const void *)&TA_DEF_AccelerationMax, /* dataSet */ + 0.20, /* defaultValue */ + "Acceleration Factor Maximum value", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_InputParameterInfo *TA_SAR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HL, + NULL +}; + +static const TA_OutputParameterInfo *TA_SAR_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_SAR_OptInputs[] = +{ &TA_DEF_UI_D_AccelerationFactor, + &TA_DEF_UI_D_AccelerationMaximum, + NULL +}; + +DEF_FUNCTION( SAR, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Parabolic SAR", /* hint */ + "Sar", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); + +/* SAR END */ + +/* SAREXT BEGIN */ +static const TA_RealRange TA_DEF_AccelerationInit = +{ + 0.0, /* min */ + TA_REAL_MAX, /* max */ + 4, /* precision */ + 0.01, /* suggested start */ + 0.19, /* suggested end */ + 0.01 /* suggested increment */ +}; + +static const TA_RealRange TA_DEF_SARStartValue = +{ + TA_REAL_MIN, /* min */ + TA_REAL_MAX, /* max */ + 4, /* precision */ + 0, /* suggested start */ + 0, /* suggested end */ + 0 /* suggested increment */ +}; + +static const TA_RealRange TA_DEF_SAROffsetOnReverse = +{ + 0.0, /* min */ + TA_REAL_MAX, /* max */ + 4, /* precision */ + 0.01, /* suggested start */ + 0.15, /* suggested end */ + 0.01 /* suggested increment */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_StartValue = +{ + TA_OptInput_RealRange, /* type */ + "optInStartValue", /* paramName */ + 0, /* flags */ + + "Start Value", /* displayName */ + (const void *)&TA_DEF_SARStartValue, /* dataSet */ + 0.0, /* defaultValue */ + "Start value and direction. 0 for Auto, >0 for Long, <0 for Short", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_OffsetOnReverse = +{ + TA_OptInput_RealRange, /* type */ + "optInOffsetOnReverse", /* paramName */ + 0, /* flags */ + + "Offset on Reverse", /* displayName */ + (const void *)&TA_DEF_SAROffsetOnReverse, /* dataSet */ + 0.0, /* defaultValue */ + "Percent offset added/removed to initial stop on short/long reversal", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_AccelerationInitLong = +{ + TA_OptInput_RealRange, /* type */ + "optInAccelerationInitLong", /* paramName */ + 0, /* flags */ + + "AF Init Long", /* displayName */ + (const void *)&TA_DEF_AccelerationInit, /* dataSet */ + 0.02, /* defaultValue */ + "Acceleration Factor initial value for the Long direction", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_AccelerationLong = +{ + TA_OptInput_RealRange, /* type */ + "optInAccelerationLong", /* paramName */ + 0, /* flags */ + + "AF Long", /* displayName */ + (const void *)&TA_DEF_AccelerationFactor, /* dataSet */ + 0.02, /* defaultValue */ + "Acceleration Factor for the Long direction", /* hint */ + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_AccelerationMaxLong = +{ + TA_OptInput_RealRange, /* type */ + "optInAccelerationMaxLong", /* paramName */ + 0, /* flags */ + + "AF Max Long", /* displayName */ + (const void *)&TA_DEF_AccelerationMax, /* dataSet */ + 0.20, /* defaultValue */ + "Acceleration Factor maximum value for the Long direction", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_AccelerationInitShort = +{ + TA_OptInput_RealRange, /* type */ + "optInAccelerationInitShort", /* paramName */ + 0, /* flags */ + + "AF Init Short", /* displayName */ + (const void *)&TA_DEF_AccelerationInit, /* dataSet */ + 0.02, /* defaultValue */ + "Acceleration Factor initial value for the Short direction", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_AccelerationShort = +{ + TA_OptInput_RealRange, /* type */ + "optInAccelerationShort", /* paramName */ + 0, /* flags */ + + "AF Short", /* displayName */ + (const void *)&TA_DEF_AccelerationFactor, /* dataSet */ + 0.02, /* defaultValue */ + "Acceleration Factor for the Short direction", /* hint */ + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_D_AccelerationMaxShort = +{ + TA_OptInput_RealRange, /* type */ + "optInAccelerationMaxShort", /* paramName */ + 0, /* flags */ + + "AF Max Short", /* displayName */ + (const void *)&TA_DEF_AccelerationMax, /* dataSet */ + 0.20, /* defaultValue */ + "Acceleration Factor maximum value for the Short direction", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_InputParameterInfo *TA_SAREXT_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HL, + NULL +}; + +static const TA_OutputParameterInfo *TA_SAREXT_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_SAREXT_OptInputs[] = +{ &TA_DEF_UI_D_StartValue, + &TA_DEF_UI_D_OffsetOnReverse, + &TA_DEF_UI_D_AccelerationInitLong, + &TA_DEF_UI_D_AccelerationLong, + &TA_DEF_UI_D_AccelerationMaxLong, + &TA_DEF_UI_D_AccelerationInitShort, + &TA_DEF_UI_D_AccelerationShort, + &TA_DEF_UI_D_AccelerationMaxShort, + NULL +}; + +DEF_FUNCTION( SAREXT, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Parabolic SAR - Extended", /* hint */ + "SarExt", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); + +/* SAREXT END */ + + +/* SIN BEGIN */ +DEF_MATH_UNARY_OPERATOR( SIN, "Vector Trigonometric Sin", "Sin" ) +/* SIN END */ + +/* SINH BEGIN */ +DEF_MATH_UNARY_OPERATOR( SINH, "Vector Trigonometric Sinh", "Sinh" ) +/* SINH END */ + +/* SMA BEGIN */ +static const TA_InputParameterInfo *TA_SMA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_SMA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_SMA_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( SMA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Simple Moving Average", /* hint */ + "Sma", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); + +/* SMA END */ + +/* SQRT BEGIN */ +DEF_MATH_UNARY_OPERATOR( SQRT, "Vector Square Root", "Sqrt" ) +/* SQRT END */ + +/* SUB BEGIN */ +DEF_MATH_BINARY_OPERATOR( SUB, "Vector Arithmetic Substraction", "Sub" ) +/* SUB END */ + +/* SUM BEGIN */ +static const TA_InputParameterInfo *TA_SUM_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_SUM_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_SUM_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( SUM, /* name */ + TA_GroupId_MathOperators, /* groupId */ + "Summation", /* hint */ + "Sum", /* CamelCase name */ + 0 /* flags */ + ); +/* SUM END */ + +/* STDDEV BEGIN */ +static const TA_InputParameterInfo *TA_STDDEV_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_STDDEV_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_STDDEV_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_5_MINIMUM2, + &TA_DEF_UI_NbDeviation, + NULL +}; + +DEF_FUNCTION( STDDEV, /* name */ + TA_GroupId_Statistic, /* groupId */ + "Standard Deviation", /* hint */ + "StdDev", /* CamelCase name */ + 0 /* flags */ + ); +/* STDDEV END */ + +/* STOCH BEGIN */ +static const TA_OptInputParameterInfo TA_DEF_UI_FastK_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInFastK_Period", /* paramName */ + 0, /* flags */ + + "Fast-K Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 5, /* defaultValue */ + "Time period for building the Fast-K line", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_SlowK_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInSlowK_Period", /* paramName */ + 0, /* flags */ + + "Slow-K Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 3, /* defaultValue */ + "Smoothing for making the Slow-K line. Usually set to 3", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_OptInputParameterInfo TA_DEF_UI_SlowD_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInSlowD_Period", /* paramName */ + 0, /* flags */ + + "Slow-D Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 3, /* defaultValue */ + "Smoothing for making the Slow-D line", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_SlowK_MAType = +{ + TA_OptInput_IntegerList, /* type */ + "optInSlowK_MAType", /* paramName */ + 0, /* flags */ + + "Slow-K MA", /* displayName */ + (const void *)&TA_MA_TypeList, /* dataSet */ + 0, /* defaultValue = simple average */ + "Type of Moving Average for Slow-K", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_SlowD_MAType = +{ + TA_OptInput_IntegerList, /* type */ + "optInSlowD_MAType", /* paramName */ + 0, /* flags */ + + "Slow-D MA", /* displayName */ + (const void *)&TA_MA_TypeList, /* dataSet */ + 0, /* defaultValue = simple average */ + "Type of Moving Average for Slow-D", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OutputParameterInfo TA_DEF_UI_Output_SlowK = + { TA_Output_Real, "outSlowK", TA_OUT_DASH_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_SlowD = + { TA_Output_Real, "outSlowD", TA_OUT_DASH_LINE }; + +static const TA_InputParameterInfo *TA_STOCH_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_STOCH_Outputs[] = +{ + &TA_DEF_UI_Output_SlowK, + &TA_DEF_UI_Output_SlowD, + NULL +}; + +static const TA_OptInputParameterInfo *TA_STOCH_OptInputs[] = +{ &TA_DEF_UI_FastK_Period, + &TA_DEF_UI_SlowK_Period, + &TA_DEF_UI_SlowK_MAType, + &TA_DEF_UI_SlowD_Period, + &TA_DEF_UI_SlowD_MAType, + NULL +}; + +DEF_FUNCTION( STOCH, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Stochastic", /* hint */ + "Stoch", /* CamelCase name */ + 0 /* flags */ + ); +/* STOCH END */ + +/* STOCHF BEGIN */ +static const TA_OptInputParameterInfo TA_DEF_UI_FastD_Period = +{ + TA_OptInput_IntegerRange, /* type */ + "optInFastD_Period", /* paramName */ + 0, /* flags */ + + "Fast-D Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 3, /* defaultValue */ + "Smoothing for making the Fast-D line. Usually set to 3", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_FastD_MAType = +{ + TA_OptInput_IntegerList, /* type */ + "optInFastD_MAType", /* paramName */ + 0, /* flags */ + + "Fast-D MA", /* displayName */ + (const void *)&TA_MA_TypeList, /* dataSet */ + 0, /* defaultValue = simple average */ + "Type of Moving Average for Fast-D", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OutputParameterInfo TA_DEF_UI_Output_FastK = + { TA_Output_Real, "outFastK", TA_OUT_LINE }; + +const TA_OutputParameterInfo TA_DEF_UI_Output_FastD = + { TA_Output_Real, "outFastD", TA_OUT_LINE }; + +static const TA_InputParameterInfo *TA_STOCHF_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_STOCHF_Outputs[] = +{ + &TA_DEF_UI_Output_FastK, + &TA_DEF_UI_Output_FastD, + NULL +}; + +static const TA_OptInputParameterInfo *TA_STOCHF_OptInputs[] = +{ &TA_DEF_UI_FastK_Period, + &TA_DEF_UI_FastD_Period, + &TA_DEF_UI_FastD_MAType, + NULL +}; + +DEF_FUNCTION( STOCHF, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Stochastic Fast", /* hint */ + "StochF", /* CamelCase name */ + 0 /* flags */ + ); +/* STOCHF END */ + +/* STOCHRSI BEGIN */ +static const TA_InputParameterInfo *TA_STOCHRSI_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_STOCHRSI_Outputs[] = +{ + &TA_DEF_UI_Output_FastK, + &TA_DEF_UI_Output_FastD, + NULL +}; + +static const TA_OptInputParameterInfo *TA_STOCHRSI_OptInputs[] = +{ + &TA_DEF_UI_TimePeriod_14_MINIMUM2, + &TA_DEF_UI_FastK_Period, + &TA_DEF_UI_FastD_Period, + &TA_DEF_UI_FastD_MAType, + NULL +}; + +DEF_FUNCTION( STOCHRSI, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Stochastic Relative Strength Index", /* hint */ + "StochRsi", /* CamelCase name */ + TA_FUNC_FLG_UNST_PER /* flags */ + ); + +/* STOCHRSI END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableS[] = +{ + ADD_TO_TABLE(SAR), + ADD_TO_TABLE(SAREXT), + ADD_TO_TABLE(SIN), + ADD_TO_TABLE(SINH), + ADD_TO_TABLE(SMA), + ADD_TO_TABLE(SQRT), + ADD_TO_TABLE(STDDEV), + ADD_TO_TABLE(STOCH), + ADD_TO_TABLE(STOCHF), + ADD_TO_TABLE(STOCHRSI), + ADD_TO_TABLE(SUB), + ADD_TO_TABLE(SUM), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableSSize = + ((sizeof(TA_DEF_TableS)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_t.c b/src/ta_abstract/tables/table_t.c new file mode 100644 index 000000000..6dbef0fd6 --- /dev/null +++ b/src/ta_abstract/tables/table_t.c @@ -0,0 +1,277 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'T' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* T3 BEGIN */ +static const TA_OptInputParameterInfo TA_DEF_UI_VFactor = +{ + TA_OptInput_RealRange, /* type */ + "optInVFactor", /* paramName */ + 0, /* flags */ + + "Volume Factor", /* displayName */ + (const void *)&TA_DEF_ZeroToOne, /* dataSet */ + 0.7, /* defaultValue */ + "Volume Factor", /* hint */ + NULL /* CamelCase name */ +}; + +static const TA_InputParameterInfo *TA_T3_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_T3_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_T3_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_5_MINIMUM2, + &TA_DEF_UI_VFactor, + NULL +}; + +DEF_FUNCTION( T3, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Triple Exponential Moving Average (T3)", /* hint */ + "T3", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP|TA_FUNC_FLG_UNST_PER /* flags */ + ); +/* T3 END */ + +/* TAN BEGIN */ +DEF_MATH_UNARY_OPERATOR( TAN, "Vector Trigonometric Tan", "Tan" ) +/* TAN END */ + +/* TANH BEGIN */ +DEF_MATH_UNARY_OPERATOR( TANH, "Vector Trigonometric Tanh", "Tanh" ) +/* TANH END */ + +/* TEMA BEGIN */ +static const TA_InputParameterInfo *TA_TEMA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_TEMA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_TEMA_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( TEMA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Triple Exponential Moving Average", /* hint */ + "Tema", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* TEMA END */ + +/* TRANGE BEGIN */ +static const TA_InputParameterInfo *TA_TRANGE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_TRANGE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_TRANGE_OptInputs[] = { NULL }; + +DEF_FUNCTION( TRANGE, /* name */ + TA_GroupId_VolatilityIndicators, /* groupId */ + "True Range", /* hint */ + "TrueRange", /* CamelCase name */ + 0 /* flags */ + ); +/* TRANGE END */ + +/* TRIMA BEGIN */ +static const TA_InputParameterInfo *TA_TRIMA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_TRIMA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_TRIMA_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( TRIMA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Triangular Moving Average", /* hint */ + "Trima", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* TRIMA END */ + +/* TRIX BEGIN */ +static const TA_InputParameterInfo *TA_TRIX_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_TRIX_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_TRIX_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30, + NULL +}; + +DEF_FUNCTION( TRIX, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "1-day Rate-Of-Change (ROC) of a Triple Smooth EMA", /* hint */ + "Trix", /* CamelCase name */ + 0 /* flags */ + ); +/* TRIX END */ + +/* TSF BEGIN */ +static const TA_InputParameterInfo *TA_TSF_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_TSF_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_TSF_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( TSF, /* name */ + TA_GroupId_Statistic, /* groupId */ + "Time Series Forecast",/* hint */ + "Tsf", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* TSF END */ + +/* TYPPRICE BEGIN */ +static const TA_InputParameterInfo *TA_TYPPRICE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_TYPPRICE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_TYPPRICE_OptInputs[] = { NULL }; + +DEF_FUNCTION( TYPPRICE, /* name */ + TA_GroupId_PriceTransform, /* groupId */ + "Typical Price", /* hint */ + "TypPrice", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* TYPPRICE END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableT[] = +{ + ADD_TO_TABLE(T3), + ADD_TO_TABLE(TAN), + ADD_TO_TABLE(TANH), + ADD_TO_TABLE(TEMA), + ADD_TO_TABLE(TRANGE), + ADD_TO_TABLE(TRIMA), + ADD_TO_TABLE(TRIX), + ADD_TO_TABLE(TSF), + ADD_TO_TABLE(TYPPRICE), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableTSize = + ((sizeof(TA_DEF_TableT)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_u.c b/src/ta_abstract/tables/table_u.c new file mode 100644 index 000000000..1a7856764 --- /dev/null +++ b/src/ta_abstract/tables/table_u.c @@ -0,0 +1,142 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'U' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* ULTOSC BEGIN */ +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_7_PER1 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod1", /* paramName */ + 0, /* flags */ + + "First Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 7, /* defaultValue */ + "Number of bars for 1st period.", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_14_PER2 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod2", /* paramName */ + 0, /* flags */ + + "Second Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 14, /* defaultValue */ + "Number of bars fro 2nd period", /* hint */ + + NULL /* CamelCase name */ +}; + +const TA_OptInputParameterInfo TA_DEF_UI_TimePeriod_28_PER3 = +{ + TA_OptInput_IntegerRange, /* type */ + "optInTimePeriod3", /* paramName */ + 0, /* flags */ + + "Third Period", /* displayName */ + (const void *)&TA_DEF_TimePeriod_Positive, /* dataSet */ + 28, /* defaultValue */ + "Number of bars for 3rd period", /* hint */ + + NULL /* CamelCase name */ +}; + +static const TA_InputParameterInfo *TA_ULTOSC_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_ULTOSC_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_ULTOSC_OptInputs[] = +{ + &TA_DEF_UI_TimePeriod_7_PER1, + &TA_DEF_UI_TimePeriod_14_PER2, + &TA_DEF_UI_TimePeriod_28_PER3, + NULL +}; + +DEF_FUNCTION( ULTOSC, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Ultimate Oscillator", /* hint */ + "UltOsc", /* CamelCase name */ + 0 /* flags */ + ); +/* ULTOSC END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableU[] = +{ + ADD_TO_TABLE(ULTOSC), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableUSize = + ((sizeof(TA_DEF_TableU)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_v.c b/src/ta_abstract/tables/table_v.c new file mode 100644 index 000000000..e49fa92e2 --- /dev/null +++ b/src/ta_abstract/tables/table_v.c @@ -0,0 +1,98 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'V' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* VAR BEGIN */ +static const TA_InputParameterInfo *TA_VAR_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_VAR_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_VAR_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_5, + &TA_DEF_UI_NbDeviation, + NULL +}; + +DEF_FUNCTION( VAR, /* name */ + TA_GroupId_Statistic, /* groupId */ + "Variance", /* hint */ + "Variance", /* CamelCase name */ + 0 /* flags */ + ); +/* VAR END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableV[] = +{ + ADD_TO_TABLE(VAR), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableVSize = + ((sizeof(TA_DEF_TableV)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_w.c b/src/ta_abstract/tables/table_w.c new file mode 100644 index 000000000..266659086 --- /dev/null +++ b/src/ta_abstract/tables/table_w.c @@ -0,0 +1,149 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'W' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* WCL BEGIN */ +static const TA_InputParameterInfo *TA_WCLPRICE_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_WCLPRICE_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_WCLPRICE_OptInputs[] = { NULL }; + +DEF_FUNCTION( WCLPRICE, /* name */ + TA_GroupId_PriceTransform, /* groupId */ + "Weighted Close Price", /* hint */ + "WclPrice", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); +/* WCL END */ + +/* WILLR BEGIN */ +static const TA_InputParameterInfo *TA_WILLR_Inputs[] = +{ + &TA_DEF_UI_Input_Price_HLC, + NULL +}; + +static const TA_OutputParameterInfo *TA_WILLR_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_WILLR_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_14_MINIMUM2, + NULL +}; + +DEF_FUNCTION( WILLR, /* name */ + TA_GroupId_MomentumIndicators, /* groupId */ + "Williams' %R", /* hint */ + "WillR", /* CamelCase name */ + 0 /* flags */ + ); +/* WILLR END */ + +/* WMA BEGIN */ +static const TA_InputParameterInfo *TA_WMA_Inputs[] = +{ + &TA_DEF_UI_Input_Real, + NULL +}; + +static const TA_OutputParameterInfo *TA_WMA_Outputs[] = +{ + &TA_DEF_UI_Output_Real, + NULL +}; + +static const TA_OptInputParameterInfo *TA_WMA_OptInputs[] = +{ &TA_DEF_UI_TimePeriod_30_MINIMUM2, + NULL +}; + +DEF_FUNCTION( WMA, /* name */ + TA_GroupId_OverlapStudies, /* groupId */ + "Weighted Moving Average", /* hint */ + "Wma", /* CamelCase name */ + TA_FUNC_FLG_OVERLAP /* flags */ + ); + +/* WMA END */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableW[] = +{ + ADD_TO_TABLE(WCLPRICE), + ADD_TO_TABLE(WILLR), + ADD_TO_TABLE(WMA), + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableWSize = + ((sizeof(TA_DEF_TableW)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_x.c b/src/ta_abstract/tables/table_x.c new file mode 100644 index 000000000..addb74d1a --- /dev/null +++ b/src/ta_abstract/tables/table_x.c @@ -0,0 +1,72 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'X' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* None */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableX[] = +{ + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableXSize = + ((sizeof(TA_DEF_TableX)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_y.c b/src/ta_abstract/tables/table_y.c new file mode 100644 index 000000000..fe1679ad4 --- /dev/null +++ b/src/ta_abstract/tables/table_y.c @@ -0,0 +1,72 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'Y' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* None */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableY[] = +{ + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableYSize = + ((sizeof(TA_DEF_TableY)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/tables/table_z.c b/src/ta_abstract/tables/table_z.c new file mode 100644 index 000000000..de871a1f5 --- /dev/null +++ b/src/ta_abstract/tables/table_z.c @@ -0,0 +1,72 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/********************************************************************* + * This file contains only TA functions starting with the letter 'Z' * + *********************************************************************/ +#include +#include "ta_abstract.h" +#include "ta_def_ui.h" + +/* Follow the 3 steps defined below for adding a new TA Function to this + * file. + */ + +/**************************************************************************** + * Step 1 - Define here the interface to your TA functions with + * the macro DEF_FUNCTION. + * + ****************************************************************************/ + +/* None */ + +/**************************************************************************** + * Step 2 - Add your TA function to the table. + * Keep in alphabetical order. Must be NULL terminated. + ****************************************************************************/ +const TA_FuncDef *TA_DEF_TableZ[] = +{ + NULL +}; + + +/* Do not modify the following line. */ +const unsigned int TA_DEF_TableZSize = + ((sizeof(TA_DEF_TableZ)/sizeof(TA_FuncDef *))-1); + + +/**************************************************************************** + * Step 3 - Make sure "gen_code" is executed for generating all other + * source files derived from this one. + * You can then re-compile the library as usual and you are done! + ****************************************************************************/ diff --git a/src/ta_abstract/templates/CoreAnnotated.java.template b/src/ta_abstract/templates/CoreAnnotated.java.template new file mode 100644 index 000000000..c563be53a --- /dev/null +++ b/src/ta_abstract/templates/CoreAnnotated.java.template @@ -0,0 +1,69 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* DO NOT MODIFY this file. + * This file is automatically generated by gen_code. + * + * If you are not re-generating the java code (which is most + * likely the case), just ignore this file. + */ + +package com.tictactec.ta.lib; + +import com.tictactec.ta.lib.MAType; +import com.tictactec.ta.lib.MInteger; +import com.tictactec.ta.lib.RetCode; +import com.tictactec.ta.lib.Core; +import com.tictactec.ta.lib.meta.annotation.FuncFlags; +import com.tictactec.ta.lib.meta.annotation.FuncInfo; +import com.tictactec.ta.lib.meta.annotation.InputFlags; +import com.tictactec.ta.lib.meta.annotation.InputParameterInfo; +import com.tictactec.ta.lib.meta.annotation.InputParameterType; +import com.tictactec.ta.lib.meta.annotation.IntegerList; +import com.tictactec.ta.lib.meta.annotation.IntegerRange; +import com.tictactec.ta.lib.meta.annotation.OptInputParameterInfo; +import com.tictactec.ta.lib.meta.annotation.OptInputParameterType; +import com.tictactec.ta.lib.meta.annotation.OutputFlags; +import com.tictactec.ta.lib.meta.annotation.OutputParameterInfo; +import com.tictactec.ta.lib.meta.annotation.OutputParameterType; +import com.tictactec.ta.lib.meta.annotation.RealRange; + +public class CoreAnnotated extends Core { + +%%%GENCODE%%% + +} + +/*************** + * End of File * + ***************/ diff --git a/src/ta_abstract/templates/Makefile.am.template b/src/ta_abstract/templates/Makefile.am.template new file mode 100644 index 000000000..73de5e187 --- /dev/null +++ b/src/ta_abstract/templates/Makefile.am.template @@ -0,0 +1,13 @@ + +noinst_LTLIBRARIES = libta_func.la +AM_CPPFLAGS = -I../ta_common/ + +libta_func_la_SOURCES = ta_utility.c \ +%%%GENCODE%%% + +libta_func_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) + +libta_funcdir=$(includedir)/ta-lib/ +libta_func_HEADERS = ../../include/ta_defs.h \ + ../../include/ta_libc.h \ + ../../include/ta_func.h diff --git a/src/ta_abstract/templates/excel_glue.c.template b/src/ta_abstract/templates/excel_glue.c.template new file mode 100644 index 000000000..b82f0c15c --- /dev/null +++ b/src/ta_abstract/templates/excel_glue.c.template @@ -0,0 +1,45 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* DO NOT MODIFY this file. + * This file is automatically generated by gen_code. + * + * If you are not re-building the excel library (which is most + * likely the case), just ignore this file. + */ + +%%%GENCODE%%% + +/*************** + * End of File * + ***************/ diff --git a/src/ta_abstract/templates/ta_frame.c.template b/src/ta_abstract/templates/ta_frame.c.template new file mode 100644 index 000000000..0c1dec33c --- /dev/null +++ b/src/ta_abstract/templates/ta_frame.c.template @@ -0,0 +1,63 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Note: This file is generated by gencode, do not + * modify directly. + */ + +/* The function define in this file allows to have a consistent + * framework for calling all the TA function through + * the TA_CallFunc mechanism. + * + * See "ta_abstract.h" + */ + +#ifndef TA_FUNC_H + #include "ta_func.h" +#endif + +#ifndef TA_FRAME_PRIV_H + #include "ta_frame_priv.h" +#endif + +#ifndef TA_FRAME_H + #include "ta_frame.h" +#endif + +/* NEVER CALL directly these functions! Use TA_CallFunc. */ + +%%%GENCODE%%% + +/***************/ +/* End of File */ +/***************/ diff --git a/src/ta_abstract/templates/ta_frame.h.template b/src/ta_abstract/templates/ta_frame.h.template new file mode 100644 index 000000000..64ba7a0ae --- /dev/null +++ b/src/ta_abstract/templates/ta_frame.h.template @@ -0,0 +1,60 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TA_FRAME_H +#define TA_FRAME_H + +/* Note: This file is generated by gencode, do not + * modify directly. + */ + +/* The function define in this file allows to call a TA + * function through the TA_CallFunc mechanism. + */ + +#ifndef TA_COMMON_H + #include "ta_common.h" +#endif + +#ifndef TA_FRAME_PRIV_H + #include "ta_frame_priv.h" +#endif + + +%%%GENCODE%%% + +#endif + +/***************/ +/* End of File */ +/***************/ diff --git a/src/ta_abstract/templates/ta_func.h.template b/src/ta_abstract/templates/ta_func.h.template new file mode 100644 index 000000000..f93d09461 --- /dev/null +++ b/src/ta_abstract/templates/ta_func.h.template @@ -0,0 +1,66 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TA_FUNC_H +#define TA_FUNC_H + +#ifndef TA_COMMON_H + #include "ta_common.h" +#endif + +/* This header contains the prototype of all the Technical Analysis + * function provided by TA-LIB. + */ + +/* TA-LIB Developer Note: Do not modify this file, it is automaticaly + * generated by gen_code. + */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef TA_DEFS_H + #include "ta_defs.h" +#endif + +%%%GENCODE%%% + +#ifdef __cplusplus +} +#endif + +#endif + +/***************/ +/* End of File */ +/***************/ + diff --git a/src/ta_abstract/templates/ta_func.swg.template b/src/ta_abstract/templates/ta_func.swg.template new file mode 100644 index 000000000..3346210d5 --- /dev/null +++ b/src/ta_abstract/templates/ta_func.swg.template @@ -0,0 +1,45 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* DO NOT MODIFY this file. + * This file is automatically generated by gen_code. + * + * If you are not re-building an interface with SWIG (which is most + * likely the case), just ignore this file. + */ + +%%%GENCODE%%% + +/*************** + * End of File * + ***************/ diff --git a/src/ta_abstract/templates/ta_func_api.c.template b/src/ta_abstract/templates/ta_func_api.c.template new file mode 100644 index 000000000..689aefc26 --- /dev/null +++ b/src/ta_abstract/templates/ta_func_api.c.template @@ -0,0 +1,55 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Important: This file is automatically generated by gen_code. + * Any modification will be lost on next execution + * of gen_code. + * + * This file is a binary representation of the func_api.xml file. + */ + +#include "ta_abstract.h" + +static const char TA_FunctionDescriptionXMLArray[] = +{ +%%%GENCODE%%% +}; + +const char *TA_FunctionDescriptionXML() +{ + return TA_FunctionDescriptionXMLArray; +} + +/***************/ +/* End of File */ +/***************/ diff --git a/src/ta_abstract/templates/ta_group_idx.c.template b/src/ta_abstract/templates/ta_group_idx.c.template new file mode 100644 index 000000000..cfaba0015 --- /dev/null +++ b/src/ta_abstract/templates/ta_group_idx.c.template @@ -0,0 +1,56 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Important: This file is automatically generated by gen_code. + * Any modification will be lost on next execution + * of gen_code. + * + * The goal of this file is to build the following global + * constant: + * TA_PerGroupFuncDef + * TA_PerGroupSize + * TA_TotalNbFunction + * + * These constant allows mainly to speed optimize functionality related to + * sequential access to TA_DefFunc by TA_GroupId (see ta_abstract.c) + */ +#include +#include "ta_def_ui.h" +#include "ta_abstract.h" + +%%%GENCODE%%% + + +/***************/ +/* End of File */ +/***************/ diff --git a/src/ta_abstract/templates/ta_java_defs.h.template b/src/ta_abstract/templates/ta_java_defs.h.template new file mode 100644 index 000000000..b9cbdb6a7 --- /dev/null +++ b/src/ta_abstract/templates/ta_java_defs.h.template @@ -0,0 +1,45 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* DO NOT MODIFY this file. + * This file is automatically generated by gen_code. + * + * If you are not re-generating the java code (which is most + * likely the case), just ignore this file. + */ + +%%%GENCODE%%% + +/*************** + * End of File * + ***************/ diff --git a/src/ta_abstract/templates/ta_retcode.c.template b/src/ta_abstract/templates/ta_retcode.c.template new file mode 100644 index 000000000..5c2f507c8 --- /dev/null +++ b/src/ta_abstract/templates/ta_retcode.c.template @@ -0,0 +1,92 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Important: This file is automatically generated by the utility gen_code. + * Any modification will be lost on next execution of gen_code. + * + * The goal of this file is to provide the functionality TA_SetRetCodeInfo. + * + * This function is a convenient way for the user to translate a TA_RetCode into + * a human readable string. + */ +#include + +typedef struct +{ + TA_RetCode retCode; + const char * const enumStr; + const char * const infoStr; +} TA_InternalRetCodeInfo; + +static TA_InternalRetCodeInfo retCodeInfoTable[] = { +%%%GENCODE%%% + {(TA_RetCode)0xFFFF,"TA_UNKNOWN_ERR","Unknown Error"} +}; + +#define NB_RET_CODE_INFO (sizeof(retCodeInfoTable)/sizeof(TA_InternalRetCodeInfo)) + +void TA_SetRetCodeInfo( TA_RetCode theRetCode, TA_RetCodeInfo *retCodeInfo ) +{ + unsigned int i; + + /* Trap internal error code */ + if( (theRetCode >= 5000) && (theRetCode <= 5999) ) + { + retCodeInfo->enumStr = "TA_INTERNAL_ERROR"; + retCodeInfo->infoStr = "Unexpected Internal Error - Contact TA-Lib.org"; + return; + } + + /* Check among all the error code defined in ta_common.h */ + for( i=0; i < (NB_RET_CODE_INFO-1); i++ ) + { + if( theRetCode == retCodeInfoTable[i].retCode ) + { + /* Error code found. */ + retCodeInfo->enumStr = retCodeInfoTable[i].enumStr; + retCodeInfo->infoStr = retCodeInfoTable[i].infoStr; + return; + } + } + + /* Error code not found. */ + + /* "TA_UNKNOWN_ERR" is ALWAYS the last entry in the table. */ + retCodeInfo->enumStr = retCodeInfoTable[i].enumStr; + retCodeInfo->infoStr = retCodeInfoTable[i].infoStr; +} + +/***************/ +/* End of File */ +/***************/ + diff --git a/src/ta_abstract/templates/ta_x.c.template b/src/ta_abstract/templates/ta_x.c.template new file mode 100644 index 000000000..5b227f168 --- /dev/null +++ b/src/ta_abstract/templates/ta_x.c.template @@ -0,0 +1,84 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier (Replace when you are the original author) + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * XXXXXX MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +%%%GENCODE%%% +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +%%%GENCODE%%% +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +%%%GENCODE%%% +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +%%%GENCODE%%% +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNbElement); + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +%%%GENCODE%%% +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_common/Makefile.am b/src/ta_common/Makefile.am new file mode 100644 index 000000000..945449020 --- /dev/null +++ b/src/ta_common/Makefile.am @@ -0,0 +1,15 @@ + +noinst_LTLIBRARIES = libta_common.la +AM_CPPFLAGS = -I../ta_common/ + +libta_common_la_SOURCES = ta_global.c \ + ta_retcode.c \ + ta_version.c + +libta_common_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) + +libta_commondir=$(includedir)/ta-lib/ +libta_common_HEADERS = ../../include/ta_defs.h \ + ../../include/ta_libc.h \ + ../../include/ta_common.h + diff --git a/src/ta_common/Makefile.in b/src/ta_common/Makefile.in new file mode 100644 index 000000000..bcd35b976 --- /dev/null +++ b/src/ta_common/Makefile.in @@ -0,0 +1,479 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/ta_common +DIST_COMMON = $(libta_common_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/ta_config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libta_common_la_LIBADD = +am_libta_common_la_OBJECTS = ta_global.lo ta_retcode.lo ta_version.lo +libta_common_la_OBJECTS = $(am_libta_common_la_OBJECTS) +libta_common_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libta_common_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir)/include@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libta_common_la_SOURCES) +DIST_SOURCES = $(libta_common_la_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libta_commondir)" +libta_commonHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(libta_common_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TALIB_LIBRARY_VERSION = @TALIB_LIBRARY_VERSION@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libta_common.la +AM_CPPFLAGS = -I../ta_common/ +libta_common_la_SOURCES = ta_global.c \ + ta_retcode.c \ + ta_version.c + +libta_common_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) +libta_commondir = $(includedir)/ta-lib/ +libta_common_HEADERS = ../../include/ta_defs.h \ + ../../include/ta_libc.h \ + ../../include/ta_common.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ta_common/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/ta_common/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libta_common.la: $(libta_common_la_OBJECTS) $(libta_common_la_DEPENDENCIES) + $(libta_common_la_LINK) $(libta_common_la_OBJECTS) $(libta_common_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_global.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_retcode.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_version.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libta_commonHEADERS: $(libta_common_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(libta_commondir)" || $(MKDIR_P) "$(DESTDIR)$(libta_commondir)" + @list='$(libta_common_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(libta_commonHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libta_commondir)/$$f'"; \ + $(libta_commonHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libta_commondir)/$$f"; \ + done + +uninstall-libta_commonHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libta_common_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libta_commondir)/$$f'"; \ + rm -f "$(DESTDIR)$(libta_commondir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libta_commondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-libta_commonHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libta_commonHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libta_commonHEADERS install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libta_commonHEADERS + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/ta_common/ta_global.c b/src/ta_common/ta_global.c new file mode 100644 index 000000000..33ff85f14 --- /dev/null +++ b/src/ta_common/ta_global.c @@ -0,0 +1,178 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * 082004 AC Add TA_SetCandleSettings, TA_RestoreCandleDefaultSettings + * and call to TA_RestoreCandleDefaultSettings in TA_Initialize + * 041106 MF Add prefix to theGlobals to avoid clash with other libs. + * 040707 MF Change global initialization to eliminate Mac OS X link error. + */ + +/* Description: + * Provides initialization / shutdown functionality for all modules. + */ + +/**** Headers ****/ +#include +#include +#include + +#include "ta_common.h" +#include "ta_magic_nb.h" +#include "ta_global.h" +#include "ta_func.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ + +/* The entry point for all globals */ +TA_LibcPriv ta_theGlobals = {0,{{0,0,0}},0,0,0,0,(TA_Compatibility)0,{0},{{(TA_CandleSettingType)0,(TA_RangeType)0,0,0}}}; + +TA_LibcPriv *TA_Globals = &ta_theGlobals; + +/**** Local declarations. ****/ +/* None */ + +/**** Local functions declarations. ****/ +/* None */ + +/**** Local variables definitions. ****/ +/* None */ + +/**** Global functions definitions. ****/ +TA_RetCode TA_Initialize( void ) +{ + /* Initialize the "global variable" used to manage the global + * variables of all other modules... + */ + memset( TA_Globals, 0, sizeof( TA_LibcPriv ) ); + TA_Globals->magicNb = TA_LIBC_PRIV_MAGIC_NB; + + /*** At this point, TA_Shutdown can be called to clean-up. ***/ + + /* Set the default value to global variables */ + TA_RestoreCandleDefaultSettings( TA_AllCandleSettings ); + + return TA_SUCCESS; +} + +TA_RetCode TA_Shutdown( void ) +{ + if( TA_Globals->magicNb != TA_LIBC_PRIV_MAGIC_NB ) + return TA_LIB_NOT_INITIALIZE; + + /* Initialize to all zero to make sure we invalidate that object. */ + memset( TA_Globals, 0, sizeof( TA_LibcPriv ) ); + + return TA_SUCCESS; +} + +TA_RetCode TA_SetCandleSettings( TA_CandleSettingType settingType, + TA_RangeType rangeType, + int avgPeriod, + double factor ) +{ + /*printf("setcdlset:%d ",settingType);*/ + if( settingType >= TA_AllCandleSettings ) + return TA_BAD_PARAM; + TA_Globals->candleSettings[settingType].settingType = settingType; + TA_Globals->candleSettings[settingType].rangeType = rangeType; + TA_Globals->candleSettings[settingType].avgPeriod = avgPeriod; + TA_Globals->candleSettings[settingType].factor = factor; + /*printf("cdlset: %d %d %d %f\n",TA_Globals->candleSettings[settingType].settingType,TA_Globals->candleSettings[settingType].rangeType, + TA_Globals->candleSettings[settingType].avgPeriod,TA_Globals->candleSettings[settingType].factor);*/ + return TA_SUCCESS; +} + +TA_RetCode TA_RestoreCandleDefaultSettings( TA_CandleSettingType settingType ) +{ + const TA_CandleSetting TA_CandleDefaultSettings[] = { + /* real body is long when it's longer than the average of the 10 previous candles' real body */ + { TA_BodyLong, TA_RangeType_RealBody, 10, 1.0 }, + /* real body is very long when it's longer than 3 times the average of the 10 previous candles' real body */ + { TA_BodyVeryLong, TA_RangeType_RealBody, 10, 3.0 }, + /* real body is short when it's shorter than the average of the 10 previous candles' real bodies */ + { TA_BodyShort, TA_RangeType_RealBody, 10, 1.0 }, + /* real body is like doji's body when it's shorter than 10% the average of the 10 previous candles' high-low range */ + { TA_BodyDoji, TA_RangeType_HighLow, 10, 0.1 }, + /* shadow is long when it's longer than the real body */ + { TA_ShadowLong, TA_RangeType_RealBody, 0, 1.0 }, + /* shadow is very long when it's longer than 2 times the real body */ + { TA_ShadowVeryLong, TA_RangeType_RealBody, 0, 2.0 }, + /* shadow is short when it's shorter than half the average of the 10 previous candles' sum of shadows */ + { TA_ShadowShort, TA_RangeType_Shadows, 10, 1.0 }, + /* shadow is very short when it's shorter than 10% the average of the 10 previous candles' high-low range */ + { TA_ShadowVeryShort, TA_RangeType_HighLow, 10, 0.1 }, + /* when measuring distance between parts of candles or width of gaps */ + /* "near" means "<= 20% of the average of the 5 previous candles' high-low range" */ + { TA_Near, TA_RangeType_HighLow, 5, 0.2 }, + /* when measuring distance between parts of candles or width of gaps */ + /* "far" means ">= 60% of the average of the 5 previous candles' high-low range" */ + { TA_Far, TA_RangeType_HighLow, 5, 0.6 }, + /* when measuring distance between parts of candles or width of gaps */ + /* "equal" means "<= 5% of the average of the 5 previous candles' high-low range" */ + { TA_Equal, TA_RangeType_HighLow, 5, 0.05 } + }; + + int i; + if( settingType > TA_AllCandleSettings ) + return TA_BAD_PARAM; + if( settingType == TA_AllCandleSettings ) + for( i = 0; i < TA_AllCandleSettings; ++i ) + TA_Globals->candleSettings[i] = TA_CandleDefaultSettings[i]; + else + TA_Globals->candleSettings[settingType] = TA_CandleDefaultSettings[settingType]; + return TA_SUCCESS; +} + +/**** Local functions definitions. ****/ +/* None */ + + diff --git a/src/ta_common/ta_global.h b/src/ta_common/ta_global.h new file mode 100644 index 000000000..3cdfcf653 --- /dev/null +++ b/src/ta_common/ta_global.h @@ -0,0 +1,119 @@ +#ifndef TA_GLOBAL_H +#define TA_GLOBAL_H + +#ifndef TA_COMMON_H + #include "ta_common.h" +#endif + +#ifndef TA_FUNC_H + #include "ta_func.h" +#endif + +/* TA_CandleSetting is the one setting struct */ +typedef struct { + TA_CandleSettingType settingType; + TA_RangeType rangeType; + int avgPeriod; + double factor; +} TA_CandleSetting; + +/* This interface is used exclusively INTERNALY to the TA-LIB. + * There is nothing for the end-user here ;-> + */ + +/* Provides functionality for managing global ressource + * throughout the TA-LIB. + * + * Since not all module are used/link in the application, + * the ta_common simply provides the mechanism for the module + * to optionnaly "register" its initialization/shutdown + * function. + * + * A function shall access its global variable by calling + * TA_GetGlobal. This function will appropriatly call the + * initialization function if its global are not yet initialized. + * + * The call of the init and shutdown function are guaranteed + * to be multithread protected. It is also guarantee that + * these function will always get called in alternance (in + * other word, following an initialization only a shutdown + * can get called). + */ + +typedef enum +{ + /* Module will be shutdown in the order specified here. */ + + TA_ABSTRACTION_GLOBAL_ID, + TA_FUNC_GLOBAL_ID, + TA_MEMORY_GLOBAL_ID, /* Must be last. */ + TA_NB_GLOBAL_ID +} TA_GlobalModuleId; + +typedef TA_RetCode (*TA_GlobalInitFunc) ( void **globalToAlloc ); +typedef TA_RetCode (*TA_GlobalShutdownFunc)( void *globalAllocated ); + +typedef struct +{ + const TA_GlobalModuleId id; + const TA_GlobalInitFunc init; + const TA_GlobalShutdownFunc shutdown; +} TA_GlobalControl; + +TA_RetCode TA_GetGlobal( const TA_GlobalControl * const control, + void **global ); + +/* Occasionaly, code tracing must be disable. + * Example: + * - The memory module needs to know if the tracing is + * still enabled or not when freeing memory on shutdown. + * - We do not want to recursively trace while the tracing + * function themselves gets called ;-> + */ +int TA_IsTraceEnabled( void ); +void TA_TraceEnable ( void ); +void TA_TraceDisable ( void ); + +/* If enabled by the user, use a local drive + * for configuration and/or temporary file. + * TA-LIB must NEVER assume such local drive + * is available. + */ +const char *TA_GetLocalCachePath( void ); + +typedef struct +{ + unsigned int initialize; + const TA_GlobalControl * control; + void *global; +} TA_ModuleControl; + +/* This is the hidden implementation of TA_Libc. */ +typedef struct +{ + unsigned int magicNb; /* Unique identifier of this object. */ + TA_ModuleControl moduleControl[TA_NB_GLOBAL_ID]; + + unsigned int traceEnabled; + unsigned int stdioEnabled; + FILE *stdioFile; + + const char *localCachePath; + + /* For handling the compatibility with other software */ + TA_Compatibility compatibility; + + /* For handling the unstable period of some TA function. */ + unsigned int unstablePeriod[TA_FUNC_UNST_ALL]; + + /* For handling the candlestick global settings */ + TA_CandleSetting candleSettings[TA_AllCandleSettings]; + +} TA_LibcPriv; + +/* The following global is used all over the place + * and is the entry point for all other globals. + */ +extern TA_LibcPriv *TA_Globals; + +#endif diff --git a/src/ta_common/ta_magic_nb.h b/src/ta_common/ta_magic_nb.h new file mode 100644 index 000000000..72ac109f4 --- /dev/null +++ b/src/ta_common/ta_magic_nb.h @@ -0,0 +1,31 @@ +#ifndef TA_MAGIC_NB_H +#define TA_MAGIC_NB_H + +/* Many allocated structures contains a magic number. + * + * These numbers are used solely to make sure that when a pointer is + * provided, it is really pointing on the expected type of data. + * It helps also for the detection of memory corruption. + * This mechanism is simple, but add a non-negligeable level of + * reliability at a very low cost (speed/memory wise). + */ +#define TA_FUNC_DEF_MAGIC_NB 0xA201B201 +#define TA_PARAM_HOLDER_PRIV_MAGIC_NB 0xA202B202 +#define TA_LIBC_PRIV_MAGIC_NB 0xA203B203 +#define TA_UDBASE_MAGIC_NB 0xA204B204 +#define TA_CATEGORY_TABLE_MAGIC_NB 0xA205B205 +#define TA_SYMBOL_TABLE_MAGIC_NB 0xA206B206 +#define TA_WEBPAGE_MAGIC_NB 0xA207B207 +#define TA_STREAM_MAGIC_NB 0xA208B208 +#define TA_STREAM_ACCESS_MAGIC_NB 0xA209B209 +#define TA_YAHOO_IDX_MAGIC_NB 0xA20AB20A +#define TA_STRING_TABLE_GROUP_MAGIC_NB 0xA20BB20B +#define TA_STRING_TABLE_FUNC_MAGIC_NB 0xA20CB20C +#define TA_MARKET_PAGE_MAGIC_NB 0xA20DB20D +#define TA_TRADELOGPRIV_MAGIC_NB 0xA20EB20E +#define TA_PMPRIV_MAGIC_NB 0xA20FB20F +#define TA_PMREPORT_MAGIC_NB 0xA210B210 +#define TA_TRADEREPORT_MAGIC_NB 0xA211B211 +#define TA_HISTORY_MAGIC_NB 0xA212B212 + +#endif diff --git a/src/ta_common/ta_memory.h b/src/ta_common/ta_memory.h new file mode 100644 index 000000000..b2a74bc83 --- /dev/null +++ b/src/ta_common/ta_memory.h @@ -0,0 +1,341 @@ +#ifndef TA_MEMORY_H +#define TA_MEMORY_H + +#if !defined( _MANAGED ) && !defined( _JAVA ) + #ifndef TA_COMMON_H + #include "ta_common.h" + #endif + + #include + + /* Interface macros */ + #define TA_Malloc(a) malloc(a) + #define TA_Realloc(a,b) realloc((a),(b)) + #define TA_Free(a) free(a) + + #define FREE_IF_NOT_NULL(x) { if((x)!=NULL) {TA_Free((void *)(x)); (x)=NULL;} } + +#endif /* !defined(_MANAGED) && !defined( _JAVA ) */ + + +/* ARRAY : Macros to manipulate arrays of value type. + * + * Using temporary array of double and integer are often needed for the + * TA functions. + * + * These macros allow basic operations to alloc/copy/free array of value type. + * + * These macros works in plain old C/C++, managed C++.and Java. + * + * (Use ARRAY_REF and ARRAY_INT_REF for double/integer arrays). + */ +#if defined( _MANAGED ) + #define ARRAY_VTYPE_REF(type,name) cli::array^ name + #define ARRAY_VTYPE_LOCAL(type,name,size) cli::array^ name = gcnew cli::array(size) + #define ARRAY_VTYPE_ALLOC(type,name,size) name = gcnew cli::array(size) + #define ARRAY_VTYPE_COPY(type,dest,src,size) cli::array::Copy( src, 0, dest, 0, size ) + #define ARRAY_VTYPE_MEMMOVE(type,dest,destIdx,src,srcIdx,size) cli::array::Copy( src, srcIdx, dest, destIdx, size ) + #define ARRAY_VTYPE_FREE(type,name) + #define ARRAY_VTYPE_FREE_COND(type,cond,name) +#elif defined( _JAVA ) + #define ARRAY_VTYPE_REF(type,name) type []name + #define ARRAY_VTYPE_LOCAL(type,name,size) type []name = new type[size] + #define ARRAY_VTYPE_ALLOC(type,name,size) name = new type[size] + #define ARRAY_VTYPE_COPY(type,dest,src,size) System.arraycopy(src,0,dest,0,size) + #define ARRAY_VTYPE_MEMMOVE(type,dest,destIdx,src,srcIdx,size) System.arraycopy(src,srcIdx,dest,destIdx,size) + #define ARRAY_VTYPE_FREE(type,name) + #define ARRAY_VTYPE_FREE_COND(type,cond,name) +#else + #define ARRAY_VTYPE_REF(type,name) type *name + #define ARRAY_VTYPE_LOCAL(type,name,size) type name[size] + #define ARRAY_VTYPE_ALLOC(type,name,size) name = (type *)TA_Malloc( sizeof(type)*(size)) + #define ARRAY_VTYPE_COPY(type,dest,src,size) memcpy(dest,src,sizeof(type)*(size)) + #define ARRAY_VTYPE_MEMMOVE(type,dest,destIdx,src,srcIdx,size) memmove( &dest[destIdx], &src[srcIdx], (size)*sizeof(type) ) + #define ARRAY_VTYPE_FREE(type,name) TA_Free(name) + #define ARRAY_VTYPE_FREE_COND(type,cond,name) if( cond ){ TA_Free(name); } +#endif + +/* ARRAY : Macros to manipulate arrays of double. */ +#define ARRAY_REF(name) ARRAY_VTYPE_REF(double,name) +#define ARRAY_LOCAL(name,size) ARRAY_VTYPE_LOCAL(double,name,size) +#define ARRAY_ALLOC(name,size) ARRAY_VTYPE_ALLOC(double,name,size) +#define ARRAY_COPY(dest,src,size) ARRAY_VTYPE_COPY(double,dest,src,size) +#define ARRAY_MEMMOVE(dest,destIdx,src,srcIdx,size) ARRAY_VTYPE_MEMMOVE(double,dest,destIdx,src,srcIdx,size) +#define ARRAY_FREE(name) ARRAY_VTYPE_FREE(double,name) +#define ARRAY_FREE_COND(cond,name) ARRAY_VTYPE_FREE_COND(double,cond,name) + +/* ARRAY : Macros to manipulate arrays of integer. */ +#define ARRAY_INT_REF(name) ARRAY_VTYPE_REF(int,name) +#define ARRAY_INT_LOCAL(name,size) ARRAY_VTYPE_LOCAL(int,name,size) +#define ARRAY_INT_ALLOC(name,size) ARRAY_VTYPE_ALLOC(int,name,size) +#define ARRAY_INT_COPY(dest,src,size) ARRAY_VTYPE_COPY(int,dest,src,size) +#define ARRAY_INT_MEMMOVE(dest,destIdx,src,srcIdx,size) ARRAY_VTYPE_MEMMOVE(int,dest,destIdx,src,srcIdx,size) +#define ARRAY_INT_FREE(name) ARRAY_VTYPE_FREE(int,name) +#define ARRAY_INT_FREE_COND(cond,name) ARRAY_VTYPE_FREE_COND(int,cond,name) + +/* Access to "Globals" + * + * The globals here just means that these variables are accessible from + * all technical analysis functions. + * + * Depending of the language/platform, the globals might be in reality + * a private member variable of an object... + */ +#if defined( _MANAGED ) + #define TA_GLOBALS_UNSTABLE_PERIOD(x,y) (Globals->unstablePeriod[(int)(FuncUnstId::y)]) + #define TA_GLOBALS_COMPATIBILITY (Globals->compatibility) +#elif defined( _JAVA ) + #define TA_GLOBALS_UNSTABLE_PERIOD(x,y) (this.unstablePeriod[FuncUnstId.y.ordinal()]) + #define TA_GLOBALS_COMPATIBILITY (this.compatibility) +#else + #define TA_GLOBALS_UNSTABLE_PERIOD(x,y) (TA_Globals->unstablePeriod[x]) + #define TA_GLOBALS_COMPATIBILITY (TA_Globals->compatibility) +#endif + + + +/* CIRCBUF : Circular Buffer Macros. + * + * The CIRCBUF is like a FIFO buffer (First In - First Out), except + * that the rate of data coming out is the same as the rate of + * data coming in (for simplification and speed optimization). + * In other word, when you add one new value, you must also consume + * one value (if not consume, the value is lost). + * + * The CIRCBUF size is unlimited, so it will automatically allocate and + * de-allocate memory as needed. In C/C++. when small enough, CIRCBUF will + * instead use a buffer "allocated" on the stack (automatic variable). + * + * Multiple CIRCBUF can be used within the same function. To make that + * possible the first parameter of the MACRO is an "Id" that can be + * any string. + * + * The macros offer the advantage to work in C/C++ and managed C++. + * + * CIRCBUF_PROLOG(Id,Type,Size); + * Will declare all the needed variables. 2 variables are + * important: + * 1) 'Id' will be a ptr of the specified Type. + * 2) 'Id'_Idx indicates from where to consume and + * to add the data. + * + * Important: You must consume the oldest data before + * setting the new data! + * + * The Size must be reasonable since it might "allocate" + * an array of this size on the stack (each element are 'Type'). + * + * CIRCBUF_CONSTRUCT(Id,Type,Size); + * Must be called prior to use the remaining macros. Must be + * followed by CIRCBUF_DESTROY when leaving the function. + * The Size here can be large. If the static Size specified + * with CIRCBUF_PROLOG is not sufficient, this MACRO will + * allocate a new buffer from the Heap. + * + * CIRCBUF_DESTROY(Id,Size); + * Must be call prior to leave the function. + * + * CIRCBUF_NEXT(Id); + * Move forward the indexes. + * + * Example: + * TA_RetCode MyFunc( int size ) + * { + * CIRCBUF_PROLOG(MyBuf,int,4); + * int i, value; + * ... + * CIRCBUF_CONSTRUCT(MyBuf,int,size); + * ... + * // 1st Loop: Fill MyBuf with initial values + * // (must be done). + * value = 0; + * for( i=0; i < size; i++ ) + * { + * // Set the data + * MyBuf[MyBuf_Idx] = value++; + * CIRCBUF_NEXT(MyBuf); + * } + * + * // 2nd Loop: Get and Add subsequent values + * // in MyBuf (optional) + * for( i=0; i < 3; i++ ) + * { + * // Consume the data (must be done first) + * printf( "%d ", MyBuf[MyBuf_Idx] ); + * + * // Set the new data (must be done second) + * MyBuf[MyBuf_Idx] = value++; + * + * // Move the index forward + * CIRCBUF_NEXT(MyBuf); + * } + * + * // 3rd Loop: Empty MyBuf (optional) + * for( i=0; i < size; i++ ) + * { + * printf( "%d ", MyBuf[MyBuf_Idx] ); + * CIRCBUF_NEXT(MyBuf); + * } + * + * CIRCBUF_DESTROY(MyBuf); + * return TA_SUCCESS; + * } + * + * + * A call to MyFunc(5) will output: + * 0 1 2 3 4 5 6 7 + * + * The value 0 to 4 are added by the 1st loop. + * The value 5 to 7 are added by the 2nd loop. + * + * The value 0 to 2 are displayed by the 2nd loop. + * The value 3 to 7 are displayed by the 3rd loop. + * + * Because the size 5 is greater than the + * value provided in CIRCBUF_PROLOG, a buffer will + * be dynamically allocated (and freed). + */ +#if defined( _MANAGED ) + +#define CIRCBUF_PROLOG(Id,Type,Size) int Id##_Idx = 0; \ + cli::array^ Id; \ + int maxIdx_##Id = (Size-1) + +/* Use this macro instead if the Type is a class or a struct. */ +#define CIRCBUF_PROLOG_CLASS(Id,Type,Size) int Id##_Idx = 0; \ + cli::array^ Id; \ + int maxIdx_##Id = (Size-1) + +#define CIRCBUF_INIT(Id,Type,Size) \ + { \ + if( Size <= 0 ) \ + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); \ + Id = gcnew cli::array(Size); \ + if( !Id ) \ + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); \ + maxIdx_##Id = (Size-1); \ + } + +#define CIRCBUF_INIT_CLASS(Id,Type,Size) \ + { \ + if( Size <= 0 ) \ + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); \ + Id = gcnew cli::array(Size); \ + for( int _##Id##_index=0; _##Id##_indexLength; _##Id##_index++) \ + { \ + Id[_##Id##_index]=gcnew Type(); \ + } \ + if( !Id ) \ + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); \ + maxIdx_##Id = (Size-1); \ + } + +#define CIRCBUF_INIT_LOCAL_ONLY(Id,Type) \ + { \ + Id = gcnew cli::array(maxIdx_##Id+1); \ + if( !Id ) \ + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); \ + } + +#define CIRCBUF_DESTROY(Id) + +/* Use this macro to access the member when type is a class or a struct. */ +#define CIRCBUF_REF(x) (x)-> + +#elif defined(_JAVA) + +#define CIRCBUF_PROLOG(Id,Type,Size) int Id##_Idx = 0; \ + Type []Id; \ + int maxIdx_##Id = (Size-1) + +/* Use this macro instead if the Type is a class or a struct. */ +#define CIRCBUF_PROLOG_CLASS(Id,Type,Size) int Id##_Idx = 0; \ + Type []Id; \ + int maxIdx_##Id = (Size-1) + +#define CIRCBUF_INIT(Id,Type,Size) \ + { \ + if( Size <= 0 ) \ + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); \ + Id = new Type[Size]; \ + maxIdx_##Id = (Size-1); \ + } + +#define CIRCBUF_INIT_CLASS(Id,Type,Size) \ + { \ + if( Size <= 0 ) \ + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); \ + Id = new Type[Size]; \ + for( int _##Id##_index=0; _##Id##_index (int)(sizeof(local_##Id)/sizeof(Type)) ) \ + { \ + Id = TA_Malloc( sizeof(Type)*Size ); \ + if( !Id ) \ + return TA_ALLOC_ERR; \ + } \ + else \ + Id = &local_##Id[0]; \ + maxIdx_##Id = (Size-1); \ + Id##_Idx = 0; \ + } + +#define CIRCBUF_INIT_CLASS(Id,Type,Size) CIRCBUF_INIT(Id,Type,Size) + +#define CIRCBUF_INIT_LOCAL_ONLY(Id,Type) \ + { \ + Id = &local_##Id[0]; \ + maxIdx_##Id = (int)(sizeof(local_##Id)/sizeof(Type))-1; \ + Id##_Idx = 0; \ + } + +#define CIRCBUF_DESTROY(Id) \ + { \ + if( Id != &local_##Id[0] ) \ + TA_Free( Id ); \ + } + +/* Use this macro to access the member when Type is a class or a struct. */ +#define CIRCBUF_REF(x) (x). + +#endif + +#define CIRCBUF_NEXT(Id) \ + { \ + Id##_Idx++; \ + if( Id##_Idx > maxIdx_##Id ) \ + Id##_Idx = 0; \ + } + + +#endif + diff --git a/src/ta_common/ta_pragma.h b/src/ta_common/ta_pragma.h new file mode 100644 index 000000000..6d006db54 --- /dev/null +++ b/src/ta_common/ta_pragma.h @@ -0,0 +1,87 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * CM Craig Miller (c-miller@users.sourceforge.net) + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011707 CM First version. + */ + +/* Description: + * + * Visual Studio 2005 has extended the C Run-Time Library by including "secure" + * runtime functions and deprecating the previous function prototypes. Since + * we need to use the previous prototypes to maintain compatibility with other + * platform compilers we are going to disable the deprecation warnings when + * compiling with Visual Studio 2005. + * + * Note: this header must be the first inclusion referenced by the code file + * needing these settings!!!!! + * + */ + +#ifndef TA_PRAGMA_H +#define TA_PRAGMA_H + +#if (_MSC_VER >= 1400) // VC8+ nmake and VS2005 + + #ifndef _CRT_SECURE_NO_DEPRECATE //turn off MS 'safe' CRT library routines + #define _CRT_SECURE_NO_DEPRECATE 1 + #endif + +// There are additional macros that may be needed in the future, so we'll list them here + //#ifndef _CRT_SECURE_NO_WARNINGS //turn off MS 'safe' CRT library routines + // #define _CRT_SECURE_NO_WARNINGS 1 + //#endif + // + //#ifndef _SCL_SECURE_NO_DEPRECATE //turn off MS 'safe' C++RT library routines + // #define _SCL_SECURE_NO_DEPRECATE 1 + //#endif + //#ifndef _SCL_SECURE_NO_WARNINGS + // #define _SCL_SECURE_NO_WARNINGS 1 + //#endif + // + //#ifndef _CRT_NONSTDC_NO_DEPRECATE //turn off MS POSIX replacements library routines + // #define _CRT_NONSTDC_NO_DEPRECATE 1 + //#endif + +#endif // VC8+ + +#endif //TA_PRAGMA_H diff --git a/src/ta_common/ta_retcode.c b/src/ta_common/ta_retcode.c new file mode 100644 index 000000000..674dc6d7e --- /dev/null +++ b/src/ta_common/ta_retcode.c @@ -0,0 +1,109 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Important: This file is automatically generated by the utility gen_code. + * Any modification will be lost on next execution of gen_code. + * + * The goal of this file is to provide the functionality TA_SetRetCodeInfo. + * + * This function is a convenient way for the user to translate a TA_RetCode into + * a human readable string. + */ +#include + +typedef struct +{ + TA_RetCode retCode; + const char * const enumStr; + const char * const infoStr; +} TA_InternalRetCodeInfo; + +static TA_InternalRetCodeInfo retCodeInfoTable[] = { + {(TA_RetCode)0,"TA_SUCCESS","No error"}, + {(TA_RetCode)1,"TA_LIB_NOT_INITIALIZE","TA_Initialize was not sucessfully called"}, + {(TA_RetCode)2,"TA_BAD_PARAM","A parameter is out of range"}, + {(TA_RetCode)3,"TA_ALLOC_ERR","Possibly out-of-memory"}, + {(TA_RetCode)4,"TA_GROUP_NOT_FOUND","No Info"}, + {(TA_RetCode)5,"TA_FUNC_NOT_FOUND","No Info"}, + {(TA_RetCode)6,"TA_INVALID_HANDLE","No Info"}, + {(TA_RetCode)7,"TA_INVALID_PARAM_HOLDER","No Info"}, + {(TA_RetCode)8,"TA_INVALID_PARAM_HOLDER_TYPE","No Info"}, + {(TA_RetCode)9,"TA_INVALID_PARAM_FUNCTION","No Info"}, + {(TA_RetCode)10,"TA_INPUT_NOT_ALL_INITIALIZE","No Info"}, + {(TA_RetCode)11,"TA_OUTPUT_NOT_ALL_INITIALIZE","No Info"}, + {(TA_RetCode)12,"TA_OUT_OF_RANGE_START_INDEX","No Info"}, + {(TA_RetCode)13,"TA_OUT_OF_RANGE_END_INDEX","No Info"}, + {(TA_RetCode)14,"TA_INVALID_LIST_TYPE","No Info"}, + {(TA_RetCode)15,"TA_BAD_OBJECT","No Info"}, + {(TA_RetCode)16,"TA_NOT_SUPPORTED","No Info"}, + {(TA_RetCode)5000,"TA_INTERNAL_ERROR","No Info"}, + {(TA_RetCode)0xFFFF,"TA_UNKNOWN_ERR","Unknown Error"} +}; + +#define NB_RET_CODE_INFO (sizeof(retCodeInfoTable)/sizeof(TA_InternalRetCodeInfo)) + +void TA_SetRetCodeInfo( TA_RetCode theRetCode, TA_RetCodeInfo *retCodeInfo ) +{ + unsigned int i; + + /* Trap internal error code */ + if( (theRetCode >= 5000) && (theRetCode <= 5999) ) + { + retCodeInfo->enumStr = "TA_INTERNAL_ERROR"; + retCodeInfo->infoStr = "Unexpected Internal Error - Contact TA-Lib.org"; + return; + } + + /* Check among all the error code defined in ta_common.h */ + for( i=0; i < (NB_RET_CODE_INFO-1); i++ ) + { + if( theRetCode == retCodeInfoTable[i].retCode ) + { + /* Error code found. */ + retCodeInfo->enumStr = retCodeInfoTable[i].enumStr; + retCodeInfo->infoStr = retCodeInfoTable[i].infoStr; + return; + } + } + + /* Error code not found. */ + + /* "TA_UNKNOWN_ERR" is ALWAYS the last entry in the table. */ + retCodeInfo->enumStr = retCodeInfoTable[i].enumStr; + retCodeInfo->infoStr = retCodeInfoTable[i].infoStr; +} + +/***************/ +/* End of File */ +/***************/ + diff --git a/src/ta_common/ta_retcode.csv b/src/ta_common/ta_retcode.csv new file mode 100644 index 000000000..ea3bd7026 --- /dev/null +++ b/src/ta_common/ta_retcode.csv @@ -0,0 +1,18 @@ +0,TA_SUCCESS,No error +1,TA_LIB_NOT_INITIALIZE,TA_Initialize was not sucessfully called +2,TA_BAD_PARAM,A parameter is out of range +3,TA_ALLOC_ERR,Possibly out-of-memory +4,TA_GROUP_NOT_FOUND,No Info +5,TA_FUNC_NOT_FOUND,No Info +6,TA_INVALID_HANDLE,No Info +7,TA_INVALID_PARAM_HOLDER,No Info +8,TA_INVALID_PARAM_HOLDER_TYPE,No Info +9,TA_INVALID_PARAM_FUNCTION,No Info +10,TA_INPUT_NOT_ALL_INITIALIZE,No Info +11,TA_OUTPUT_NOT_ALL_INITIALIZE,No Info +12,TA_OUT_OF_RANGE_START_INDEX,No Info +13,TA_OUT_OF_RANGE_END_INDEX,No Info +14,TA_INVALID_LIST_TYPE,No Info +15,TA_BAD_OBJECT,No Info +16,TA_NOT_SUPPORTED,No Info +5000,TA_INTERNAL_ERROR,No Info diff --git a/src/ta_common/ta_version.c b/src/ta_common/ta_version.c new file mode 100644 index 000000000..0df9dfdd2 --- /dev/null +++ b/src/ta_common/ta_version.c @@ -0,0 +1,77 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +/* Version number controlled manually. + * + * Should be modified only by TA-Lib.org + */ +#define MAJOR "0" +#define MINOR "4" +#define BUILD "0" + +/* Nothing to modify below this line. */ + +#define TA_VERSION_STRING(maj,min,build,date,time) maj"."min"."build" ("date" "time")" + +const char *TA_GetVersionString( void ) +{ + return TA_VERSION_STRING(MAJOR,MINOR,BUILD,__DATE__,__TIME__); +} + +const char *TA_GetVersionMajor( void ) +{ + return MAJOR; +} + +const char *TA_GetVersionMinor( void ) +{ + return MINOR; +} + +const char *TA_GetVersionBuild( void ) +{ + return BUILD; +} + +const char *TA_GetVersionDate( void ) +{ + return __DATE__; +} + +const char *TA_GetVersionTime( void ) +{ + return __TIME__; +} diff --git a/src/ta_func/Makefile.am b/src/ta_func/Makefile.am new file mode 100644 index 000000000..030a5161a --- /dev/null +++ b/src/ta_func/Makefile.am @@ -0,0 +1,170 @@ + +noinst_LTLIBRARIES = libta_func.la +AM_CPPFLAGS = -I../ta_common/ + +libta_func_la_SOURCES = ta_utility.c \ + ta_ACOS.c \ + ta_AD.c \ + ta_ADD.c \ + ta_ADOSC.c \ + ta_ADX.c \ + ta_ADXR.c \ + ta_APO.c \ + ta_AROON.c \ + ta_AROONOSC.c \ + ta_ASIN.c \ + ta_ATAN.c \ + ta_ATR.c \ + ta_AVGPRICE.c \ + ta_BBANDS.c \ + ta_BETA.c \ + ta_BOP.c \ + ta_CCI.c \ + ta_CDL2CROWS.c \ + ta_CDL3BLACKCROWS.c \ + ta_CDL3INSIDE.c \ + ta_CDL3LINESTRIKE.c \ + ta_CDL3OUTSIDE.c \ + ta_CDL3STARSINSOUTH.c \ + ta_CDL3WHITESOLDIERS.c \ + ta_CDLABANDONEDBABY.c \ + ta_CDLADVANCEBLOCK.c \ + ta_CDLBELTHOLD.c \ + ta_CDLBREAKAWAY.c \ + ta_CDLCLOSINGMARUBOZU.c \ + ta_CDLCONCEALBABYSWALL.c \ + ta_CDLCOUNTERATTACK.c \ + ta_CDLDARKCLOUDCOVER.c \ + ta_CDLDOJI.c \ + ta_CDLDOJISTAR.c \ + ta_CDLDRAGONFLYDOJI.c \ + ta_CDLENGULFING.c \ + ta_CDLEVENINGDOJISTAR.c \ + ta_CDLEVENINGSTAR.c \ + ta_CDLGAPSIDESIDEWHITE.c \ + ta_CDLGRAVESTONEDOJI.c \ + ta_CDLHAMMER.c \ + ta_CDLHANGINGMAN.c \ + ta_CDLHARAMI.c \ + ta_CDLHARAMICROSS.c \ + ta_CDLHIGHWAVE.c \ + ta_CDLHIKKAKE.c \ + ta_CDLHIKKAKEMOD.c \ + ta_CDLHOMINGPIGEON.c \ + ta_CDLIDENTICAL3CROWS.c \ + ta_CDLINNECK.c \ + ta_CDLINVERTEDHAMMER.c \ + ta_CDLKICKING.c \ + ta_CDLKICKINGBYLENGTH.c \ + ta_CDLLADDERBOTTOM.c \ + ta_CDLLONGLEGGEDDOJI.c \ + ta_CDLLONGLINE.c \ + ta_CDLMARUBOZU.c \ + ta_CDLMATCHINGLOW.c \ + ta_CDLMATHOLD.c \ + ta_CDLMORNINGDOJISTAR.c \ + ta_CDLMORNINGSTAR.c \ + ta_CDLONNECK.c \ + ta_CDLPIERCING.c \ + ta_CDLRICKSHAWMAN.c \ + ta_CDLRISEFALL3METHODS.c \ + ta_CDLSEPARATINGLINES.c \ + ta_CDLSHOOTINGSTAR.c \ + ta_CDLSHORTLINE.c \ + ta_CDLSPINNINGTOP.c \ + ta_CDLSTALLEDPATTERN.c \ + ta_CDLSTICKSANDWICH.c \ + ta_CDLTAKURI.c \ + ta_CDLTASUKIGAP.c \ + ta_CDLTHRUSTING.c \ + ta_CDLTRISTAR.c \ + ta_CDLUNIQUE3RIVER.c \ + ta_CDLUPSIDEGAP2CROWS.c \ + ta_CDLXSIDEGAP3METHODS.c \ + ta_CEIL.c \ + ta_CMO.c \ + ta_CORREL.c \ + ta_COS.c \ + ta_COSH.c \ + ta_DEMA.c \ + ta_DIV.c \ + ta_DX.c \ + ta_EMA.c \ + ta_EXP.c \ + ta_FLOOR.c \ + ta_HT_DCPERIOD.c \ + ta_HT_DCPHASE.c \ + ta_HT_PHASOR.c \ + ta_HT_SINE.c \ + ta_HT_TRENDLINE.c \ + ta_HT_TRENDMODE.c \ + ta_KAMA.c \ + ta_LINEARREG.c \ + ta_LINEARREG_ANGLE.c \ + ta_LINEARREG_INTERCEPT.c \ + ta_LINEARREG_SLOPE.c \ + ta_LN.c \ + ta_LOG10.c \ + ta_MA.c \ + ta_MACD.c \ + ta_MACDEXT.c \ + ta_MACDFIX.c \ + ta_MAMA.c \ + ta_MAVP.c \ + ta_MAX.c \ + ta_MAXINDEX.c \ + ta_MEDPRICE.c \ + ta_MFI.c \ + ta_MIDPOINT.c \ + ta_MIDPRICE.c \ + ta_MIN.c \ + ta_MININDEX.c \ + ta_MINMAX.c \ + ta_MINMAXINDEX.c \ + ta_MINUS_DI.c \ + ta_MINUS_DM.c \ + ta_MOM.c \ + ta_MULT.c \ + ta_NATR.c \ + ta_OBV.c \ + ta_PLUS_DI.c \ + ta_PLUS_DM.c \ + ta_PPO.c \ + ta_ROC.c \ + ta_ROCP.c \ + ta_ROCR.c \ + ta_ROCR100.c \ + ta_RSI.c \ + ta_SAR.c \ + ta_SAREXT.c \ + ta_SIN.c \ + ta_SINH.c \ + ta_SMA.c \ + ta_SQRT.c \ + ta_STDDEV.c \ + ta_STOCH.c \ + ta_STOCHF.c \ + ta_STOCHRSI.c \ + ta_SUB.c \ + ta_SUM.c \ + ta_T3.c \ + ta_TAN.c \ + ta_TANH.c \ + ta_TEMA.c \ + ta_TRANGE.c \ + ta_TRIMA.c \ + ta_TRIX.c \ + ta_TSF.c \ + ta_TYPPRICE.c \ + ta_ULTOSC.c \ + ta_VAR.c \ + ta_WCLPRICE.c \ + ta_WILLR.c \ + ta_WMA.c + +libta_func_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) + +libta_funcdir=$(includedir)/ta-lib/ +libta_func_HEADERS = ../../include/ta_defs.h \ + ../../include/ta_libc.h \ + ../../include/ta_func.h diff --git a/src/ta_func/Makefile.in b/src/ta_func/Makefile.in new file mode 100644 index 000000000..5f8a242d3 --- /dev/null +++ b/src/ta_func/Makefile.in @@ -0,0 +1,837 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/ta_func +DIST_COMMON = $(libta_func_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/ta_config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libta_func_la_LIBADD = +am_libta_func_la_OBJECTS = ta_utility.lo ta_ACOS.lo ta_AD.lo ta_ADD.lo \ + ta_ADOSC.lo ta_ADX.lo ta_ADXR.lo ta_APO.lo ta_AROON.lo \ + ta_AROONOSC.lo ta_ASIN.lo ta_ATAN.lo ta_ATR.lo ta_AVGPRICE.lo \ + ta_BBANDS.lo ta_BETA.lo ta_BOP.lo ta_CCI.lo ta_CDL2CROWS.lo \ + ta_CDL3BLACKCROWS.lo ta_CDL3INSIDE.lo ta_CDL3LINESTRIKE.lo \ + ta_CDL3OUTSIDE.lo ta_CDL3STARSINSOUTH.lo \ + ta_CDL3WHITESOLDIERS.lo ta_CDLABANDONEDBABY.lo \ + ta_CDLADVANCEBLOCK.lo ta_CDLBELTHOLD.lo ta_CDLBREAKAWAY.lo \ + ta_CDLCLOSINGMARUBOZU.lo ta_CDLCONCEALBABYSWALL.lo \ + ta_CDLCOUNTERATTACK.lo ta_CDLDARKCLOUDCOVER.lo ta_CDLDOJI.lo \ + ta_CDLDOJISTAR.lo ta_CDLDRAGONFLYDOJI.lo ta_CDLENGULFING.lo \ + ta_CDLEVENINGDOJISTAR.lo ta_CDLEVENINGSTAR.lo \ + ta_CDLGAPSIDESIDEWHITE.lo ta_CDLGRAVESTONEDOJI.lo \ + ta_CDLHAMMER.lo ta_CDLHANGINGMAN.lo ta_CDLHARAMI.lo \ + ta_CDLHARAMICROSS.lo ta_CDLHIGHWAVE.lo ta_CDLHIKKAKE.lo \ + ta_CDLHIKKAKEMOD.lo ta_CDLHOMINGPIGEON.lo \ + ta_CDLIDENTICAL3CROWS.lo ta_CDLINNECK.lo \ + ta_CDLINVERTEDHAMMER.lo ta_CDLKICKING.lo \ + ta_CDLKICKINGBYLENGTH.lo ta_CDLLADDERBOTTOM.lo \ + ta_CDLLONGLEGGEDDOJI.lo ta_CDLLONGLINE.lo ta_CDLMARUBOZU.lo \ + ta_CDLMATCHINGLOW.lo ta_CDLMATHOLD.lo ta_CDLMORNINGDOJISTAR.lo \ + ta_CDLMORNINGSTAR.lo ta_CDLONNECK.lo ta_CDLPIERCING.lo \ + ta_CDLRICKSHAWMAN.lo ta_CDLRISEFALL3METHODS.lo \ + ta_CDLSEPARATINGLINES.lo ta_CDLSHOOTINGSTAR.lo \ + ta_CDLSHORTLINE.lo ta_CDLSPINNINGTOP.lo \ + ta_CDLSTALLEDPATTERN.lo ta_CDLSTICKSANDWICH.lo ta_CDLTAKURI.lo \ + ta_CDLTASUKIGAP.lo ta_CDLTHRUSTING.lo ta_CDLTRISTAR.lo \ + ta_CDLUNIQUE3RIVER.lo ta_CDLUPSIDEGAP2CROWS.lo \ + ta_CDLXSIDEGAP3METHODS.lo ta_CEIL.lo ta_CMO.lo ta_CORREL.lo \ + ta_COS.lo ta_COSH.lo ta_DEMA.lo ta_DIV.lo ta_DX.lo ta_EMA.lo \ + ta_EXP.lo ta_FLOOR.lo ta_HT_DCPERIOD.lo ta_HT_DCPHASE.lo \ + ta_HT_PHASOR.lo ta_HT_SINE.lo ta_HT_TRENDLINE.lo \ + ta_HT_TRENDMODE.lo ta_KAMA.lo ta_LINEARREG.lo \ + ta_LINEARREG_ANGLE.lo ta_LINEARREG_INTERCEPT.lo \ + ta_LINEARREG_SLOPE.lo ta_LN.lo ta_LOG10.lo ta_MA.lo ta_MACD.lo \ + ta_MACDEXT.lo ta_MACDFIX.lo ta_MAMA.lo ta_MAVP.lo ta_MAX.lo \ + ta_MAXINDEX.lo ta_MEDPRICE.lo ta_MFI.lo ta_MIDPOINT.lo \ + ta_MIDPRICE.lo ta_MIN.lo ta_MININDEX.lo ta_MINMAX.lo \ + ta_MINMAXINDEX.lo ta_MINUS_DI.lo ta_MINUS_DM.lo ta_MOM.lo \ + ta_MULT.lo ta_NATR.lo ta_OBV.lo ta_PLUS_DI.lo ta_PLUS_DM.lo \ + ta_PPO.lo ta_ROC.lo ta_ROCP.lo ta_ROCR.lo ta_ROCR100.lo \ + ta_RSI.lo ta_SAR.lo ta_SAREXT.lo ta_SIN.lo ta_SINH.lo \ + ta_SMA.lo ta_SQRT.lo ta_STDDEV.lo ta_STOCH.lo ta_STOCHF.lo \ + ta_STOCHRSI.lo ta_SUB.lo ta_SUM.lo ta_T3.lo ta_TAN.lo \ + ta_TANH.lo ta_TEMA.lo ta_TRANGE.lo ta_TRIMA.lo ta_TRIX.lo \ + ta_TSF.lo ta_TYPPRICE.lo ta_ULTOSC.lo ta_VAR.lo ta_WCLPRICE.lo \ + ta_WILLR.lo ta_WMA.lo +libta_func_la_OBJECTS = $(am_libta_func_la_OBJECTS) +libta_func_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libta_func_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir)/include@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libta_func_la_SOURCES) +DIST_SOURCES = $(libta_func_la_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libta_funcdir)" +libta_funcHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(libta_func_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TALIB_LIBRARY_VERSION = @TALIB_LIBRARY_VERSION@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libta_func.la +AM_CPPFLAGS = -I../ta_common/ +libta_func_la_SOURCES = ta_utility.c \ + ta_ACOS.c \ + ta_AD.c \ + ta_ADD.c \ + ta_ADOSC.c \ + ta_ADX.c \ + ta_ADXR.c \ + ta_APO.c \ + ta_AROON.c \ + ta_AROONOSC.c \ + ta_ASIN.c \ + ta_ATAN.c \ + ta_ATR.c \ + ta_AVGPRICE.c \ + ta_BBANDS.c \ + ta_BETA.c \ + ta_BOP.c \ + ta_CCI.c \ + ta_CDL2CROWS.c \ + ta_CDL3BLACKCROWS.c \ + ta_CDL3INSIDE.c \ + ta_CDL3LINESTRIKE.c \ + ta_CDL3OUTSIDE.c \ + ta_CDL3STARSINSOUTH.c \ + ta_CDL3WHITESOLDIERS.c \ + ta_CDLABANDONEDBABY.c \ + ta_CDLADVANCEBLOCK.c \ + ta_CDLBELTHOLD.c \ + ta_CDLBREAKAWAY.c \ + ta_CDLCLOSINGMARUBOZU.c \ + ta_CDLCONCEALBABYSWALL.c \ + ta_CDLCOUNTERATTACK.c \ + ta_CDLDARKCLOUDCOVER.c \ + ta_CDLDOJI.c \ + ta_CDLDOJISTAR.c \ + ta_CDLDRAGONFLYDOJI.c \ + ta_CDLENGULFING.c \ + ta_CDLEVENINGDOJISTAR.c \ + ta_CDLEVENINGSTAR.c \ + ta_CDLGAPSIDESIDEWHITE.c \ + ta_CDLGRAVESTONEDOJI.c \ + ta_CDLHAMMER.c \ + ta_CDLHANGINGMAN.c \ + ta_CDLHARAMI.c \ + ta_CDLHARAMICROSS.c \ + ta_CDLHIGHWAVE.c \ + ta_CDLHIKKAKE.c \ + ta_CDLHIKKAKEMOD.c \ + ta_CDLHOMINGPIGEON.c \ + ta_CDLIDENTICAL3CROWS.c \ + ta_CDLINNECK.c \ + ta_CDLINVERTEDHAMMER.c \ + ta_CDLKICKING.c \ + ta_CDLKICKINGBYLENGTH.c \ + ta_CDLLADDERBOTTOM.c \ + ta_CDLLONGLEGGEDDOJI.c \ + ta_CDLLONGLINE.c \ + ta_CDLMARUBOZU.c \ + ta_CDLMATCHINGLOW.c \ + ta_CDLMATHOLD.c \ + ta_CDLMORNINGDOJISTAR.c \ + ta_CDLMORNINGSTAR.c \ + ta_CDLONNECK.c \ + ta_CDLPIERCING.c \ + ta_CDLRICKSHAWMAN.c \ + ta_CDLRISEFALL3METHODS.c \ + ta_CDLSEPARATINGLINES.c \ + ta_CDLSHOOTINGSTAR.c \ + ta_CDLSHORTLINE.c \ + ta_CDLSPINNINGTOP.c \ + ta_CDLSTALLEDPATTERN.c \ + ta_CDLSTICKSANDWICH.c \ + ta_CDLTAKURI.c \ + ta_CDLTASUKIGAP.c \ + ta_CDLTHRUSTING.c \ + ta_CDLTRISTAR.c \ + ta_CDLUNIQUE3RIVER.c \ + ta_CDLUPSIDEGAP2CROWS.c \ + ta_CDLXSIDEGAP3METHODS.c \ + ta_CEIL.c \ + ta_CMO.c \ + ta_CORREL.c \ + ta_COS.c \ + ta_COSH.c \ + ta_DEMA.c \ + ta_DIV.c \ + ta_DX.c \ + ta_EMA.c \ + ta_EXP.c \ + ta_FLOOR.c \ + ta_HT_DCPERIOD.c \ + ta_HT_DCPHASE.c \ + ta_HT_PHASOR.c \ + ta_HT_SINE.c \ + ta_HT_TRENDLINE.c \ + ta_HT_TRENDMODE.c \ + ta_KAMA.c \ + ta_LINEARREG.c \ + ta_LINEARREG_ANGLE.c \ + ta_LINEARREG_INTERCEPT.c \ + ta_LINEARREG_SLOPE.c \ + ta_LN.c \ + ta_LOG10.c \ + ta_MA.c \ + ta_MACD.c \ + ta_MACDEXT.c \ + ta_MACDFIX.c \ + ta_MAMA.c \ + ta_MAVP.c \ + ta_MAX.c \ + ta_MAXINDEX.c \ + ta_MEDPRICE.c \ + ta_MFI.c \ + ta_MIDPOINT.c \ + ta_MIDPRICE.c \ + ta_MIN.c \ + ta_MININDEX.c \ + ta_MINMAX.c \ + ta_MINMAXINDEX.c \ + ta_MINUS_DI.c \ + ta_MINUS_DM.c \ + ta_MOM.c \ + ta_MULT.c \ + ta_NATR.c \ + ta_OBV.c \ + ta_PLUS_DI.c \ + ta_PLUS_DM.c \ + ta_PPO.c \ + ta_ROC.c \ + ta_ROCP.c \ + ta_ROCR.c \ + ta_ROCR100.c \ + ta_RSI.c \ + ta_SAR.c \ + ta_SAREXT.c \ + ta_SIN.c \ + ta_SINH.c \ + ta_SMA.c \ + ta_SQRT.c \ + ta_STDDEV.c \ + ta_STOCH.c \ + ta_STOCHF.c \ + ta_STOCHRSI.c \ + ta_SUB.c \ + ta_SUM.c \ + ta_T3.c \ + ta_TAN.c \ + ta_TANH.c \ + ta_TEMA.c \ + ta_TRANGE.c \ + ta_TRIMA.c \ + ta_TRIX.c \ + ta_TSF.c \ + ta_TYPPRICE.c \ + ta_ULTOSC.c \ + ta_VAR.c \ + ta_WCLPRICE.c \ + ta_WILLR.c \ + ta_WMA.c + +libta_func_la_LDFLAGS = -version-info $(TALIB_LIBRARY_VERSION) +libta_funcdir = $(includedir)/ta-lib/ +libta_func_HEADERS = ../../include/ta_defs.h \ + ../../include/ta_libc.h \ + ../../include/ta_func.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ta_func/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/ta_func/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libta_func.la: $(libta_func_la_OBJECTS) $(libta_func_la_DEPENDENCIES) + $(libta_func_la_LINK) $(libta_func_la_OBJECTS) $(libta_func_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ACOS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_AD.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ADD.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ADOSC.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ADX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ADXR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_APO.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_AROON.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_AROONOSC.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ASIN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ATAN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ATR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_AVGPRICE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_BBANDS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_BETA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_BOP.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CCI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDL2CROWS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDL3BLACKCROWS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDL3INSIDE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDL3LINESTRIKE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDL3OUTSIDE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDL3STARSINSOUTH.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDL3WHITESOLDIERS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLABANDONEDBABY.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLADVANCEBLOCK.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLBELTHOLD.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLBREAKAWAY.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLCLOSINGMARUBOZU.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLCONCEALBABYSWALL.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLCOUNTERATTACK.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLDARKCLOUDCOVER.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLDOJI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLDOJISTAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLDRAGONFLYDOJI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLENGULFING.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLEVENINGDOJISTAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLEVENINGSTAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLGAPSIDESIDEWHITE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLGRAVESTONEDOJI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLHAMMER.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLHANGINGMAN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLHARAMI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLHARAMICROSS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLHIGHWAVE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLHIKKAKE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLHIKKAKEMOD.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLHOMINGPIGEON.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLIDENTICAL3CROWS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLINNECK.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLINVERTEDHAMMER.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLKICKING.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLKICKINGBYLENGTH.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLLADDERBOTTOM.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLLONGLEGGEDDOJI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLLONGLINE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLMARUBOZU.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLMATCHINGLOW.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLMATHOLD.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLMORNINGDOJISTAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLMORNINGSTAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLONNECK.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLPIERCING.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLRICKSHAWMAN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLRISEFALL3METHODS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLSEPARATINGLINES.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLSHOOTINGSTAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLSHORTLINE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLSPINNINGTOP.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLSTALLEDPATTERN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLSTICKSANDWICH.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLTAKURI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLTASUKIGAP.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLTHRUSTING.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLTRISTAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLUNIQUE3RIVER.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLUPSIDEGAP2CROWS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CDLXSIDEGAP3METHODS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CEIL.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CMO.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_CORREL.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_COS.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_COSH.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_DEMA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_DIV.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_DX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_EMA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_EXP.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_FLOOR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_HT_DCPERIOD.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_HT_DCPHASE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_HT_PHASOR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_HT_SINE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_HT_TRENDLINE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_HT_TRENDMODE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_KAMA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_LINEARREG.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_LINEARREG_ANGLE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_LINEARREG_INTERCEPT.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_LINEARREG_SLOPE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_LN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_LOG10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MACD.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MACDEXT.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MACDFIX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MAMA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MAVP.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MAX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MAXINDEX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MEDPRICE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MFI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MIDPOINT.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MIDPRICE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MIN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MININDEX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MINMAX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MINMAXINDEX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MINUS_DI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MINUS_DM.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MOM.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_MULT.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_NATR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_OBV.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_PLUS_DI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_PLUS_DM.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_PPO.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ROC.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ROCP.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ROCR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ROCR100.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_RSI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_SAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_SAREXT.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_SIN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_SINH.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_SMA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_SQRT.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_STDDEV.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_STOCH.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_STOCHF.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_STOCHRSI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_SUB.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_SUM.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_T3.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_TAN.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_TANH.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_TEMA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_TRANGE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_TRIMA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_TRIX.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_TSF.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_TYPPRICE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_ULTOSC.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_VAR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_WCLPRICE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_WILLR.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_WMA.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ta_utility.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libta_funcHEADERS: $(libta_func_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(libta_funcdir)" || $(MKDIR_P) "$(DESTDIR)$(libta_funcdir)" + @list='$(libta_func_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(libta_funcHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libta_funcdir)/$$f'"; \ + $(libta_funcHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libta_funcdir)/$$f"; \ + done + +uninstall-libta_funcHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libta_func_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libta_funcdir)/$$f'"; \ + rm -f "$(DESTDIR)$(libta_funcdir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libta_funcdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-libta_funcHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libta_funcHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libta_funcHEADERS install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libta_funcHEADERS + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/ta_func/ta_ACOS.c b/src/ta_func/ta_ACOS.c new file mode 100644 index 000000000..72ba5803c --- /dev/null +++ b/src/ta_func/ta_ACOS.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AcosLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int acosLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ACOS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ACOS - Vector Trigonometric ACos + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Acos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Acos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode acos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ACOS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_acos(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Acos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode acos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ACOS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_acos(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_AD.c b/src/ta_func/ta_AD.c new file mode 100644 index 000000000..46cd050b7 --- /dev/null +++ b/src/ta_func/ta_AD.c @@ -0,0 +1,314 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * JD jdoyle + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 111705 MF,JD Fix#1359452 for handling properly start/end range. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AdLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int adLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_AD_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* This function have no lookback needed. */ + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_AD - Chaikin A/D Line + * + * Input = High, Low, Close, Volume + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Ad( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ SubArray^ inVolume, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ad( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ cli::array^ inVolume, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ad( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double inVolume[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_AD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ const double inVolume[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int nbBar, currentBar, outIdx; + + double high, low, close, tmp; + double ad; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose||!inVolume) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Note: Results from this function might vary slightly + * from Metastock outputs. The reason being that + * Metastock use float instead of double and this + * cause a different floating-point precision to + * be used. + * + * For most function, this is not an apparent difference + * but for function using large cummulative values (like + * this AD function), minor imprecision adds up and becomes + * significative. + * + * For better precision, TA-Lib use double in all its + * its calculations. + */ + + /* Default return values */ + nbBar = endIdx-startIdx+1; + VALUE_HANDLE_DEREF(outNBElement) = nbBar; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + currentBar = startIdx; + outIdx = 0; + ad = 0.0; + + while( nbBar != 0 ) + { + high = inHigh[currentBar]; + low = inLow[currentBar]; + tmp = high-low; + close = inClose[currentBar]; + + if( tmp > 0.0 ) + ad += (((close-low)-(high-close))/tmp)*((double)inVolume[currentBar]); + + outReal[outIdx++] = ad; + + currentBar++; + nbBar--; + } + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ad( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ cli::array^ inVolume, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ad( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ float inVolume[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_AD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ const float inVolume[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int nbBar, currentBar, outIdx; +/* Generated */ double high, low, close, tmp; +/* Generated */ double ad; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose||!inVolume) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbBar = endIdx-startIdx+1; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = nbBar; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ currentBar = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ ad = 0.0; +/* Generated */ while( nbBar != 0 ) +/* Generated */ { +/* Generated */ high = inHigh[currentBar]; +/* Generated */ low = inLow[currentBar]; +/* Generated */ tmp = high-low; +/* Generated */ close = inClose[currentBar]; +/* Generated */ if( tmp > 0.0 ) +/* Generated */ ad += (((close-low)-(high-close))/tmp)*((double)inVolume[currentBar]); +/* Generated */ outReal[outIdx++] = ad; +/* Generated */ currentBar++; +/* Generated */ nbBar--; +/* Generated */ } +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ diff --git a/src/ta_func/ta_ADD.c b/src/ta_func/ta_ADD.c new file mode 100644 index 000000000..bb143d7e2 --- /dev/null +++ b/src/ta_func/ta_ADD.c @@ -0,0 +1,250 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AddLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int addLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ADD_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ADD - Vector Arithmetic Add + * + * Input = double, double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Add( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal0, +/* Generated */ SubArray^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Add( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode add( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal0[], +/* Generated */ double inReal1[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ADD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal0[], +/* Generated */ const double inReal1[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = inReal0[i]+inReal1[i]; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Add( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode add( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal0[], +/* Generated */ float inReal1[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ADD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal0[], +/* Generated */ const float inReal1[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = inReal0[i]+inReal1[i]; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ADOSC.c b/src/ta_func/ta_ADOSC.c new file mode 100644 index 000000000..4e12f44d5 --- /dev/null +++ b/src/ta_func/ta_ADOSC.c @@ -0,0 +1,480 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AdOscLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int adOscLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ADOSC_Lookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int slowestPeriod; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 3; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 10; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* Use the slowest EMA period to evaluate the total lookback. */ + if( optInFastPeriod < optInSlowPeriod ) + slowestPeriod = optInSlowPeriod; + else + slowestPeriod = optInFastPeriod; + + /* Adjust startIdx to account for the lookback period. */ + return LOOKBACK_CALL(EMA)( slowestPeriod ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ADOSC - Chaikin A/D Oscillator + * + * Input = High, Low, Close, Volume + * Output = double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::AdOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ SubArray^ inVolume, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::AdOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ cli::array^ inVolume, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode adOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double inVolume[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ADOSC( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ const double inVolume[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int today, outIdx, lookbackTotal; + int slowestPeriod; + double high, low, close, tmp; + + double slowEMA, slowk, one_minus_slowk; + double fastEMA, fastk, one_minus_fastk; + double ad; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose||!inVolume) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 3; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 10; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Implementation Note: + * The fastEMA varaible is not neceseraly the + * fastest EMA. + * In the same way, slowEMA is not neceseraly the + * slowest EMA. + * + * The ADOSC is always the (fastEMA - slowEMA) regardless + * of the period specified. In other word: + * + * ADOSC(3,10) = EMA(3,AD) - EMA(10,AD) + * + * while + * + * ADOSC(10,3) = EMA(10,AD)- EMA(3,AD) + * + * In the first case the EMA(3) is truly a faster EMA, + * while in the second case, the EMA(10) is still call + * fastEMA in the algorithm, even if it is in fact slower. + * + * This gives more flexibility to the user if they want to + * experiment with unusual parameter settings. + */ + + /* Identify the slowest period. + * This infomration is used soleley to bootstrap + * the algorithm (skip the lookback period). + */ + if( optInFastPeriod < optInSlowPeriod ) + slowestPeriod = optInSlowPeriod; + else + slowestPeriod = optInFastPeriod; + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(EMA)( slowestPeriod ); + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + today = startIdx-lookbackTotal; + + /* The following variables and macro are used to + * calculate the "ad". + */ + ad = 0.0; + #define CALCULATE_AD \ + { \ + high = inHigh[today]; \ + low = inLow[today]; \ + tmp = high-low; \ + close = inClose[today]; \ + if( tmp > 0.0 ) \ + ad += (((close-low)-(high-close))/tmp)*((double)inVolume[today]); \ + today++; \ + } + + /* Constants for EMA */ + fastk = PER_TO_K( optInFastPeriod ); + one_minus_fastk = 1.0 - fastk; + + slowk = PER_TO_K( optInSlowPeriod ); + one_minus_slowk = 1.0 - slowk; + + /* Initialize the two EMA + * + * Use the same range of initialization inputs for + * both EMA and simply seed with the first A/D value. + * + * Note: Metastock do the same. + */ + CALCULATE_AD; + fastEMA = ad; + slowEMA = ad; + + /* Initialize the EMA and skip the unstable period. */ + while( today < startIdx ) + { + CALCULATE_AD; + fastEMA = (fastk*ad)+(one_minus_fastk*fastEMA); + slowEMA = (slowk*ad)+(one_minus_slowk*slowEMA); + } + + /* Perform the calculation for the requested range */ + outIdx = 0; + while( today <= endIdx ) + { + CALCULATE_AD; + fastEMA = (fastk*ad)+(one_minus_fastk*fastEMA); + slowEMA = (slowk*ad)+(one_minus_slowk*slowEMA); + + outReal[outIdx++] = fastEMA - slowEMA; + } + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::AdOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ cli::array^ inVolume, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode adOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ float inVolume[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ADOSC( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ const float inVolume[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int today, outIdx, lookbackTotal; +/* Generated */ int slowestPeriod; +/* Generated */ double high, low, close, tmp; +/* Generated */ double slowEMA, slowk, one_minus_slowk; +/* Generated */ double fastEMA, fastk, one_minus_fastk; +/* Generated */ double ad; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose||!inVolume) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 3; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 10; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( optInFastPeriod < optInSlowPeriod ) +/* Generated */ slowestPeriod = optInSlowPeriod; +/* Generated */ else +/* Generated */ slowestPeriod = optInFastPeriod; +/* Generated */ lookbackTotal = LOOKBACK_CALL(EMA)( slowestPeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ today = startIdx-lookbackTotal; +/* Generated */ ad = 0.0; +/* Generated */ #define CALCULATE_AD \ +/* Generated */ { \ +/* Generated */ high = inHigh[today]; \ +/* Generated */ low = inLow[today]; \ +/* Generated */ tmp = high-low; \ +/* Generated */ close = inClose[today]; \ +/* Generated */ if( tmp > 0.0 ) \ +/* Generated */ ad += (((close-low)-(high-close))/tmp)*((double)inVolume[today]); \ +/* Generated */ today++; \ +/* Generated */ } +/* Generated */ fastk = PER_TO_K( optInFastPeriod ); +/* Generated */ one_minus_fastk = 1.0 - fastk; +/* Generated */ slowk = PER_TO_K( optInSlowPeriod ); +/* Generated */ one_minus_slowk = 1.0 - slowk; +/* Generated */ CALCULATE_AD; +/* Generated */ fastEMA = ad; +/* Generated */ slowEMA = ad; +/* Generated */ while( today < startIdx ) +/* Generated */ { +/* Generated */ CALCULATE_AD; +/* Generated */ fastEMA = (fastk*ad)+(one_minus_fastk*fastEMA); +/* Generated */ slowEMA = (slowk*ad)+(one_minus_slowk*slowEMA); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ CALCULATE_AD; +/* Generated */ fastEMA = (fastk*ad)+(one_minus_fastk*fastEMA); +/* Generated */ slowEMA = (slowk*ad)+(one_minus_slowk*slowEMA); +/* Generated */ outReal[outIdx++] = fastEMA - slowEMA; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ADX.c b/src/ta_func/ta_ADX.c new file mode 100644 index 000000000..36438f180 --- /dev/null +++ b/src/ta_func/ta_ADX.c @@ -0,0 +1,785 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AM Adrian Michel + * MIF Mirek Fontan (mira@fontan.cz) + * GC guycom@users.sourceforge.net + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 082303 MF Fix #792298. Remove rounding. Bug reported by AM. + * 062704 MF Fix #965557. Div by zero bug reported by MIF. + * 082206 MF Fix #1544555. Div by zero bug reported by GC. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AdxLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int adxLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ADX_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return (2 * optInTimePeriod) + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_ADX,Adx) - 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ADX - Average Directional Movement Index + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Adx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Adx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode adx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ADX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int today, lookbackTotal, outIdx; + double prevHigh, prevLow, prevClose; + double prevMinusDM, prevPlusDM, prevTR; + double tempReal, tempReal2, diffP, diffM; + double minusDI, plusDI, sumDX, prevADX; + + int i; + + #define TRUE_RANGE(TH,TL,YC,OUT) {\ + OUT = TH-TL; \ + tempReal2 = std_fabs(TH-YC); \ + if( tempReal2 > OUT ) \ + OUT = tempReal2; \ + tempReal2 = std_fabs(TL-YC); \ + if( tempReal2 > OUT ) \ + OUT = tempReal2; \ + } + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* + * The DM1 (one period) is base on the largest part of + * today's range that is outside of yesterdays range. + * + * The following 7 cases explain how the +DM and -DM are + * calculated on one period: + * + * Case 1: Case 2: + * C| A| + * | | C| + * | +DM1 = (C-A) B| | +DM1 = 0 + * | -DM1 = 0 | -DM1 = (B-D) + * A| | D| + * | D| + * B| + * + * Case 3: Case 4: + * C| C| + * | A| | + * | +DM1 = (C-A) | | +DM1 = 0 + * | -DM1 = 0 B| | -DM1 = (B-D) + * A| | | + * | | D| + * B| | + * D| + * + * Case 5: Case 6: + * A| A| C| + * | C| +DM1 = 0 | | +DM1 = 0 + * | | -DM1 = 0 | | -DM1 = 0 + * | D| | | + * B| B| D| + * + * + * Case 7: + * + * C| + * A| | + * | | +DM=0 + * B| | -DM=0 + * D| + * + * In case 3 and 4, the rule is that the smallest delta between + * (C-A) and (B-D) determine which of +DM or -DM is zero. + * + * In case 7, (C-A) and (B-D) are equal, so both +DM and -DM are + * zero. + * + * The rules remain the same when A=B and C=D (when the highs + * equal the lows). + * + * When calculating the DM over a period > 1, the one-period DM + * for the desired period are initialy sum. In other word, + * for a -DM14, sum the -DM1 for the first 14 days (that's + * 13 values because there is no DM for the first day!) + * Subsequent DM are calculated using the Wilder's + * smoothing approach: + * + * Previous -DM14 + * Today's -DM14 = Previous -DM14 - -------------- + Today's -DM1 + * 14 + * + * (Same thing for +DM14) + * + * Calculation of a -DI14 is as follow: + * + * -DM14 + * -DI14 = -------- + * TR14 + * + * (Same thing for +DI14) + * + * Calculation of the TR14 is: + * + * Previous TR14 + * Today's TR14 = Previous TR14 - -------------- + Today's TR1 + * 14 + * + * The first TR14 is the summation of the first 14 TR1. See the + * TA_TRANGE function on how to calculate the true range. + * + * Calculation of the DX14 is: + * + * diffDI = ABS( (-DI14) - (+DI14) ) + * sumDI = (-DI14) + (+DI14) + * + * DX14 = 100 * (diffDI / sumDI) + * + * Calculation of the first ADX: + * + * ADX14 = SUM of the first 14 DX + * + * Calculation of subsequent ADX: + * + * ((Previous ADX14)*(14-1))+ Today's DX + * ADX14 = ------------------------------------- + * 14 + * + * Reference: + * New Concepts In Technical Trading Systems, J. Welles Wilder Jr + */ + + /* Original implementation from Wilder's book was doing some integer + * rounding in its calculations. + * + * This was understandable in the context that at the time the book + * was written, most user were doing the calculation by hand. + * + * For a computer, rounding is unnecessary (and even problematic when inputs + * are close to 1). + * + * TA-Lib does not do the rounding. Still, if you want to reproduce Wilder's examples, + * you can comment out the following #undef/#define and rebuild the library. + */ + #undef round_pos + #define round_pos(x) (x) + + lookbackTotal = (2*optInTimePeriod) + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_ADX,Adx) - 1; + + /* Adjust startIdx to account for the lookback period. */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Indicate where the next output should be put + * in the outReal. + */ + outIdx = 0; + + /* Process the initial DM and TR */ + VALUE_HANDLE_DEREF(outBegIdx) = today = startIdx; + + prevMinusDM = 0.0; + prevPlusDM = 0.0; + prevTR = 0.0; + today = startIdx - lookbackTotal; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + prevClose = inClose[today]; + i = optInTimePeriod-1; + while( i-- > 0 ) + { + /* Calculate the prevMinusDM and prevPlusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + else if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR += tempReal; + prevClose = inClose[today]; + } + + /* Add up all the initial DX. */ + sumDX = 0.0; + i = optInTimePeriod; + while( i-- > 0 ) + { + /* Calculate the prevMinusDM and prevPlusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + prevMinusDM -= prevMinusDM/optInTimePeriod; + prevPlusDM -= prevPlusDM/optInTimePeriod; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + else if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + + /* Calculate the DX. The value is rounded (see Wilder book). */ + if( !TA_IS_ZERO(prevTR) ) + { + minusDI = round_pos(100.0*(prevMinusDM/prevTR)); + plusDI = round_pos(100.0*(prevPlusDM/prevTR)); + /* This loop is just to accumulate the initial DX */ + tempReal = minusDI+plusDI; + if( !TA_IS_ZERO(tempReal) ) + sumDX += round_pos( 100.0 * (std_fabs(minusDI-plusDI)/tempReal) ); + } + } + + /* Calculate the first ADX */ + prevADX = round_pos( sumDX / optInTimePeriod ); + + /* Skip the unstable period */ + i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_ADX,Adx); + while( i-- > 0 ) + { + /* Calculate the prevMinusDM and prevPlusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + prevMinusDM -= prevMinusDM/optInTimePeriod; + prevPlusDM -= prevPlusDM/optInTimePeriod; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + else if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + + if( !TA_IS_ZERO(prevTR) ) + { + /* Calculate the DX. The value is rounded (see Wilder book). */ + minusDI = round_pos(100.0*(prevMinusDM/prevTR)); + plusDI = round_pos(100.0*(prevPlusDM/prevTR)); + tempReal = minusDI+plusDI; + if( !TA_IS_ZERO(tempReal) ) + { + tempReal = round_pos(100.0*(std_fabs(minusDI-plusDI)/tempReal)); + /* Calculate the ADX */ + prevADX = round_pos(((prevADX*(optInTimePeriod-1))+tempReal)/optInTimePeriod); + } + } + } + + /* Output the first ADX */ + outReal[0] = prevADX; + outIdx = 1; + + /* Calculate and output subsequent ADX */ + while( today < endIdx ) + { + /* Calculate the prevMinusDM and prevPlusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + prevMinusDM -= prevMinusDM/optInTimePeriod; + prevPlusDM -= prevPlusDM/optInTimePeriod; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + else if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + + if( !TA_IS_ZERO(prevTR) ) + { + /* Calculate the DX. The value is rounded (see Wilder book). */ + minusDI = round_pos(100.0*(prevMinusDM/prevTR)); + plusDI = round_pos(100.0*(prevPlusDM/prevTR)); + tempReal = minusDI+plusDI; + if( !TA_IS_ZERO(tempReal) ) + { + tempReal = round_pos(100.0*(std_fabs(minusDI-plusDI)/tempReal)); + /* Calculate the ADX */ + prevADX = round_pos(((prevADX*(optInTimePeriod-1))+tempReal)/optInTimePeriod); + } + } + + /* Output the ADX */ + outReal[outIdx++] = prevADX; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Adx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode adx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ADX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int today, lookbackTotal, outIdx; +/* Generated */ double prevHigh, prevLow, prevClose; +/* Generated */ double prevMinusDM, prevPlusDM, prevTR; +/* Generated */ double tempReal, tempReal2, diffP, diffM; +/* Generated */ double minusDI, plusDI, sumDX, prevADX; +/* Generated */ int i; +/* Generated */ #define TRUE_RANGE(TH,TL,YC,OUT) {\ +/* Generated */ OUT = TH-TL; \ +/* Generated */ tempReal2 = std_fabs(TH-YC); \ +/* Generated */ if( tempReal2 > OUT ) \ +/* Generated */ OUT = tempReal2; \ +/* Generated */ tempReal2 = std_fabs(TL-YC); \ +/* Generated */ if( tempReal2 > OUT ) \ +/* Generated */ OUT = tempReal2; \ +/* Generated */ } +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ #undef round_pos +/* Generated */ #define round_pos(x) (x) +/* Generated */ lookbackTotal = (2*optInTimePeriod) + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_ADX,Adx) - 1; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = today = startIdx; +/* Generated */ prevMinusDM = 0.0; +/* Generated */ prevPlusDM = 0.0; +/* Generated */ prevTR = 0.0; +/* Generated */ today = startIdx - lookbackTotal; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ prevClose = inClose[today]; +/* Generated */ i = optInTimePeriod-1; +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ else if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR += tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ sumDX = 0.0; +/* Generated */ i = optInTimePeriod; +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ prevMinusDM -= prevMinusDM/optInTimePeriod; +/* Generated */ prevPlusDM -= prevPlusDM/optInTimePeriod; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ else if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ if( !TA_IS_ZERO(prevTR) ) +/* Generated */ { +/* Generated */ minusDI = round_pos(100.0*(prevMinusDM/prevTR)); +/* Generated */ plusDI = round_pos(100.0*(prevPlusDM/prevTR)); +/* Generated */ tempReal = minusDI+plusDI; +/* Generated */ if( !TA_IS_ZERO(tempReal) ) +/* Generated */ sumDX += round_pos( 100.0 * (std_fabs(minusDI-plusDI)/tempReal) ); +/* Generated */ } +/* Generated */ } +/* Generated */ prevADX = round_pos( sumDX / optInTimePeriod ); +/* Generated */ i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_ADX,Adx); +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ prevMinusDM -= prevMinusDM/optInTimePeriod; +/* Generated */ prevPlusDM -= prevPlusDM/optInTimePeriod; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ else if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ if( !TA_IS_ZERO(prevTR) ) +/* Generated */ { +/* Generated */ minusDI = round_pos(100.0*(prevMinusDM/prevTR)); +/* Generated */ plusDI = round_pos(100.0*(prevPlusDM/prevTR)); +/* Generated */ tempReal = minusDI+plusDI; +/* Generated */ if( !TA_IS_ZERO(tempReal) ) +/* Generated */ { +/* Generated */ tempReal = round_pos(100.0*(std_fabs(minusDI-plusDI)/tempReal)); +/* Generated */ prevADX = round_pos(((prevADX*(optInTimePeriod-1))+tempReal)/optInTimePeriod); +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ outReal[0] = prevADX; +/* Generated */ outIdx = 1; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ prevMinusDM -= prevMinusDM/optInTimePeriod; +/* Generated */ prevPlusDM -= prevPlusDM/optInTimePeriod; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ else if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ if( !TA_IS_ZERO(prevTR) ) +/* Generated */ { +/* Generated */ minusDI = round_pos(100.0*(prevMinusDM/prevTR)); +/* Generated */ plusDI = round_pos(100.0*(prevPlusDM/prevTR)); +/* Generated */ tempReal = minusDI+plusDI; +/* Generated */ if( !TA_IS_ZERO(tempReal) ) +/* Generated */ { +/* Generated */ tempReal = round_pos(100.0*(std_fabs(minusDI-plusDI)/tempReal)); +/* Generated */ prevADX = round_pos(((prevADX*(optInTimePeriod-1))+tempReal)/optInTimePeriod); +/* Generated */ } +/* Generated */ } +/* Generated */ outReal[outIdx++] = prevADX; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ADXR.c b/src/ta_func/ta_ADXR.c new file mode 100644 index 000000000..8008d158a --- /dev/null +++ b/src/ta_func/ta_ADXR.c @@ -0,0 +1,374 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AM Adrian Michel + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 082303 MF Fix #792298. Remove rounding. Bug reported by AM. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AdxrLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int adxrLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ADXR_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + if( optInTimePeriod > 1 ) + return optInTimePeriod + LOOKBACK_CALL(ADX)( optInTimePeriod) - 1; + else + return 3; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ADXR - Average Directional Movement Index Rating + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Adxr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Adxr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode adxr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ADXR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + ARRAY_REF( adx ); + int adxrLookback, i, j, outIdx, nbElement; + ENUM_DECLARATION(RetCode) retCode; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Original implementation from Wilder's book was doing some integer + * rounding in its calculations. + * + * This was understandable in the context that at the time the book + * was written, most user were doing the calculation by hand. + * + * For a computer, rounding is unnecessary (and even problematic when inputs + * are close to 1). + * + * TA-Lib does not do the rounding. Still, if you want to reproduce Wilder's examples, + * you can comment out the following #undef/#define and rebuild the library. + */ + #undef round_pos + #define round_pos(x) (x) + + /* Move up the start index if there is not + * enough initial data. + * Always one price bar gets consumed. + */ + adxrLookback = LOOKBACK_CALL(ADXR)( optInTimePeriod ); + + if( startIdx < adxrLookback ) + startIdx = adxrLookback; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + ARRAY_ALLOC( adx, endIdx-startIdx+optInTimePeriod ); + #if !defined( _JAVA ) + if( !adx ) + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + #endif + + retCode = FUNCTION_CALL(ADX)( startIdx-(optInTimePeriod-1), endIdx, + inHigh, inLow, inClose, + optInTimePeriod, outBegIdx, outNBElement, adx ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + ARRAY_FREE( adx ); + return retCode; + } + + i = optInTimePeriod-1; + j = 0; + outIdx = 0; + nbElement = endIdx-startIdx+2; + while( --nbElement != 0 ) + outReal[outIdx++] = round_pos( (adx[i++]+adx[j++])/2.0 ); + + ARRAY_FREE( adx ); + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Adxr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode adxr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ADXR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF( adx ); +/* Generated */ int adxrLookback, i, j, outIdx, nbElement; +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ #undef round_pos +/* Generated */ #define round_pos(x) (x) +/* Generated */ adxrLookback = LOOKBACK_CALL(ADXR)( optInTimePeriod ); +/* Generated */ if( startIdx < adxrLookback ) +/* Generated */ startIdx = adxrLookback; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ARRAY_ALLOC( adx, endIdx-startIdx+optInTimePeriod ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !adx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ #endif +/* Generated */ retCode = FUNCTION_CALL(ADX)( startIdx-(optInTimePeriod-1), endIdx, +/* Generated */ inHigh, inLow, inClose, +/* Generated */ optInTimePeriod, outBegIdx, outNBElement, adx ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ ARRAY_FREE( adx ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ i = optInTimePeriod-1; +/* Generated */ j = 0; +/* Generated */ outIdx = 0; +/* Generated */ nbElement = endIdx-startIdx+2; +/* Generated */ while( --nbElement != 0 ) +/* Generated */ outReal[outIdx++] = round_pos( (adx[i++]+adx[j++])/2.0 ); +/* Generated */ ARRAY_FREE( adx ); +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_APO.c b/src/ta_func/ta_APO.c new file mode 100644 index 000000000..94060ddac --- /dev/null +++ b/src/ta_func/ta_APO.c @@ -0,0 +1,597 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AA Andrew Atkinson + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 062804 MF Resolve div by zero bug on limit case. + * 020605 AA Fix #1117666 Lookback & out-of-bound bug. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::ApoLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int apoLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_APO_Lookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* The slow MA is the key factor determining the lookback period. */ + return LOOKBACK_CALL(MA)( max(optInSlowPeriod,optInFastPeriod), optInMAType ); +} + + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_APO - Absolute Price Oscillator + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * optInMAType: + * Type of Moving Average + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Apo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Apo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode apo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_APO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_REF(tempBuffer); + ENUM_DECLARATION(RetCode) retCode; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Allocate an intermediate buffer. */ + ARRAY_ALLOC(tempBuffer, (endIdx-startIdx+1) ); + #if !defined(_JAVA) + if( !tempBuffer ) + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + #endif + + retCode = FUNCTION_CALL(INT_PO)( startIdx, endIdx, + inReal, + optInFastPeriod, + optInSlowPeriod, + optInMAType, + outBegIdx, + outNBElement, + outReal, + tempBuffer, + 0 /* No percentage. */ ); + + ARRAY_FREE( tempBuffer ); + + return retCode; +} + +/* Internal price oscillator function. + * + * A buffer must be provided for intermediate processing. + */ +#if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) + enum class Core::RetCode Core::TA_INT_PO( int startIdx, + int endIdx, + SubArray^ inReal, + int optInFastPeriod, + int optInSlowPeriod, + MAType optInMethod_2, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outReal, + cli::array^ tempBuffer, + int doPercentageOutput ) + +#elif defined( _MANAGED ) + enum class Core::RetCode Core::TA_INT_PO( int startIdx, + int endIdx, + cli::array^ inReal, + int optInFastPeriod, + int optInSlowPeriod, + MAType optInMethod_2, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outReal, + cli::array^ tempBuffer, + int doPercentageOutput ) +#elif defined( _JAVA ) +RetCode TA_INT_PO( int startIdx, + int endIdx, + INPUT_TYPE inReal[], + int optInFastPeriod, + int optInSlowPeriod, + MAType optInMethod_2, + MInteger outBegIdx, + MInteger outNBElement, + double outReal[], + double tempBuffer[], + int doPercentageOutput ) + +#else +TA_RetCode TA_PREFIX(INT_PO)( int startIdx, + int endIdx, + const INPUT_TYPE *inReal, + int optInFastPeriod, + int optInSlowPeriod, + TA_MAType optInMethod_2, + int *outBegIdx, + int *outNBElement, + double *outReal, + double *tempBuffer, + int doPercentageOutput ) +#endif +{ + ENUM_DECLARATION(RetCode) retCode; + + double tempReal; + int tempInteger; + VALUE_HANDLE_INT(outBegIdx1); + VALUE_HANDLE_INT(outNbElement1); + VALUE_HANDLE_INT(outBegIdx2); + VALUE_HANDLE_INT(outNbElement2); + + int i, j; + + /* Make sure slow is really slower than + * the fast period! if not, swap... + */ + if( optInSlowPeriod < optInFastPeriod ) + { + /* swap */ + tempInteger = optInSlowPeriod; + optInSlowPeriod = optInFastPeriod; + optInFastPeriod = tempInteger; + } + + /* Calculate the fast MA into the tempBuffer. */ + retCode = FUNCTION_CALL(MA)( startIdx, endIdx, + inReal, + optInFastPeriod, + optInMethod_2, + VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), + tempBuffer ); + + if( retCode == ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + /* Calculate the slow MA into the output. */ + retCode = FUNCTION_CALL(MA)( startIdx, endIdx, + inReal, + optInSlowPeriod, + optInMethod_2, + VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), + outReal ); + + if( retCode == ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + tempInteger = VALUE_HANDLE_GET(outBegIdx1) - VALUE_HANDLE_GET(outBegIdx2); + if( doPercentageOutput != 0 ) + { + /* Calculate ((fast MA)-(slow MA))/(slow MA) in the output. */ + for( i=0,j=tempInteger; i < VALUE_HANDLE_GET(outNbElement1); i++, j++ ) + { + tempReal = outReal[i]; + if( !TA_IS_ZERO(tempReal) ) + outReal[i] = ((tempBuffer[j]-tempReal)/tempReal)*100.0; + else + outReal[i] = 0.0; + } + } + else + { + /* Calculate (fast MA)-(slow MA) in the output. */ + for( i=0,j=tempInteger; i < VALUE_HANDLE_GET(outNbElement1); i++, j++ ) + outReal[i] = tempBuffer[j]-outReal[i]; + } + + VALUE_HANDLE_DEREF(outBegIdx) = VALUE_HANDLE_GET(outBegIdx1); + VALUE_HANDLE_DEREF(outNBElement) = VALUE_HANDLE_GET(outNbElement1); + } + } + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + } + + return retCode; +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Apo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode apo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_APO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF(tempBuffer); +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ ARRAY_ALLOC(tempBuffer, (endIdx-startIdx+1) ); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !tempBuffer ) +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ #endif +/* Generated */ retCode = FUNCTION_CALL(INT_PO)( startIdx, endIdx, +/* Generated */ inReal, +/* Generated */ optInFastPeriod, +/* Generated */ optInSlowPeriod, +/* Generated */ optInMAType, +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ outReal, +/* Generated */ tempBuffer, +/* Generated */ 0 ); +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) +/* Generated */ enum class Core::RetCode Core::TA_INT_PO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInFastPeriod, +/* Generated */ int optInSlowPeriod, +/* Generated */ MAType optInMethod_2, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal, +/* Generated */ cli::array^ tempBuffer, +/* Generated */ int doPercentageOutput ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TA_INT_PO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, +/* Generated */ int optInSlowPeriod, +/* Generated */ MAType optInMethod_2, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal, +/* Generated */ cli::array^ tempBuffer, +/* Generated */ int doPercentageOutput ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ RetCode TA_INT_PO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ INPUT_TYPE inReal[], +/* Generated */ int optInFastPeriod, +/* Generated */ int optInSlowPeriod, +/* Generated */ MAType optInMethod_2, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[], +/* Generated */ double tempBuffer[], +/* Generated */ int doPercentageOutput ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PREFIX(INT_PO)( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const INPUT_TYPE *inReal, +/* Generated */ int optInFastPeriod, +/* Generated */ int optInSlowPeriod, +/* Generated */ TA_MAType optInMethod_2, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double *outReal, +/* Generated */ double *tempBuffer, +/* Generated */ int doPercentageOutput ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ double tempReal; +/* Generated */ int tempInteger; +/* Generated */ VALUE_HANDLE_INT(outBegIdx1); +/* Generated */ VALUE_HANDLE_INT(outNbElement1); +/* Generated */ VALUE_HANDLE_INT(outBegIdx2); +/* Generated */ VALUE_HANDLE_INT(outNbElement2); +/* Generated */ int i, j; +/* Generated */ if( optInSlowPeriod < optInFastPeriod ) +/* Generated */ { +/* Generated */ tempInteger = optInSlowPeriod; +/* Generated */ optInSlowPeriod = optInFastPeriod; +/* Generated */ optInFastPeriod = tempInteger; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL(MA)( startIdx, endIdx, +/* Generated */ inReal, +/* Generated */ optInFastPeriod, +/* Generated */ optInMethod_2, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), +/* Generated */ tempBuffer ); +/* Generated */ if( retCode == ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ retCode = FUNCTION_CALL(MA)( startIdx, endIdx, +/* Generated */ inReal, +/* Generated */ optInSlowPeriod, +/* Generated */ optInMethod_2, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), +/* Generated */ outReal ); +/* Generated */ if( retCode == ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ tempInteger = VALUE_HANDLE_GET(outBegIdx1) - VALUE_HANDLE_GET(outBegIdx2); +/* Generated */ if( doPercentageOutput != 0 ) +/* Generated */ { +/* Generated */ for( i=0,j=tempInteger; i < VALUE_HANDLE_GET(outNbElement1); i++, j++ ) +/* Generated */ { +/* Generated */ tempReal = outReal[i]; +/* Generated */ if( !TA_IS_ZERO(tempReal) ) +/* Generated */ outReal[i] = ((tempBuffer[j]-tempReal)/tempReal)*100.0; +/* Generated */ else +/* Generated */ outReal[i] = 0.0; +/* Generated */ } +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ for( i=0,j=tempInteger; i < VALUE_HANDLE_GET(outNbElement1); i++, j++ ) +/* Generated */ outReal[i] = tempBuffer[j]-outReal[i]; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = VALUE_HANDLE_GET(outBegIdx1); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = VALUE_HANDLE_GET(outNbElement1); +/* Generated */ } +/* Generated */ } +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ } +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_AROON.c b/src/ta_func/ta_AROON.c new file mode 100644 index 000000000..9ef005beb --- /dev/null +++ b/src/ta_func/ta_AROON.c @@ -0,0 +1,450 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AM Adrian Michel + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 050703 MF Fix algorithm base on Adrian Michel bug report #748163 + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AroonLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int aroonLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_AROON_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_AROON - Aroon + * + * Input = High, Low + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Aroon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outAroonDown, +/* Generated */ cli::array^ outAroonUp ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Aroon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outAroonDown, +/* Generated */ cli::array^ outAroonUp ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode aroon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outAroonDown[], +/* Generated */ double outAroonUp[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_AROON( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outAroonDown[], +/* Generated */ double outAroonUp[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + double lowest, highest, tmp, factor; + int outIdx; + int trailingIdx, lowestIdx, highestIdx, today, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outAroonDown ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outAroonUp ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* This function is using a speed optimized algorithm + * for the min/max logic. + * + * You might want to first look at how TA_MIN/TA_MAX works + * and this function will become easier to understand. + */ + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < optInTimePeriod ) + startIdx = optInTimePeriod; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-optInTimePeriod; + lowestIdx = -1; + highestIdx = -1; + lowest = 0.0; + highest = 0.0; + factor = (double)100.0/(double)optInTimePeriod; + + while( today <= endIdx ) + { + /* Keep track of the lowestIdx */ + tmp = inLow[today]; + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inLow[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmp = inLow[i]; + if( tmp <= lowest ) + { + lowestIdx = i; + lowest = tmp; + } + } + } + else if( tmp <= lowest ) + { + lowestIdx = today; + lowest = tmp; + } + + /* Keep track of the highestIdx */ + tmp = inHigh[today]; + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inHigh[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmp = inHigh[i]; + if( tmp >= highest ) + { + highestIdx = i; + highest = tmp; + } + } + } + else if( tmp >= highest ) + { + highestIdx = today; + highest = tmp; + } + + /* Note: Do not forget that input and output buffer can be the same, + * so writing to the output is the last thing being done here. + */ + outAroonUp[outIdx] = factor*(optInTimePeriod-(today-highestIdx)); + outAroonDown[outIdx] = factor*(optInTimePeriod-(today-lowestIdx)); + + outIdx++; + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Aroon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outAroonDown, +/* Generated */ cli::array^ outAroonUp ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode aroon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outAroonDown[], +/* Generated */ double outAroonUp[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_AROON( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outAroonDown[], +/* Generated */ double outAroonUp[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double lowest, highest, tmp, factor; +/* Generated */ int outIdx; +/* Generated */ int trailingIdx, lowestIdx, highestIdx, today, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outAroonDown ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outAroonUp ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < optInTimePeriod ) +/* Generated */ startIdx = optInTimePeriod; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-optInTimePeriod; +/* Generated */ lowestIdx = -1; +/* Generated */ highestIdx = -1; +/* Generated */ lowest = 0.0; +/* Generated */ highest = 0.0; +/* Generated */ factor = (double)100.0/(double)optInTimePeriod; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inLow[today]; +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inLow[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inLow[i]; +/* Generated */ if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ tmp = inHigh[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inHigh[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inHigh[i]; +/* Generated */ if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ outAroonUp[outIdx] = factor*(optInTimePeriod-(today-highestIdx)); +/* Generated */ outAroonDown[outIdx] = factor*(optInTimePeriod-(today-lowestIdx)); +/* Generated */ outIdx++; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_AROONOSC.c b/src/ta_func/ta_AROONOSC.c new file mode 100644 index 000000000..5d99c4d5a --- /dev/null +++ b/src/ta_func/ta_AROONOSC.c @@ -0,0 +1,456 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AM Adrian Michel + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 050703 MF Fix algorithm base on Adrian Michel bug report #748163 + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AroonOscLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int aroonOscLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_AROONOSC_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_AROONOSC - Aroon Oscillator + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::AroonOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::AroonOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode aroonOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_AROONOSC( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + double lowest, highest, tmp, factor, aroon; + int outIdx; + int trailingIdx, lowestIdx, highestIdx, today, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* This code is almost identical to the TA_AROON function + * except that instead of outputing ArroonUp and AroonDown + * individually, an oscillator is build from both. + * + * AroonOsc = AroonUp- AroonDown; + * + */ + + /* This function is using a speed optimized algorithm + * for the min/max logic. + * + * You might want to first look at how TA_MIN/TA_MAX works + * and this function will become easier to understand. + */ + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < optInTimePeriod ) + startIdx = optInTimePeriod; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-optInTimePeriod; + lowestIdx = -1; + highestIdx = -1; + lowest = 0.0; + highest = 0.0; + factor = (double)100.0/(double)optInTimePeriod; + + while( today <= endIdx ) + { + /* Keep track of the lowestIdx */ + tmp = inLow[today]; + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inLow[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmp = inLow[i]; + if( tmp <= lowest ) + { + lowestIdx = i; + lowest = tmp; + } + } + } + else if( tmp <= lowest ) + { + lowestIdx = today; + lowest = tmp; + } + + /* Keep track of the highestIdx */ + tmp = inHigh[today]; + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inHigh[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmp = inHigh[i]; + if( tmp >= highest ) + { + highestIdx = i; + highest = tmp; + } + } + } + else if( tmp >= highest ) + { + highestIdx = today; + highest = tmp; + } + + /* The oscillator is the following: + * AroonUp = factor*(optInTimePeriod-(today-highestIdx)); + * AroonDown = factor*(optInTimePeriod-(today-lowestIdx)); + * AroonOsc = AroonUp-AroonDown; + * + * An arithmetic simplification give us: + * Aroon = factor*(highestIdx-lowestIdx) + */ + aroon = factor*(highestIdx-lowestIdx); + + /* Note: Do not forget that input and output buffer can be the same, + * so writing to the output is the last thing being done here. + */ + outReal[outIdx] = aroon; + + outIdx++; + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::AroonOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode aroonOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_AROONOSC( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double lowest, highest, tmp, factor, aroon; +/* Generated */ int outIdx; +/* Generated */ int trailingIdx, lowestIdx, highestIdx, today, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < optInTimePeriod ) +/* Generated */ startIdx = optInTimePeriod; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-optInTimePeriod; +/* Generated */ lowestIdx = -1; +/* Generated */ highestIdx = -1; +/* Generated */ lowest = 0.0; +/* Generated */ highest = 0.0; +/* Generated */ factor = (double)100.0/(double)optInTimePeriod; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inLow[today]; +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inLow[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inLow[i]; +/* Generated */ if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ tmp = inHigh[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inHigh[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inHigh[i]; +/* Generated */ if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ aroon = factor*(highestIdx-lowestIdx); +/* Generated */ outReal[outIdx] = aroon; +/* Generated */ outIdx++; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ASIN.c b/src/ta_func/ta_ASIN.c new file mode 100644 index 000000000..c118cae6e --- /dev/null +++ b/src/ta_func/ta_ASIN.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AsinLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int asinLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ASIN_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ASIN - Vector Trigonometric ASin + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Asin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Asin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode asin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ASIN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_asin(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Asin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode asin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ASIN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_asin(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ATAN.c b/src/ta_func/ta_ATAN.c new file mode 100644 index 000000000..b8efdc0f4 --- /dev/null +++ b/src/ta_func/ta_ATAN.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AtanLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int atanLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ATAN_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ATAN - Vector Trigonometric ATan + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Atan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Atan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode atan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ATAN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_atan(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Atan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode atan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ATAN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_atan(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ATR.c b/src/ta_func/ta_ATR.c new file mode 100644 index 000000000..0367fffac --- /dev/null +++ b/src/ta_func/ta_ATR.c @@ -0,0 +1,453 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AtrLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int atrLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ATR_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* The ATR lookback is the sum of: + * 1 + (optInTimePeriod - 1) + * + * Where 1 is for the True Range, and + * (optInTimePeriod-1) is for the simple + * moving average. + */ + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_ATR,Atr); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ATR - Average True Range + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Atr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Atr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode atr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ATR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ENUM_DECLARATION(RetCode) retCode; + int outIdx, today, lookbackTotal; + int nbATR; + VALUE_HANDLE_INT(outBegIdx1); + VALUE_HANDLE_INT(outNbElement1); + + double prevATR; + ARRAY_REF( tempBuffer ); + ARRAY_LOCAL(prevATRTemp,1); + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Average True Range is the greatest of the following: + * + * val1 = distance from today's high to today's low. + * val2 = distance from yesterday's close to today's high. + * val3 = distance from yesterday's close to today's low. + * + * These value are averaged for the specified period using + * Wilder method. This method have an unstable period comparable + * to and Exponential Moving Average (EMA). + */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(ATR)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + + /* Trap the case where no smoothing is needed. */ + if( optInTimePeriod <= 1 ) + { + /* No smoothing needed. Just do a TRANGE. */ + return FUNCTION_CALL(TRANGE)( startIdx, endIdx, + inHigh, inLow, inClose, + outBegIdx, outNBElement, outReal ); + } + + /* Allocate an intermediate buffer for TRANGE. */ + ARRAY_ALLOC(tempBuffer, lookbackTotal+(endIdx-startIdx)+1 ); + + /* Do TRANGE in the intermediate buffer. */ + retCode = FUNCTION_CALL(TRANGE)( (startIdx-lookbackTotal+1), endIdx, + inHigh, inLow, inClose, + VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), + tempBuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + ARRAY_FREE( tempBuffer ); + return retCode; + } + + /* First value of the ATR is a simple Average of + * the TRANGE output for the specified period. + */ + retCode = FUNCTION_CALL_DOUBLE(INT_SMA)( optInTimePeriod-1, + optInTimePeriod-1, + tempBuffer, optInTimePeriod, + VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), + prevATRTemp ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + ARRAY_FREE( tempBuffer ); + return retCode; + } + prevATR = prevATRTemp[0]; + + /* Subsequent value are smoothed using the + * previous ATR value (Wilder's approach). + * 1) Multiply the previous ATR by 'period-1'. + * 2) Add today TR value. + * 3) Divide by 'period'. + */ + today = optInTimePeriod; + outIdx = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_ATR,Atr); + /* Skip the unstable period. */ + while( outIdx != 0 ) + { + prevATR *= optInTimePeriod - 1; + prevATR += tempBuffer[today++]; + prevATR /= optInTimePeriod; + outIdx--; + } + + /* Now start to write the final ATR in the caller + * provided outReal. + */ + outIdx = 1; + outReal[0] = prevATR; + + /* Now do the number of requested ATR. */ + nbATR = (endIdx - startIdx)+1; + + while( --nbATR != 0 ) + { + prevATR *= optInTimePeriod - 1; + prevATR += tempBuffer[today++]; + prevATR /= optInTimePeriod; + outReal[outIdx++] = prevATR; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + ARRAY_FREE( tempBuffer ); + + return retCode; +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Atr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode atr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ATR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int outIdx, today, lookbackTotal; +/* Generated */ int nbATR; +/* Generated */ VALUE_HANDLE_INT(outBegIdx1); +/* Generated */ VALUE_HANDLE_INT(outNbElement1); +/* Generated */ double prevATR; +/* Generated */ ARRAY_REF( tempBuffer ); +/* Generated */ ARRAY_LOCAL(prevATRTemp,1); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ lookbackTotal = LOOKBACK_CALL(ATR)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ if( optInTimePeriod <= 1 ) +/* Generated */ { +/* Generated */ return FUNCTION_CALL(TRANGE)( startIdx, endIdx, +/* Generated */ inHigh, inLow, inClose, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ } +/* Generated */ ARRAY_ALLOC(tempBuffer, lookbackTotal+(endIdx-startIdx)+1 ); +/* Generated */ retCode = FUNCTION_CALL(TRANGE)( (startIdx-lookbackTotal+1), endIdx, +/* Generated */ inHigh, inLow, inClose, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), +/* Generated */ tempBuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(INT_SMA)( optInTimePeriod-1, +/* Generated */ optInTimePeriod-1, +/* Generated */ tempBuffer, optInTimePeriod, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), +/* Generated */ prevATRTemp ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ prevATR = prevATRTemp[0]; +/* Generated */ today = optInTimePeriod; +/* Generated */ outIdx = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_ATR,Atr); +/* Generated */ while( outIdx != 0 ) +/* Generated */ { +/* Generated */ prevATR *= optInTimePeriod - 1; +/* Generated */ prevATR += tempBuffer[today++]; +/* Generated */ prevATR /= optInTimePeriod; +/* Generated */ outIdx--; +/* Generated */ } +/* Generated */ outIdx = 1; +/* Generated */ outReal[0] = prevATR; +/* Generated */ nbATR = (endIdx - startIdx)+1; +/* Generated */ while( --nbATR != 0 ) +/* Generated */ { +/* Generated */ prevATR *= optInTimePeriod - 1; +/* Generated */ prevATR += tempBuffer[today++]; +/* Generated */ prevATR /= optInTimePeriod; +/* Generated */ outReal[outIdx++] = prevATR; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_AVGPRICE.c b/src/ta_func/ta_AVGPRICE.c new file mode 100644 index 000000000..36427e8e9 --- /dev/null +++ b/src/ta_func/ta_AVGPRICE.c @@ -0,0 +1,278 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 112605 MF Fix outBegIdx when startIdx != 0 + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::AvgPriceLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int avgPriceLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_AVGPRICE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* This function have no lookback needed. */ + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_AVGPRICE - Average Price + * + * Input = Open, High, Low, Close + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::AvgPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::AvgPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode avgPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_AVGPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Average price = (High + Low + Open + Close) / 4 */ + + outIdx = 0; + + for( i=startIdx; i <= endIdx; i++ ) + { + outReal[outIdx++] = ( inHigh [i] + + inLow [i] + + inClose[i] + + inOpen [i]) / 4; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::AvgPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode avgPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_AVGPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ outIdx = 0; +/* Generated */ for( i=startIdx; i <= endIdx; i++ ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = ( inHigh [i] + +/* Generated */ inLow [i] + +/* Generated */ inClose[i] + +/* Generated */ inOpen [i]) / 4; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_BBANDS.c b/src/ta_func/ta_BBANDS.c new file mode 100644 index 000000000..e1c198802 --- /dev/null +++ b/src/ta_func/ta_BBANDS.c @@ -0,0 +1,643 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * JV Jesus Viver <324122@cienz.unizar.es> + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 010503 MF Fix to always use SMA for the STDDEV (Thanks to JV). + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::BbandsLookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int bbandsLookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_BBANDS_Lookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ TA_MAType optInMAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInNbDevUp == TA_REAL_DEFAULT ) +/* Generated */ optInNbDevUp = 2.000000e+0; +/* Generated */ else if( (optInNbDevUp < -3.000000e+37) ||/* Generated */ (optInNbDevUp > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInNbDevDn == TA_REAL_DEFAULT ) +/* Generated */ optInNbDevDn = 2.000000e+0; +/* Generated */ else if( (optInNbDevDn < -3.000000e+37) ||/* Generated */ (optInNbDevDn > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInNbDevUp); + UNUSED_VARIABLE(optInNbDevDn); + + /* The lookback is driven by the middle band moving average. */ + return LOOKBACK_CALL(MA)( optInTimePeriod, optInMAType ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_BBANDS - Bollinger Bands + * + * Input = double + * Output = double, double, double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * optInNbDevUp:(From TA_REAL_MIN to TA_REAL_MAX) + * Deviation multiplier for upper band + * + * optInNbDevDn:(From TA_REAL_MIN to TA_REAL_MAX) + * Deviation multiplier for lower band + * + * optInMAType: + * Type of Moving Average + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Bbands( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outRealUpperBand, +/* Generated */ cli::array^ outRealMiddleBand, +/* Generated */ cli::array^ outRealLowerBand ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Bbands( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outRealUpperBand, +/* Generated */ cli::array^ outRealMiddleBand, +/* Generated */ cli::array^ outRealLowerBand ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode bbands( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outRealUpperBand[], +/* Generated */ double outRealMiddleBand[], +/* Generated */ double outRealLowerBand[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_BBANDS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outRealUpperBand[], +/* Generated */ double outRealMiddleBand[], +/* Generated */ double outRealLowerBand[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ENUM_DECLARATION(RetCode) retCode; + int i; + double tempReal, tempReal2; + ARRAY_REF(tempBuffer1); + ARRAY_REF(tempBuffer2); + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInNbDevUp == TA_REAL_DEFAULT ) +/* Generated */ optInNbDevUp = 2.000000e+0; +/* Generated */ else if( (optInNbDevUp < -3.000000e+37) ||/* Generated */ (optInNbDevUp > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInNbDevDn == TA_REAL_DEFAULT ) +/* Generated */ optInNbDevDn = 2.000000e+0; +/* Generated */ else if( (optInNbDevDn < -3.000000e+37) ||/* Generated */ (optInNbDevDn > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outRealUpperBand ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outRealMiddleBand ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outRealLowerBand ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify TWO temporary buffer among the outputs. + * + * These temporary buffers allows to perform the + * calculation without any memory allocation. + * + * Whenever possible, make the tempBuffer1 be the + * middle band output. This will save one copy operation. + */ + #if defined(USE_SINGLE_PRECISION_INPUT) || defined( USE_SUBARRAY ) + tempBuffer1 = outRealMiddleBand; + tempBuffer2 = outRealLowerBand; + #else + if( inReal == outRealUpperBand ) + { + tempBuffer1 = outRealMiddleBand; + tempBuffer2 = outRealLowerBand; + } + else if( inReal == outRealLowerBand ) + { + tempBuffer1 = outRealMiddleBand; + tempBuffer2 = outRealUpperBand; + } + else if( inReal == outRealMiddleBand ) + { + tempBuffer1 = outRealLowerBand; + tempBuffer2 = outRealUpperBand; + } + else + { + tempBuffer1 = outRealMiddleBand; + tempBuffer2 = outRealUpperBand; + } + /* Check that the caller is not doing tricky things. + * (like using the input buffer in two output!) + */ + if( (tempBuffer1 == inReal) || (tempBuffer2 == inReal) ) + return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); + #endif + + + /* Calculate the middle band, which is a moving average. + * The other two bands will simply add/substract the + * standard deviation from this middle band. + */ + retCode = FUNCTION_CALL(MA)( startIdx, endIdx, inReal, + optInTimePeriod, optInMAType, + outBegIdx, outNBElement, tempBuffer1 ); + + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || ((int)VALUE_HANDLE_DEREF(outNBElement) == 0) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + /* Calculate the standard deviation into tempBuffer2. */ + if( optInMAType == ENUM_VALUE(MAType,TA_MAType_SMA,Sma) ) + { + /* A small speed optimization by re-using the + * already calculated SMA. + */ + FUNCTION_CALL(INT_stddev_using_precalc_ma)( inReal, tempBuffer1, + (int)VALUE_HANDLE_DEREF(outBegIdx), (int)VALUE_HANDLE_DEREF(outNBElement), + optInTimePeriod, tempBuffer2 ); + } + else + { + /* Calculate the Standard Deviation */ + retCode = FUNCTION_CALL(STDDEV)( (int)VALUE_HANDLE_DEREF(outBegIdx), endIdx, inReal, + optInTimePeriod, 1.0, + outBegIdx, outNBElement, tempBuffer2 ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + } + + /* Copy the MA calculation into the middle band ouput, unless + * the calculation was done into it already! + */ + #if !defined(USE_SINGLE_PRECISION_INPUT) + if( tempBuffer1 != outRealMiddleBand ) + { + ARRAY_COPY( outRealMiddleBand, tempBuffer1, VALUE_HANDLE_DEREF(outNBElement) ); + } + #endif + + /* Now do a tight loop to calculate the upper/lower band at + * the same time. + * + * All the following 5 loops are doing the same, except there + * is an attempt to speed optimize by eliminating uneeded + * multiplication. + */ + if( optInNbDevUp == optInNbDevDn ) + { + if( optInNbDevUp == 1.0 ) + { + /* No standard deviation multiplier needed. */ + for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) + { + tempReal = tempBuffer2[i]; + tempReal2 = outRealMiddleBand[i]; + outRealUpperBand[i] = tempReal2 + tempReal; + outRealLowerBand[i] = tempReal2 - tempReal; + } + } + else + { + /* Upper/lower band use the same standard deviation multiplier. */ + for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) + { + tempReal = tempBuffer2[i] * optInNbDevUp; + tempReal2 = outRealMiddleBand[i]; + outRealUpperBand[i] = tempReal2 + tempReal; + outRealLowerBand[i] = tempReal2 - tempReal; + } + } + } + else if( optInNbDevUp == 1.0 ) + { + /* Only lower band has a standard deviation multiplier. */ + for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) + { + tempReal = tempBuffer2[i]; + tempReal2 = outRealMiddleBand[i]; + outRealUpperBand[i] = tempReal2 + tempReal; + outRealLowerBand[i] = tempReal2 - (tempReal * optInNbDevDn); + } + } + else if( optInNbDevDn == 1.0 ) + { + /* Only upper band has a standard deviation multiplier. */ + for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) + { + tempReal = tempBuffer2[i]; + tempReal2 = outRealMiddleBand[i]; + outRealLowerBand[i] = tempReal2 - tempReal; + outRealUpperBand[i] = tempReal2 + (tempReal * optInNbDevUp); + } + } + else + { + /* Upper/lower band have distinctive standard deviation multiplier. */ + for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) + { + tempReal = tempBuffer2[i]; + tempReal2 = outRealMiddleBand[i]; + outRealUpperBand[i] = tempReal2 + (tempReal * optInNbDevUp); + outRealLowerBand[i] = tempReal2 - (tempReal * optInNbDevDn); + } + } + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Bbands( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outRealUpperBand, +/* Generated */ cli::array^ outRealMiddleBand, +/* Generated */ cli::array^ outRealLowerBand ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode bbands( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outRealUpperBand[], +/* Generated */ double outRealMiddleBand[], +/* Generated */ double outRealLowerBand[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_BBANDS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outRealUpperBand[], +/* Generated */ double outRealMiddleBand[], +/* Generated */ double outRealLowerBand[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int i; +/* Generated */ double tempReal, tempReal2; +/* Generated */ ARRAY_REF(tempBuffer1); +/* Generated */ ARRAY_REF(tempBuffer2); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInNbDevUp == TA_REAL_DEFAULT ) +/* Generated */ optInNbDevUp = 2.000000e+0; +/* Generated */ else if( (optInNbDevUp < -3.000000e+37) || (optInNbDevUp > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInNbDevDn == TA_REAL_DEFAULT ) +/* Generated */ optInNbDevDn = 2.000000e+0; +/* Generated */ else if( (optInNbDevDn < -3.000000e+37) || (optInNbDevDn > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outRealUpperBand ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outRealMiddleBand ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outRealLowerBand ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) || defined( USE_SUBARRAY ) +/* Generated */ tempBuffer1 = outRealMiddleBand; +/* Generated */ tempBuffer2 = outRealLowerBand; +/* Generated */ #else +/* Generated */ if( inReal == outRealUpperBand ) +/* Generated */ { +/* Generated */ tempBuffer1 = outRealMiddleBand; +/* Generated */ tempBuffer2 = outRealLowerBand; +/* Generated */ } +/* Generated */ else if( inReal == outRealLowerBand ) +/* Generated */ { +/* Generated */ tempBuffer1 = outRealMiddleBand; +/* Generated */ tempBuffer2 = outRealUpperBand; +/* Generated */ } +/* Generated */ else if( inReal == outRealMiddleBand ) +/* Generated */ { +/* Generated */ tempBuffer1 = outRealLowerBand; +/* Generated */ tempBuffer2 = outRealUpperBand; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ tempBuffer1 = outRealMiddleBand; +/* Generated */ tempBuffer2 = outRealUpperBand; +/* Generated */ } +/* Generated */ if( (tempBuffer1 == inReal) || (tempBuffer2 == inReal) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ retCode = FUNCTION_CALL(MA)( startIdx, endIdx, inReal, +/* Generated */ optInTimePeriod, optInMAType, +/* Generated */ outBegIdx, outNBElement, tempBuffer1 ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || ((int)VALUE_HANDLE_DEREF(outNBElement) == 0) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ if( optInMAType == ENUM_VALUE(MAType,TA_MAType_SMA,Sma) ) +/* Generated */ { +/* Generated */ FUNCTION_CALL(INT_stddev_using_precalc_ma)( inReal, tempBuffer1, +/* Generated */ (int)VALUE_HANDLE_DEREF(outBegIdx), (int)VALUE_HANDLE_DEREF(outNBElement), +/* Generated */ optInTimePeriod, tempBuffer2 ); +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ retCode = FUNCTION_CALL(STDDEV)( (int)VALUE_HANDLE_DEREF(outBegIdx), endIdx, inReal, +/* Generated */ optInTimePeriod, 1.0, +/* Generated */ outBegIdx, outNBElement, tempBuffer2 ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ } +/* Generated */ #if !defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ if( tempBuffer1 != outRealMiddleBand ) +/* Generated */ { +/* Generated */ ARRAY_COPY( outRealMiddleBand, tempBuffer1, VALUE_HANDLE_DEREF(outNBElement) ); +/* Generated */ } +/* Generated */ #endif +/* Generated */ if( optInNbDevUp == optInNbDevDn ) +/* Generated */ { +/* Generated */ if( optInNbDevUp == 1.0 ) +/* Generated */ { +/* Generated */ for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) +/* Generated */ { +/* Generated */ tempReal = tempBuffer2[i]; +/* Generated */ tempReal2 = outRealMiddleBand[i]; +/* Generated */ outRealUpperBand[i] = tempReal2 + tempReal; +/* Generated */ outRealLowerBand[i] = tempReal2 - tempReal; +/* Generated */ } +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) +/* Generated */ { +/* Generated */ tempReal = tempBuffer2[i] * optInNbDevUp; +/* Generated */ tempReal2 = outRealMiddleBand[i]; +/* Generated */ outRealUpperBand[i] = tempReal2 + tempReal; +/* Generated */ outRealLowerBand[i] = tempReal2 - tempReal; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( optInNbDevUp == 1.0 ) +/* Generated */ { +/* Generated */ for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) +/* Generated */ { +/* Generated */ tempReal = tempBuffer2[i]; +/* Generated */ tempReal2 = outRealMiddleBand[i]; +/* Generated */ outRealUpperBand[i] = tempReal2 + tempReal; +/* Generated */ outRealLowerBand[i] = tempReal2 - (tempReal * optInNbDevDn); +/* Generated */ } +/* Generated */ } +/* Generated */ else if( optInNbDevDn == 1.0 ) +/* Generated */ { +/* Generated */ for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) +/* Generated */ { +/* Generated */ tempReal = tempBuffer2[i]; +/* Generated */ tempReal2 = outRealMiddleBand[i]; +/* Generated */ outRealLowerBand[i] = tempReal2 - tempReal; +/* Generated */ outRealUpperBand[i] = tempReal2 + (tempReal * optInNbDevUp); +/* Generated */ } +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) +/* Generated */ { +/* Generated */ tempReal = tempBuffer2[i]; +/* Generated */ tempReal2 = outRealMiddleBand[i]; +/* Generated */ outRealUpperBand[i] = tempReal2 + (tempReal * optInNbDevUp); +/* Generated */ outRealLowerBand[i] = tempReal2 - (tempReal * optInNbDevDn); +/* Generated */ } +/* Generated */ } +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_BETA.c b/src/ta_func/ta_BETA.c new file mode 100644 index 000000000..7e42f6608 --- /dev/null +++ b/src/ta_func/ta_BETA.c @@ -0,0 +1,484 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MW Michael Williamson + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 122006 MW Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::BetaLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int betaLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_BETA_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + return optInTimePeriod; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_BETA - Beta + * + * Input = double, double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Beta( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal0, +/* Generated */ SubArray^ inReal1, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Beta( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode beta( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal0[], +/* Generated */ double inReal1[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_BETA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal0[], +/* Generated */ const double inReal1[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + double S_xx = 0.0f; /* sum of x * x */ + double S_xy = 0.0f; /* sum of x * y */ + double S_x = 0.0f; /* sum of x */ + double S_y = 0.0f; /* sum of y */ + double last_price_x = 0.0f; /* the last price read from inReal0 */ + double last_price_y = 0.0f; /* the last price read from inReal1 */ + double trailing_last_price_x = 0.0f; /* same as last_price_x except used to remove elements from the trailing summation */ + double trailing_last_price_y = 0.0f; /* same as last_price_y except used to remove elements from the trailing summation */ + double tmp_real = 0.0f; /* temporary variable */ + double x; /* the 'x' value, which is the last change between values in inReal0 */ + double y; /* the 'y' value, which is the last change between values in inReal1 */ + double n = 0.0f; + int i, outIdx; + int trailingIdx, nbInitialElementNeeded; + + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /** DESCRIPTION OF ALGORITHM: + * The Beta 'algorithm' is a measure of a stocks volatility vs from index. The stock prices + * are given in inReal0 and the index prices are give in inReal1. The size of these vectors + * should be equal. The algorithm is to calculate the change between prices in both vectors + * and then 'plot' these changes are points in the Euclidean plane. The x value of the point + * is market return and the y value is the security return. The beta value is the slope of a + * linear regression through these points. A beta of 1 is simple the line y=x, so the stock + * varies percisely with the market. A beta of less than one means the stock varies less than + * the market and a beta of more than one means the stock varies more than market. A related + * value is the Alpha value (see TA_ALPHA) which is the Y-intercept of the same linear regression. + */ + + /* Validate the calculation method type and + * identify the minimum number of input + * consume before the first value is output.. + */ + nbInitialElementNeeded = optInTimePeriod; + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Consume first input. */ + trailingIdx = startIdx-nbInitialElementNeeded; + last_price_x = trailing_last_price_x = inReal0[trailingIdx]; + last_price_y = trailing_last_price_y = inReal1[trailingIdx]; + + /* Process remaining of lookback until ready to output the first value. */ + i = ++trailingIdx; + + while( i < startIdx ) + { + tmp_real = inReal0[i]; + if( !TA_IS_ZERO(last_price_x) ) + x = (tmp_real-last_price_x)/last_price_x; + else + x = 0.0; + last_price_x = tmp_real; + + tmp_real = inReal1[i++]; + if( !TA_IS_ZERO(last_price_y) ) + y = (tmp_real-last_price_y)/last_price_y; + else + y = 0.0; + last_price_y = tmp_real; + + S_xx += x*x; + S_xy += x*y; + S_x += x; + S_y += y; + } + + + outIdx = 0; /* First output always start at index zero */ + n = (double)optInTimePeriod; + do + { + tmp_real = inReal0[i]; + if( !TA_IS_ZERO(last_price_x) ) + x = (tmp_real-last_price_x)/last_price_x; + else + x = 0.0; + last_price_x = tmp_real; + + tmp_real = inReal1[i++]; + if( !TA_IS_ZERO(last_price_y) ) + y = (tmp_real-last_price_y)/last_price_y; + else + y = 0.0; + last_price_y = tmp_real; + + S_xx += x*x; + S_xy += x*y; + S_x += x; + S_y += y; + + /* Always read the trailing before writing the output because the input and output + * buffer can be the same. + */ + tmp_real = inReal0[trailingIdx]; + if( !TA_IS_ZERO(trailing_last_price_x) ) + x = (tmp_real-trailing_last_price_x)/trailing_last_price_x; + else + x = 0.0; + trailing_last_price_x = tmp_real; + + tmp_real = inReal1[trailingIdx++]; + if( !TA_IS_ZERO(trailing_last_price_y) ) + y = (tmp_real-trailing_last_price_y)/trailing_last_price_y; + else + y = 0.0; + trailing_last_price_y = tmp_real; + + /* Write the output */ + tmp_real = (n * S_xx) - (S_x * S_x); + if( !TA_IS_ZERO(tmp_real) ) + outReal[outIdx++] = ((n * S_xy) - (S_x * S_y)) / tmp_real; + else + outReal[outIdx++] = 0.0; + + /* Remove the calculation starting with the trailingIdx. */ + S_xx -= x*x; + S_xy -= x*y; + S_x -= x; + S_y -= y; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Beta( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode beta( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal0[], +/* Generated */ float inReal1[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_BETA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal0[], +/* Generated */ const float inReal1[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double S_xx = 0.0f; +/* Generated */ double S_xy = 0.0f; +/* Generated */ double S_x = 0.0f; +/* Generated */ double S_y = 0.0f; +/* Generated */ double last_price_x = 0.0f; +/* Generated */ double last_price_y = 0.0f; +/* Generated */ double trailing_last_price_x = 0.0f; +/* Generated */ double trailing_last_price_y = 0.0f; +/* Generated */ double tmp_real = 0.0f; +/* Generated */ double x; +/* Generated */ double y; +/* Generated */ double n = 0.0f; +/* Generated */ int i, outIdx; +/* Generated */ int trailingIdx, nbInitialElementNeeded; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = optInTimePeriod; +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ last_price_x = trailing_last_price_x = inReal0[trailingIdx]; +/* Generated */ last_price_y = trailing_last_price_y = inReal1[trailingIdx]; +/* Generated */ i = ++trailingIdx; +/* Generated */ while( i < startIdx ) +/* Generated */ { +/* Generated */ tmp_real = inReal0[i]; +/* Generated */ if( !TA_IS_ZERO(last_price_x) ) +/* Generated */ x = (tmp_real-last_price_x)/last_price_x; +/* Generated */ else +/* Generated */ x = 0.0; +/* Generated */ last_price_x = tmp_real; +/* Generated */ tmp_real = inReal1[i++]; +/* Generated */ if( !TA_IS_ZERO(last_price_y) ) +/* Generated */ y = (tmp_real-last_price_y)/last_price_y; +/* Generated */ else +/* Generated */ y = 0.0; +/* Generated */ last_price_y = tmp_real; +/* Generated */ S_xx += x*x; +/* Generated */ S_xy += x*y; +/* Generated */ S_x += x; +/* Generated */ S_y += y; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ n = (double)optInTimePeriod; +/* Generated */ do +/* Generated */ { +/* Generated */ tmp_real = inReal0[i]; +/* Generated */ if( !TA_IS_ZERO(last_price_x) ) +/* Generated */ x = (tmp_real-last_price_x)/last_price_x; +/* Generated */ else +/* Generated */ x = 0.0; +/* Generated */ last_price_x = tmp_real; +/* Generated */ tmp_real = inReal1[i++]; +/* Generated */ if( !TA_IS_ZERO(last_price_y) ) +/* Generated */ y = (tmp_real-last_price_y)/last_price_y; +/* Generated */ else +/* Generated */ y = 0.0; +/* Generated */ last_price_y = tmp_real; +/* Generated */ S_xx += x*x; +/* Generated */ S_xy += x*y; +/* Generated */ S_x += x; +/* Generated */ S_y += y; +/* Generated */ tmp_real = inReal0[trailingIdx]; +/* Generated */ if( !TA_IS_ZERO(trailing_last_price_x) ) +/* Generated */ x = (tmp_real-trailing_last_price_x)/trailing_last_price_x; +/* Generated */ else +/* Generated */ x = 0.0; +/* Generated */ trailing_last_price_x = tmp_real; +/* Generated */ tmp_real = inReal1[trailingIdx++]; +/* Generated */ if( !TA_IS_ZERO(trailing_last_price_y) ) +/* Generated */ y = (tmp_real-trailing_last_price_y)/trailing_last_price_y; +/* Generated */ else +/* Generated */ y = 0.0; +/* Generated */ trailing_last_price_y = tmp_real; +/* Generated */ tmp_real = (n * S_xx) - (S_x * S_x); +/* Generated */ if( !TA_IS_ZERO(tmp_real) ) +/* Generated */ outReal[outIdx++] = ((n * S_xy) - (S_x * S_y)) / tmp_real; +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ S_xx -= x*x; +/* Generated */ S_xy -= x*y; +/* Generated */ S_x -= x; +/* Generated */ S_y -= y; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_BOP.c b/src/ta_func/ta_BOP.c new file mode 100644 index 000000000..c2b655ddf --- /dev/null +++ b/src/ta_func/ta_BOP.c @@ -0,0 +1,279 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112605 MF Initial coding. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::BopLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int bopLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_BOP_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_BOP - Balance Of Power + * + * Input = Open, High, Low, Close + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Bop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Bop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode bop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_BOP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx, i; + double tempReal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* BOP = (Close - Open)/(High - Low) */ + + outIdx = 0; + + for( i=startIdx; i <= endIdx; i++ ) + { + tempReal = inHigh[i]-inLow[i]; + if( TA_IS_ZERO_OR_NEG(tempReal) ) + outReal[outIdx++] = 0.0; + else + outReal[outIdx++] = (inClose[i] - inOpen[i])/tempReal; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Bop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode bop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_BOP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ double tempReal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ outIdx = 0; +/* Generated */ for( i=startIdx; i <= endIdx; i++ ) +/* Generated */ { +/* Generated */ tempReal = inHigh[i]-inLow[i]; +/* Generated */ if( TA_IS_ZERO_OR_NEG(tempReal) ) +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ else +/* Generated */ outReal[outIdx++] = (inClose[i] - inOpen[i])/tempReal; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CCI.c b/src/ta_func/ta_CCI.c new file mode 100644 index 000000000..14fa40ee1 --- /dev/null +++ b/src/ta_func/ta_CCI.c @@ -0,0 +1,416 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 031202 MF Template creation. + * 052603 MF Port to managed C++. Change to use CIRCBUF macros. + * 061704 MF Lower limit for period to 2, and correct algorithm + * to avoid cummulative error when value are close to + * the floating point epsilon. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CciLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cciLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CCI_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CCI - Commodity Channel Index + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cci( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cci( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cci( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CCI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + + /* insert local variable here */ + double tempReal, tempReal2, theAverage, lastValue; + int i, j, outIdx, lookbackTotal; + + /* This ptr will points on a circular buffer of + * at least "optInTimePeriod" element. + */ + CIRCBUF_PROLOG(circBuffer,double,30); + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Allocate a circular buffer equal to the requested + * period. + */ + CIRCBUF_INIT( circBuffer, double, optInTimePeriod ); + + /* Do the MA calculation using tight loops. */ + + /* Add-up the initial period, except for the last value. + * Fill up the circular buffer at the same time. + */ + i=startIdx-lookbackTotal; + if( optInTimePeriod > 1 ) + { + while( i < startIdx ) + { + circBuffer[circBuffer_Idx] = (inHigh[i]+inLow[i]+inClose[i])/3; + i++; + CIRCBUF_NEXT(circBuffer); + } + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the inReal and + * outReal to be the same buffer. + */ + outIdx = 0; + do + { + lastValue = (inHigh[i]+inLow[i]+inClose[i])/3; + circBuffer[circBuffer_Idx] = lastValue; + + /* Calculate the average for the whole period. */ + theAverage = 0; + for( j=0; j < optInTimePeriod; j++ ) + theAverage += circBuffer[j]; + theAverage /= optInTimePeriod; + + /* Do the summation of the ABS(TypePrice-average) + * for the whole period. + */ + tempReal2 = 0; + for( j=0; j < optInTimePeriod; j++ ) + tempReal2 += std_fabs(circBuffer[j]-theAverage); + + /* And finally, the CCI... */ + tempReal = lastValue-theAverage; + + if( (tempReal != 0.0) && (tempReal2 != 0.0) ) + { + outReal[outIdx++] = tempReal/(0.015*(tempReal2/optInTimePeriod)); + } + else + outReal[outIdx++] = 0.0; + + /* Move forward the circular buffer indexes. */ + CIRCBUF_NEXT(circBuffer); + + i++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Free the circular buffer if it was dynamically allocated. */ + CIRCBUF_DESTROY(circBuffer); + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cci( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cci( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CCI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double tempReal, tempReal2, theAverage, lastValue; +/* Generated */ int i, j, outIdx, lookbackTotal; +/* Generated */ CIRCBUF_PROLOG(circBuffer,double,30); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = (optInTimePeriod-1); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ CIRCBUF_INIT( circBuffer, double, optInTimePeriod ); +/* Generated */ i=startIdx-lookbackTotal; +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ { +/* Generated */ while( i < startIdx ) +/* Generated */ { +/* Generated */ circBuffer[circBuffer_Idx] = (inHigh[i]+inLow[i]+inClose[i])/3; +/* Generated */ i++; +/* Generated */ CIRCBUF_NEXT(circBuffer); +/* Generated */ } +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ lastValue = (inHigh[i]+inLow[i]+inClose[i])/3; +/* Generated */ circBuffer[circBuffer_Idx] = lastValue; +/* Generated */ theAverage = 0; +/* Generated */ for( j=0; j < optInTimePeriod; j++ ) +/* Generated */ theAverage += circBuffer[j]; +/* Generated */ theAverage /= optInTimePeriod; +/* Generated */ tempReal2 = 0; +/* Generated */ for( j=0; j < optInTimePeriod; j++ ) +/* Generated */ tempReal2 += std_fabs(circBuffer[j]-theAverage); +/* Generated */ tempReal = lastValue-theAverage; +/* Generated */ if( (tempReal != 0.0) && (tempReal2 != 0.0) ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = tempReal/(0.015*(tempReal2/optInTimePeriod)); +/* Generated */ } +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ CIRCBUF_NEXT(circBuffer); +/* Generated */ i++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ CIRCBUF_DESTROY(circBuffer); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDL2CROWS.c b/src/ta_func/ta_CDL2CROWS.c new file mode 100644 index 000000000..4e223adf4 --- /dev/null +++ b/src/ta_func/ta_CDL2CROWS.c @@ -0,0 +1,356 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 121104 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::Cdl2CrowsLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdl2CrowsLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDL2CROWS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(BodyLong) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDL2CROWS - Two Crows + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cdl2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDL2CROWS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyLongPeriodTotal; + int i, outIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDL2CROWS)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white candle + * - second candle: black real body + * - gap between the first and the second candle's real bodies + * - third candle: black candle that opens within the second real body and closes within the first real body + * The meaning of "long" is specified with TA_SetCandleSettings + * outInteger is negative (-1 to -100): two crows is always bearish; + * the user should consider that two crows is significant when it appears in an uptrend, while this function + * does not consider the trend + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == 1 && // 1st: white + TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // long + TA_CANDLECOLOR(i-1) == -1 && // 2nd: black + TA_REALBODYGAPUP(i-1,i-2) && // gapping up + TA_CANDLECOLOR(i) == -1 && // 3rd: black + inOpen[i] < inOpen[i-1] && inOpen[i] > inClose[i-1] && // opening within 2nd rb + inClose[i] > inOpen[i-2] && inClose[i] < inClose[i-2] // closing within 1st rb + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + i++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDL2CROWS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDL2CROWS)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == 1 && // 1st: white +/* Generated */ TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // long +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 2nd: black +/* Generated */ TA_REALBODYGAPUP(i-1,i-2) && // gapping up +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 3rd: black +/* Generated */ inOpen[i] < inOpen[i-1] && inOpen[i] > inClose[i-1] && // opening within 2nd rb +/* Generated */ inClose[i] > inOpen[i-2] && inClose[i] < inClose[i-2] // closing within 1st rb +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDL3BLACKCROWS.c b/src/ta_func/ta_CDL3BLACKCROWS.c new file mode 100644 index 000000000..e057661fc --- /dev/null +++ b/src/ta_func/ta_CDL3BLACKCROWS.c @@ -0,0 +1,384 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 103004 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::Cdl3BlackCrowsLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdl3BlackCrowsLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDL3BLACKCROWS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(ShadowVeryShort) + 3; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDL3BLACKCROWS - Three Black Crows + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cdl3BlackCrows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3BlackCrows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3BlackCrows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDL3BLACKCROWS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(ShadowVeryShortPeriodTotal,3); + int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDL3BLACKCROWS)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowVeryShortPeriodTotal[2] = 0; + ShadowVeryShortPeriodTotal[1] = 0; + ShadowVeryShortPeriodTotal[0] = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal[2] += TA_CANDLERANGE( ShadowVeryShort, i-2 ); + ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - three consecutive and declining black candlesticks + * - each candle must have no or very short lower shadow + * - each candle after the first must open within the prior candle's real body + * - the first candle's close should be under the prior white candle's high + * The meaning of "very short" is specified with TA_SetCandleSettings + * outInteger is negative (-1 to -100): three black crows is always bearish; + * the user should consider that 3 black crows is significant when it appears after a mature advance or at high levels, + * while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-3) == 1 && // white + TA_CANDLECOLOR(i-2) == -1 && // 1st black + TA_LOWERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && + // very short lower shadow + TA_CANDLECOLOR(i-1) == -1 && // 2nd black + TA_LOWERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + // very short lower shadow + TA_CANDLECOLOR(i) == -1 && // 3rd black + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + // very short lower shadow + inOpen[i-1] < inOpen[i-2] && inOpen[i-1] > inClose[i-2] && // 2nd black opens within 1st black's rb + inOpen[i] < inOpen[i-1] && inOpen[i] > inClose[i-1] && // 3rd black opens within 2nd black's rb + inHigh[i-3] > inClose[i-2] && // 1st black closes under prior candle's high + inClose[i-2] > inClose[i-1] && // three declining + inClose[i-1] > inClose[i] // three declining + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 2; totIdx >= 0; --totIdx) + ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); + i++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3BlackCrows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3BlackCrows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDL3BLACKCROWS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(ShadowVeryShortPeriodTotal,3); +/* Generated */ int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDL3BLACKCROWS)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowVeryShortPeriodTotal[2] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[1] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[0] = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal[2] += TA_CANDLERANGE( ShadowVeryShort, i-2 ); +/* Generated */ ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-3) == 1 && // white +/* Generated */ TA_CANDLECOLOR(i-2) == -1 && // 1st black +/* Generated */ TA_LOWERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && +/* Generated */ // very short lower shadow +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 2nd black +/* Generated */ TA_LOWERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ // very short lower shadow +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 3rd black +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ // very short lower shadow +/* Generated */ inOpen[i-1] < inOpen[i-2] && inOpen[i-1] > inClose[i-2] && // 2nd black opens within 1st black's rb +/* Generated */ inOpen[i] < inOpen[i-1] && inOpen[i] > inClose[i-1] && // 3rd black opens within 2nd black's rb +/* Generated */ inHigh[i-3] > inClose[i-2] && // 1st black closes under prior candle's high +/* Generated */ inClose[i-2] > inClose[i-1] && // three declining +/* Generated */ inClose[i-1] > inClose[i] // three declining +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 2; totIdx >= 0; --totIdx) +/* Generated */ ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); +/* Generated */ i++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDL3INSIDE.c b/src/ta_func/ta_CDL3INSIDE.c new file mode 100644 index 000000000..b70b29496 --- /dev/null +++ b/src/ta_func/ta_CDL3INSIDE.c @@ -0,0 +1,375 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 121104 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::Cdl3InsideLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdl3InsideLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDL3INSIDE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDL3INSIDE - Three Inside Up/Down + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cdl3Inside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3Inside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3Inside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDL3INSIDE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyShortPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDL3INSIDE)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + BodyShortTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx-1 ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white (black) real body + * - second candle: short real body totally engulfed by the first + * - third candle: black (white) candle that closes lower (higher) than the first candle's open + * The meaning of "short" and "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) for the three inside up or negative (-1 to -100) for the three inside down; + * the user should consider that a three inside up is significant when it appears in a downtrend and a three inside + * down is significant when it appears in an uptrend, while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long + TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i-1 ) && // 2nd: short + max( inClose[i-1], inOpen[i-1] ) < max( inClose[i-2], inOpen[i-2] ) && // engulfed by 1st + min( inClose[i-1], inOpen[i-1] ) > min( inClose[i-2], inOpen[i-2] ) && + ( ( TA_CANDLECOLOR(i-2) == 1 && TA_CANDLECOLOR(i) == -1 && inClose[i] < inOpen[i-2] ) // 3rd: opposite to 1st + || // and closing out + ( TA_CANDLECOLOR(i-2) == -1 && TA_CANDLECOLOR(i) == 1 && inClose[i] > inOpen[i-2] ) + ) + ) + outInteger[outIdx++] = -TA_CANDLECOLOR(i-2) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i-1 ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3Inside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3Inside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDL3INSIDE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyShortPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDL3INSIDE)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyShortTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long +/* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i-1 ) && // 2nd: short +/* Generated */ max( inClose[i-1], inOpen[i-1] ) < max( inClose[i-2], inOpen[i-2] ) && // engulfed by 1st +/* Generated */ min( inClose[i-1], inOpen[i-1] ) > min( inClose[i-2], inOpen[i-2] ) && +/* Generated */ ( ( TA_CANDLECOLOR(i-2) == 1 && TA_CANDLECOLOR(i) == -1 && inClose[i] < inOpen[i-2] ) // 3rd: opposite to 1st +/* Generated */ || // and closing out +/* Generated */ ( TA_CANDLECOLOR(i-2) == -1 && TA_CANDLECOLOR(i) == 1 && inClose[i] > inOpen[i-2] ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -TA_CANDLECOLOR(i-2) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i-1 ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDL3LINESTRIKE.c b/src/ta_func/ta_CDL3LINESTRIKE.c new file mode 100644 index 000000000..642e250ed --- /dev/null +++ b/src/ta_func/ta_CDL3LINESTRIKE.c @@ -0,0 +1,396 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 121104 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::Cdl3LineStrikeLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdl3LineStrikeLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDL3LINESTRIKE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(Near) + 3; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDL3LINESTRIKE - Three-Line Strike + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cdl3LineStrike( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3LineStrike( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3LineStrike( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDL3LINESTRIKE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(NearPeriodTotal,4); + int i, outIdx, totIdx, NearTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDL3LINESTRIKE)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + NearPeriodTotal[3] = 0; + NearPeriodTotal[2] = 0; + NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); + + i = NearTrailingIdx; + while( i < startIdx ) { + NearPeriodTotal[3] += TA_CANDLERANGE( Near, i-3 ); + NearPeriodTotal[2] += TA_CANDLERANGE( Near, i-2 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - three white soldiers (three black crows): three white (black) candlesticks with consecutively higher (lower) closes, + * each opening within or near the previous real body + * - fourth candle: black (white) candle that opens above (below) prior candle's close and closes below (above) + * the first candle's open + * The meaning of "near" is specified with TA_SetCandleSettings; + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that 3-line strike is significant when it appears in a trend in the same direction of + * the first three candles, while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-3) == TA_CANDLECOLOR(i-2) && // three with same color + TA_CANDLECOLOR(i-2) == TA_CANDLECOLOR(i-1) && + TA_CANDLECOLOR(i) == -TA_CANDLECOLOR(i-1) && // 4th opposite color + // 2nd opens within/near 1st rb + inOpen[i-2] >= min( inOpen[i-3], inClose[i-3] ) - TA_CANDLEAVERAGE( Near, NearPeriodTotal[3], i-3 ) && + inOpen[i-2] <= max( inOpen[i-3], inClose[i-3] ) + TA_CANDLEAVERAGE( Near, NearPeriodTotal[3], i-3 ) && + // 3rd opens within/near 2nd rb + inOpen[i-1] >= min( inOpen[i-2], inClose[i-2] ) - TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && + inOpen[i-1] <= max( inOpen[i-2], inClose[i-2] ) + TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && + ( + ( // if three white + TA_CANDLECOLOR(i-1) == 1 && + inClose[i-1] > inClose[i-2] && inClose[i-2] > inClose[i-3] && // consecutive higher closes + inOpen[i] > inClose[i-1] && // 4th opens above prior close + inClose[i] < inOpen[i-3] // 4th closes below 1st open + ) || + ( // if three black + TA_CANDLECOLOR(i-1) == -1 && + inClose[i-1] < inClose[i-2] && inClose[i-2] < inClose[i-3] && // consecutive lower closes + inOpen[i] < inClose[i-1] && // 4th opens below prior close + inClose[i] > inOpen[i-3] // 4th closes above 1st open + ) + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i-1) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 3; totIdx >= 2; --totIdx) + NearPeriodTotal[totIdx] += TA_CANDLERANGE( Near, i-totIdx ) + - TA_CANDLERANGE( Near, NearTrailingIdx-totIdx ); + i++; + NearTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3LineStrike( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3LineStrike( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDL3LINESTRIKE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(NearPeriodTotal,4); +/* Generated */ int i, outIdx, totIdx, NearTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDL3LINESTRIKE)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ NearPeriodTotal[3] = 0; +/* Generated */ NearPeriodTotal[2] = 0; +/* Generated */ NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ NearPeriodTotal[3] += TA_CANDLERANGE( Near, i-3 ); +/* Generated */ NearPeriodTotal[2] += TA_CANDLERANGE( Near, i-2 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-3) == TA_CANDLECOLOR(i-2) && // three with same color +/* Generated */ TA_CANDLECOLOR(i-2) == TA_CANDLECOLOR(i-1) && +/* Generated */ TA_CANDLECOLOR(i) == -TA_CANDLECOLOR(i-1) && // 4th opposite color +/* Generated */ // 2nd opens within/near 1st rb +/* Generated */ inOpen[i-2] >= min( inOpen[i-3], inClose[i-3] ) - TA_CANDLEAVERAGE( Near, NearPeriodTotal[3], i-3 ) && +/* Generated */ inOpen[i-2] <= max( inOpen[i-3], inClose[i-3] ) + TA_CANDLEAVERAGE( Near, NearPeriodTotal[3], i-3 ) && +/* Generated */ // 3rd opens within/near 2nd rb +/* Generated */ inOpen[i-1] >= min( inOpen[i-2], inClose[i-2] ) - TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && +/* Generated */ inOpen[i-1] <= max( inOpen[i-2], inClose[i-2] ) + TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && +/* Generated */ ( +/* Generated */ ( // if three white +/* Generated */ TA_CANDLECOLOR(i-1) == 1 && +/* Generated */ inClose[i-1] > inClose[i-2] && inClose[i-2] > inClose[i-3] && // consecutive higher closes +/* Generated */ inOpen[i] > inClose[i-1] && // 4th opens above prior close +/* Generated */ inClose[i] < inOpen[i-3] // 4th closes below 1st open +/* Generated */ ) || +/* Generated */ ( // if three black +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && +/* Generated */ inClose[i-1] < inClose[i-2] && inClose[i-2] < inClose[i-3] && // consecutive lower closes +/* Generated */ inOpen[i] < inClose[i-1] && // 4th opens below prior close +/* Generated */ inClose[i] > inOpen[i-3] // 4th closes above 1st open +/* Generated */ ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i-1) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 3; totIdx >= 2; --totIdx) +/* Generated */ NearPeriodTotal[totIdx] += TA_CANDLERANGE( Near, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( Near, NearTrailingIdx-totIdx ); +/* Generated */ i++; +/* Generated */ NearTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDL3OUTSIDE.c b/src/ta_func/ta_CDL3OUTSIDE.c new file mode 100644 index 000000000..15f6c192a --- /dev/null +++ b/src/ta_func/ta_CDL3OUTSIDE.c @@ -0,0 +1,334 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 121104 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::Cdl3OutsideLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdl3OutsideLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDL3OUTSIDE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return 3; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDL3OUTSIDE - Three Outside Up/Down + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cdl3Outside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3Outside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3Outside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDL3OUTSIDE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int i, outIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDL3OUTSIDE)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first: black (white) real body + * - second: white (black) real body that engulfs the prior real body + * - third: candle that closes higher (lower) than the second candle + * outInteger is positive (1 to 100) for the three outside up or negative (-1 to -100) for the three outside down; + * the user should consider that a three outside up must appear in a downtrend and three outside down must appear + * in an uptrend, while this function does not consider it + */ + outIdx = 0; + do + { + if( ( TA_CANDLECOLOR(i-1) == 1 && TA_CANDLECOLOR(i-2) == -1 && // white engulfs black + inClose[i-1] > inOpen[i-2] && inOpen[i-1] < inClose[i-2] && + inClose[i] > inClose[i-1] // third candle higher + ) + || + ( TA_CANDLECOLOR(i-1) == -1 && TA_CANDLECOLOR(i-2) == 1 && // black engulfs white + inOpen[i-1] > inClose[i-2] && inClose[i-1] < inOpen[i-2] && + inClose[i] < inClose[i-1] // third candle lower + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i-1) * 100; + else + outInteger[outIdx++] = 0; + i++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3Outside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3Outside( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDL3OUTSIDE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int i, outIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDL3OUTSIDE)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( ( TA_CANDLECOLOR(i-1) == 1 && TA_CANDLECOLOR(i-2) == -1 && // white engulfs black +/* Generated */ inClose[i-1] > inOpen[i-2] && inOpen[i-1] < inClose[i-2] && +/* Generated */ inClose[i] > inClose[i-1] // third candle higher +/* Generated */ ) +/* Generated */ || +/* Generated */ ( TA_CANDLECOLOR(i-1) == -1 && TA_CANDLECOLOR(i-2) == 1 && // black engulfs white +/* Generated */ inOpen[i-1] > inClose[i-2] && inClose[i-1] < inOpen[i-2] && +/* Generated */ inClose[i] < inClose[i-1] // third candle lower +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i-1) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ i++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDL3STARSINSOUTH.c b/src/ta_func/ta_CDL3STARSINSOUTH.c new file mode 100644 index 000000000..51e13d8c3 --- /dev/null +++ b/src/ta_func/ta_CDL3STARSINSOUTH.c @@ -0,0 +1,452 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 022705 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::Cdl3StarsInSouthLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdl3StarsInSouthLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDL3STARSINSOUTH_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( TA_CANDLEAVGPERIOD(ShadowVeryShort), TA_CANDLEAVGPERIOD(ShadowLong) ), + max( TA_CANDLEAVGPERIOD(BodyLong), TA_CANDLEAVGPERIOD(BodyShort) ) + ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDL3STARSINSOUTH - Three Stars In The South + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cdl3StarsInSouth( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3StarsInSouth( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3StarsInSouth( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDL3STARSINSOUTH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyLongPeriodTotal, BodyShortPeriodTotal, ShadowLongPeriodTotal; + ARRAY_LOCAL(ShadowVeryShortPeriodTotal,2); + int i, outIdx, totIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, + lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDL3STARSINSOUTH)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + ShadowLongPeriodTotal = 0; + ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); + ShadowVeryShortPeriodTotal[1] = 0; + ShadowVeryShortPeriodTotal[0] = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + BodyShortPeriodTotal = 0; + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ); + i++; + } + i = ShadowLongTrailingIdx; + while( i < startIdx ) { + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i-2 ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black candle with long lower shadow + * - second candle: smaller black candle that opens higher than prior close but within prior candle's range + * and trades lower than prior close but not lower than prior low and closes off of its low (it has a shadow) + * - third candle: small black marubozu (or candle with very short shadows) engulfed by prior candle's range + * The meanings of "long body", "short body", "very short shadow" are specified with TA_SetCandleSettings; + * outInteger is positive (1 to 100): 3 stars in the south is always bullish; + * the user should consider that 3 stars in the south is significant when it appears in downtrend, while this function + * does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == -1 && // 1st black + TA_CANDLECOLOR(i-1) == -1 && // 2nd black + TA_CANDLECOLOR(i) == -1 && // 3rd black + // 1st: long + TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && + // with long lower shadow + TA_LOWERSHADOW(i-2) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i-2 ) && + TA_REALBODY(i-1) < TA_REALBODY(i-2) && // 2nd: smaller candle + inOpen[i-1] > inClose[i-2] && inOpen[i-1] <= inHigh[i-2] && // that opens higher but within 1st range + inLow[i-1] < inClose[i-2] && // and trades lower than 1st close + inLow[i-1] >= inLow[i-2] && // but not lower than 1st low + // and has a lower shadow + TA_LOWERSHADOW(i-1) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + // 3rd: small marubozu + TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + inLow[i] > inLow[i-1] && inHigh[i] < inHigh[i-1] // engulfed by prior candle's range + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-2 ); + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i-2 ) + - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx-2 ); + for (totIdx = 1; totIdx >= 0; --totIdx) + ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) + - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + ShadowLongTrailingIdx++; + ShadowVeryShortTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3StarsInSouth( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3StarsInSouth( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDL3STARSINSOUTH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyLongPeriodTotal, BodyShortPeriodTotal, ShadowLongPeriodTotal; +/* Generated */ ARRAY_LOCAL(ShadowVeryShortPeriodTotal,2); +/* Generated */ int i, outIdx, totIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, +/* Generated */ lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDL3STARSINSOUTH)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ ShadowLongPeriodTotal = 0; +/* Generated */ ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); +/* Generated */ ShadowVeryShortPeriodTotal[1] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[0] = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i-2 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == -1 && // 1st black +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 2nd black +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 3rd black +/* Generated */ // 1st: long +/* Generated */ TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && +/* Generated */ // with long lower shadow +/* Generated */ TA_LOWERSHADOW(i-2) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i-2 ) && +/* Generated */ TA_REALBODY(i-1) < TA_REALBODY(i-2) && // 2nd: smaller candle +/* Generated */ inOpen[i-1] > inClose[i-2] && inOpen[i-1] <= inHigh[i-2] && // that opens higher but within 1st range +/* Generated */ inLow[i-1] < inClose[i-2] && // and trades lower than 1st close +/* Generated */ inLow[i-1] >= inLow[i-2] && // but not lower than 1st low +/* Generated */ // and has a lower shadow +/* Generated */ TA_LOWERSHADOW(i-1) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ // 3rd: small marubozu +/* Generated */ TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ inLow[i] > inLow[i-1] && inHigh[i] < inHigh[i-1] // engulfed by prior candle's range +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-2 ); +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i-2 ) +/* Generated */ - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx-2 ); +/* Generated */ for (totIdx = 1; totIdx >= 0; --totIdx) +/* Generated */ ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) +/* Generated */ - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ ShadowLongTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDL3WHITESOLDIERS.c b/src/ta_func/ta_CDL3WHITESOLDIERS.c new file mode 100644 index 000000000..a8098c9a6 --- /dev/null +++ b/src/ta_func/ta_CDL3WHITESOLDIERS.c @@ -0,0 +1,476 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120404 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::Cdl3WhiteSoldiersLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdl3WhiteSoldiersLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDL3WHITESOLDIERS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( TA_CANDLEAVGPERIOD(ShadowVeryShort), TA_CANDLEAVGPERIOD(BodyShort) ), + max( TA_CANDLEAVGPERIOD(Far), TA_CANDLEAVGPERIOD(Near) ) + ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDL3WHITESOLDIERS - Three Advancing White Soldiers + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cdl3WhiteSoldiers( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3WhiteSoldiers( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3WhiteSoldiers( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDL3WHITESOLDIERS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(ShadowVeryShortPeriodTotal,3); + ARRAY_LOCAL(NearPeriodTotal,3); + ARRAY_LOCAL(FarPeriodTotal,3); + double BodyShortPeriodTotal; + int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, NearTrailingIdx, FarTrailingIdx, BodyShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDL3WHITESOLDIERS)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowVeryShortPeriodTotal[2] = 0; + ShadowVeryShortPeriodTotal[1] = 0; + ShadowVeryShortPeriodTotal[0] = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + NearPeriodTotal[2] = 0; + NearPeriodTotal[1] = 0; + NearPeriodTotal[0] = 0; + NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); + FarPeriodTotal[2] = 0; + FarPeriodTotal[1] = 0; + FarPeriodTotal[0] = 0; + FarTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Far); + BodyShortPeriodTotal = 0; + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal[2] += TA_CANDLERANGE( ShadowVeryShort, i-2 ); + ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = NearTrailingIdx; + while( i < startIdx ) { + NearPeriodTotal[2] += TA_CANDLERANGE( Near, i-2 ); + NearPeriodTotal[1] += TA_CANDLERANGE( Near, i-1 ); + i++; + } + i = FarTrailingIdx; + while( i < startIdx ) { + FarPeriodTotal[2] += TA_CANDLERANGE( Far, i-2 ); + FarPeriodTotal[1] += TA_CANDLERANGE( Far, i-1 ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - three white candlesticks with consecutively higher closes + * - Greg Morris wants them to be long, Steve Nison doesn't; anyway they should not be short + * - each candle opens within or near the previous white real body + * - each candle must have no or very short upper shadow + * - to differentiate this pattern from advance block, each candle must not be far shorter than the prior candle + * The meanings of "not short", "very short shadow", "far" and "near" are specified with TA_SetCandleSettings; + * here the 3 candles must be not short, if you want them to be long use TA_SetCandleSettings on BodyShort; + * outInteger is positive (1 to 100): advancing 3 white soldiers is always bullish; + * the user should consider that 3 white soldiers is significant when it appears in downtrend, while this function + * does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == 1 && // 1st white + TA_UPPERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && + // very short upper shadow + TA_CANDLECOLOR(i-1) == 1 && // 2nd white + TA_UPPERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + // very short upper shadow + TA_CANDLECOLOR(i) == 1 && // 3rd white + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + // very short upper shadow + inClose[i] > inClose[i-1] && inClose[i-1] > inClose[i-2] && // consecutive higher closes + inOpen[i-1] > inOpen[i-2] && // 2nd opens within/near 1st real body + inOpen[i-1] <= inClose[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && + inOpen[i] > inOpen[i-1] && // 3rd opens within/near 2nd real body + inOpen[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[1], i-1 ) && + TA_REALBODY(i-1) > TA_REALBODY(i-2) - TA_CANDLEAVERAGE( Far, FarPeriodTotal[2], i-2 ) && + // 2nd not far shorter than 1st + TA_REALBODY(i) > TA_REALBODY(i-1) - TA_CANDLEAVERAGE( Far, FarPeriodTotal[1], i-1 ) && + // 3rd not far shorter than 2nd + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) // not short real body + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 2; totIdx >= 0; --totIdx) + ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); + for (totIdx = 2; totIdx >= 1; --totIdx) { + FarPeriodTotal[totIdx] += TA_CANDLERANGE( Far, i-totIdx ) + - TA_CANDLERANGE( Far, FarTrailingIdx-totIdx ); + NearPeriodTotal[totIdx] += TA_CANDLERANGE( Near, i-totIdx ) + - TA_CANDLERANGE( Near, NearTrailingIdx-totIdx ); + } + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + ShadowVeryShortTrailingIdx++; + NearTrailingIdx++; + FarTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cdl3WhiteSoldiers( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdl3WhiteSoldiers( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDL3WHITESOLDIERS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(ShadowVeryShortPeriodTotal,3); +/* Generated */ ARRAY_LOCAL(NearPeriodTotal,3); +/* Generated */ ARRAY_LOCAL(FarPeriodTotal,3); +/* Generated */ double BodyShortPeriodTotal; +/* Generated */ int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, NearTrailingIdx, FarTrailingIdx, BodyShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDL3WHITESOLDIERS)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowVeryShortPeriodTotal[2] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[1] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[0] = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ NearPeriodTotal[2] = 0; +/* Generated */ NearPeriodTotal[1] = 0; +/* Generated */ NearPeriodTotal[0] = 0; +/* Generated */ NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); +/* Generated */ FarPeriodTotal[2] = 0; +/* Generated */ FarPeriodTotal[1] = 0; +/* Generated */ FarPeriodTotal[0] = 0; +/* Generated */ FarTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Far); +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal[2] += TA_CANDLERANGE( ShadowVeryShort, i-2 ); +/* Generated */ ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ NearPeriodTotal[2] += TA_CANDLERANGE( Near, i-2 ); +/* Generated */ NearPeriodTotal[1] += TA_CANDLERANGE( Near, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = FarTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ FarPeriodTotal[2] += TA_CANDLERANGE( Far, i-2 ); +/* Generated */ FarPeriodTotal[1] += TA_CANDLERANGE( Far, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == 1 && // 1st white +/* Generated */ TA_UPPERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && +/* Generated */ // very short upper shadow +/* Generated */ TA_CANDLECOLOR(i-1) == 1 && // 2nd white +/* Generated */ TA_UPPERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ // very short upper shadow +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 3rd white +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ // very short upper shadow +/* Generated */ inClose[i] > inClose[i-1] && inClose[i-1] > inClose[i-2] && // consecutive higher closes +/* Generated */ inOpen[i-1] > inOpen[i-2] && // 2nd opens within/near 1st real body +/* Generated */ inOpen[i-1] <= inClose[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && +/* Generated */ inOpen[i] > inOpen[i-1] && // 3rd opens within/near 2nd real body +/* Generated */ inOpen[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[1], i-1 ) && +/* Generated */ TA_REALBODY(i-1) > TA_REALBODY(i-2) - TA_CANDLEAVERAGE( Far, FarPeriodTotal[2], i-2 ) && +/* Generated */ // 2nd not far shorter than 1st +/* Generated */ TA_REALBODY(i) > TA_REALBODY(i-1) - TA_CANDLEAVERAGE( Far, FarPeriodTotal[1], i-1 ) && +/* Generated */ // 3rd not far shorter than 2nd +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) // not short real body +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 2; totIdx >= 0; --totIdx) +/* Generated */ ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); +/* Generated */ for (totIdx = 2; totIdx >= 1; --totIdx) { +/* Generated */ FarPeriodTotal[totIdx] += TA_CANDLERANGE( Far, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( Far, FarTrailingIdx-totIdx ); +/* Generated */ NearPeriodTotal[totIdx] += TA_CANDLERANGE( Near, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( Near, NearTrailingIdx-totIdx ); +/* Generated */ } +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ NearTrailingIdx++; +/* Generated */ FarTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLABANDONEDBABY.c b/src/ta_func/ta_CDLABANDONEDBABY.c new file mode 100644 index 000000000..462aeb3bd --- /dev/null +++ b/src/ta_func/ta_CDLABANDONEDBABY.c @@ -0,0 +1,450 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 102304 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlAbandonedBabyLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlAbandonedBabyLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLABANDONEDBABY_Lookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInPenetration); + + return max( max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(BodyLong) ), + TA_CANDLEAVGPERIOD(BodyShort) + ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLABANDONEDBABY - Abandoned Baby + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlAbandonedBaby( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlAbandonedBaby( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlAbandonedBaby( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLABANDONEDBABY( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLABANDONEDBABY)(optInPenetration); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyDojiPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + BodyDojiTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyDoji); + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyDojiTrailingIdx; + while( i < startIdx-1 ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white (black) real body + * - second candle: doji + * - third candle: black (white) real body that moves well within the first candle's real body + * - upside (downside) gap between the first candle and the doji (the shadows of the two candles don't touch) + * - downside (upside) gap between the doji and the third candle (the shadows of the two candles don't touch) + * The meaning of "doji" and "long" is specified with TA_SetCandleSettings + * The meaning of "moves well within" is specified with optInPenetration and "moves" should mean the real body should + * not be short ("short" is specified with TA_SetCandleSettings) - Greg Morris wants it to be long, someone else want + * it to be relatively long + * outInteger is positive (1 to 100) when it's an abandoned baby bottom or negative (-1 to -100) when it's + * an abandoned baby top; the user should consider that an abandoned baby is significant when it appears in + * an uptrend or downtrend, while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long + TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i-1 ) && // 2nd: doji + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: longer than short + ( ( TA_CANDLECOLOR(i-2) == 1 && // 1st white + TA_CANDLECOLOR(i) == -1 && // 3rd black + inClose[i] < inClose[i-2] - TA_REALBODY(i-2) * optInPenetration && // 3rd closes well within 1st rb + TA_CANDLEGAPUP(i-1,i-2) && // upside gap between 1st and 2nd + TA_CANDLEGAPDOWN(i,i-1) // downside gap between 2nd and 3rd + ) + || + ( + TA_CANDLECOLOR(i-2) == -1 && // 1st black + TA_CANDLECOLOR(i) == 1 && // 3rd white + inClose[i] > inClose[i-2] + TA_REALBODY(i-2) * optInPenetration && // 3rd closes well within 1st rb + TA_CANDLEGAPDOWN(i-1,i-2) && // downside gap between 1st and 2nd + TA_CANDLEGAPUP(i,i-1) // upside gap between 2nd and 3rd + ) + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i-1 ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyDojiTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlAbandonedBaby( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlAbandonedBaby( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLABANDONEDBABY( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLABANDONEDBABY)(optInPenetration); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyDojiTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long +/* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i-1 ) && // 2nd: doji +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: longer than short +/* Generated */ ( ( TA_CANDLECOLOR(i-2) == 1 && // 1st white +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 3rd black +/* Generated */ inClose[i] < inClose[i-2] - TA_REALBODY(i-2) * optInPenetration && // 3rd closes well within 1st rb +/* Generated */ TA_CANDLEGAPUP(i-1,i-2) && // upside gap between 1st and 2nd +/* Generated */ TA_CANDLEGAPDOWN(i,i-1) // downside gap between 2nd and 3rd +/* Generated */ ) +/* Generated */ || +/* Generated */ ( +/* Generated */ TA_CANDLECOLOR(i-2) == -1 && // 1st black +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 3rd white +/* Generated */ inClose[i] > inClose[i-2] + TA_REALBODY(i-2) * optInPenetration && // 3rd closes well within 1st rb +/* Generated */ TA_CANDLEGAPDOWN(i-1,i-2) && // downside gap between 1st and 2nd +/* Generated */ TA_CANDLEGAPUP(i,i-1) // upside gap between 2nd and 3rd +/* Generated */ ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i-1 ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLADVANCEBLOCK.c b/src/ta_func/ta_CDLADVANCEBLOCK.c new file mode 100644 index 000000000..9dff161c4 --- /dev/null +++ b/src/ta_func/ta_CDLADVANCEBLOCK.c @@ -0,0 +1,548 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120404 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlAdvanceBlockLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlAdvanceBlockLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLADVANCEBLOCK_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( max( TA_CANDLEAVGPERIOD(ShadowLong), TA_CANDLEAVGPERIOD(ShadowShort) ), + max( TA_CANDLEAVGPERIOD(Far), TA_CANDLEAVGPERIOD(Near) ) ), + TA_CANDLEAVGPERIOD(BodyLong) + ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLADVANCEBLOCK - Advance Block + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlAdvanceBlock( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlAdvanceBlock( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlAdvanceBlock( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLADVANCEBLOCK( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(ShadowShortPeriodTotal,3); + ARRAY_LOCAL(ShadowLongPeriodTotal,2); + ARRAY_LOCAL(NearPeriodTotal,3); + ARRAY_LOCAL(FarPeriodTotal,3); + double BodyLongPeriodTotal; + int i, outIdx, totIdx, BodyLongTrailingIdx, ShadowShortTrailingIdx, ShadowLongTrailingIdx, NearTrailingIdx, + FarTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLADVANCEBLOCK)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowShortPeriodTotal[2] = 0; + ShadowShortPeriodTotal[1] = 0; + ShadowShortPeriodTotal[0] = 0; + ShadowShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowShort); + ShadowLongPeriodTotal[1] = 0; + ShadowLongPeriodTotal[0] = 0; + ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); + NearPeriodTotal[2] = 0; + NearPeriodTotal[1] = 0; + NearPeriodTotal[0] = 0; + NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); + FarPeriodTotal[2] = 0; + FarPeriodTotal[1] = 0; + FarPeriodTotal[0] = 0; + FarTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Far); + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = ShadowShortTrailingIdx; + while( i < startIdx ) { + ShadowShortPeriodTotal[2] += TA_CANDLERANGE( ShadowShort, i-2 ); + ShadowShortPeriodTotal[1] += TA_CANDLERANGE( ShadowShort, i-1 ); + ShadowShortPeriodTotal[0] += TA_CANDLERANGE( ShadowShort, i ); + i++; + } + i = ShadowLongTrailingIdx; + while( i < startIdx ) { + ShadowLongPeriodTotal[1] += TA_CANDLERANGE( ShadowLong, i-1 ); + ShadowLongPeriodTotal[0] += TA_CANDLERANGE( ShadowLong, i ); + i++; + } + i = NearTrailingIdx; + while( i < startIdx ) { + NearPeriodTotal[2] += TA_CANDLERANGE( Near, i-2 ); + NearPeriodTotal[1] += TA_CANDLERANGE( Near, i-1 ); + i++; + } + i = FarTrailingIdx; + while( i < startIdx ) { + FarPeriodTotal[2] += TA_CANDLERANGE( Far, i-2 ); + FarPeriodTotal[1] += TA_CANDLERANGE( Far, i-1 ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - three white candlesticks with consecutively higher closes + * - each candle opens within or near the previous white real body + * - first candle: long white with no or very short upper shadow (a short shadow is accepted too for more flexibility) + * - second and third candles, or only third candle, show signs of weakening: progressively smaller white real bodies + * and/or relatively long upper shadows; see below for specific conditions + * The meanings of "long body", "short shadow", "far" and "near" are specified with TA_SetCandleSettings; + * outInteger is negative (-1 to -100): advance block is always bearish; + * the user should consider that advance block is significant when it appears in uptrend, while this function + * does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == 1 && // 1st white + TA_CANDLECOLOR(i-1) == 1 && // 2nd white + TA_CANDLECOLOR(i) == 1 && // 3rd white + inClose[i] > inClose[i-1] && inClose[i-1] > inClose[i-2] && // consecutive higher closes + inOpen[i-1] > inOpen[i-2] && // 2nd opens within/near 1st real body + inOpen[i-1] <= inClose[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && + inOpen[i] > inOpen[i-1] && // 3rd opens within/near 2nd real body + inOpen[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[1], i-1 ) && + TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long real body + TA_UPPERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowShort, ShadowShortPeriodTotal[2], i-2 ) && + // 1st: short upper shadow + ( + // ( 2 far smaller than 1 && 3 not longer than 2 ) + // advance blocked with the 2nd, 3rd must not carry on the advance + ( + TA_REALBODY(i-1) < TA_REALBODY(i-2) - TA_CANDLEAVERAGE( Far, FarPeriodTotal[2], i-2 ) && + TA_REALBODY(i) < TA_REALBODY(i-1) + TA_CANDLEAVERAGE( Near, NearPeriodTotal[1], i-1 ) + ) || + // 3 far smaller than 2 + // advance blocked with the 3rd + ( + TA_REALBODY(i) < TA_REALBODY(i-1) - TA_CANDLEAVERAGE( Far, FarPeriodTotal[1], i-1 ) + ) || + // ( 3 smaller than 2 && 2 smaller than 1 && (3 or 2 not short upper shadow) ) + // advance blocked with progressively smaller real bodies and some upper shadows + ( + TA_REALBODY(i) < TA_REALBODY(i-1) && + TA_REALBODY(i-1) < TA_REALBODY(i-2) && + ( + TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowShort, ShadowShortPeriodTotal[0], i ) || + TA_UPPERSHADOW(i-1) > TA_CANDLEAVERAGE( ShadowShort, ShadowShortPeriodTotal[1], i-1 ) + ) + ) || + // ( 3 smaller than 2 && 3 long upper shadow ) + // advance blocked with 3rd candle's long upper shadow and smaller body + ( + TA_REALBODY(i) < TA_REALBODY(i-1) && + TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal[0], i ) + ) + ) + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 2; totIdx >= 0; --totIdx) + ShadowShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowShort, i-totIdx ) + - TA_CANDLERANGE( ShadowShort, ShadowShortTrailingIdx-totIdx ); + for (totIdx = 1; totIdx >= 0; --totIdx) + ShadowLongPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowLong, i-totIdx ) + - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx-totIdx ); + for (totIdx = 2; totIdx >= 1; --totIdx) { + FarPeriodTotal[totIdx] += TA_CANDLERANGE( Far, i-totIdx ) + - TA_CANDLERANGE( Far, FarTrailingIdx-totIdx ); + NearPeriodTotal[totIdx] += TA_CANDLERANGE( Near, i-totIdx ) + - TA_CANDLERANGE( Near, NearTrailingIdx-totIdx ); + } + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-2 ); + i++; + ShadowShortTrailingIdx++; + ShadowLongTrailingIdx++; + NearTrailingIdx++; + FarTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlAdvanceBlock( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlAdvanceBlock( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLADVANCEBLOCK( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(ShadowShortPeriodTotal,3); +/* Generated */ ARRAY_LOCAL(ShadowLongPeriodTotal,2); +/* Generated */ ARRAY_LOCAL(NearPeriodTotal,3); +/* Generated */ ARRAY_LOCAL(FarPeriodTotal,3); +/* Generated */ double BodyLongPeriodTotal; +/* Generated */ int i, outIdx, totIdx, BodyLongTrailingIdx, ShadowShortTrailingIdx, ShadowLongTrailingIdx, NearTrailingIdx, +/* Generated */ FarTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLADVANCEBLOCK)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowShortPeriodTotal[2] = 0; +/* Generated */ ShadowShortPeriodTotal[1] = 0; +/* Generated */ ShadowShortPeriodTotal[0] = 0; +/* Generated */ ShadowShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowShort); +/* Generated */ ShadowLongPeriodTotal[1] = 0; +/* Generated */ ShadowLongPeriodTotal[0] = 0; +/* Generated */ ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); +/* Generated */ NearPeriodTotal[2] = 0; +/* Generated */ NearPeriodTotal[1] = 0; +/* Generated */ NearPeriodTotal[0] = 0; +/* Generated */ NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); +/* Generated */ FarPeriodTotal[2] = 0; +/* Generated */ FarPeriodTotal[1] = 0; +/* Generated */ FarPeriodTotal[0] = 0; +/* Generated */ FarTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Far); +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = ShadowShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowShortPeriodTotal[2] += TA_CANDLERANGE( ShadowShort, i-2 ); +/* Generated */ ShadowShortPeriodTotal[1] += TA_CANDLERANGE( ShadowShort, i-1 ); +/* Generated */ ShadowShortPeriodTotal[0] += TA_CANDLERANGE( ShadowShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowLongPeriodTotal[1] += TA_CANDLERANGE( ShadowLong, i-1 ); +/* Generated */ ShadowLongPeriodTotal[0] += TA_CANDLERANGE( ShadowLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ NearPeriodTotal[2] += TA_CANDLERANGE( Near, i-2 ); +/* Generated */ NearPeriodTotal[1] += TA_CANDLERANGE( Near, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = FarTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ FarPeriodTotal[2] += TA_CANDLERANGE( Far, i-2 ); +/* Generated */ FarPeriodTotal[1] += TA_CANDLERANGE( Far, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == 1 && // 1st white +/* Generated */ TA_CANDLECOLOR(i-1) == 1 && // 2nd white +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 3rd white +/* Generated */ inClose[i] > inClose[i-1] && inClose[i-1] > inClose[i-2] && // consecutive higher closes +/* Generated */ inOpen[i-1] > inOpen[i-2] && // 2nd opens within/near 1st real body +/* Generated */ inOpen[i-1] <= inClose[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && +/* Generated */ inOpen[i] > inOpen[i-1] && // 3rd opens within/near 2nd real body +/* Generated */ inOpen[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[1], i-1 ) && +/* Generated */ TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long real body +/* Generated */ TA_UPPERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowShort, ShadowShortPeriodTotal[2], i-2 ) && +/* Generated */ // 1st: short upper shadow +/* Generated */ ( +/* Generated */ // ( 2 far smaller than 1 && 3 not longer than 2 ) +/* Generated */ // advance blocked with the 2nd, 3rd must not carry on the advance +/* Generated */ ( +/* Generated */ TA_REALBODY(i-1) < TA_REALBODY(i-2) - TA_CANDLEAVERAGE( Far, FarPeriodTotal[2], i-2 ) && +/* Generated */ TA_REALBODY(i) < TA_REALBODY(i-1) + TA_CANDLEAVERAGE( Near, NearPeriodTotal[1], i-1 ) +/* Generated */ ) || +/* Generated */ // 3 far smaller than 2 +/* Generated */ // advance blocked with the 3rd +/* Generated */ ( +/* Generated */ TA_REALBODY(i) < TA_REALBODY(i-1) - TA_CANDLEAVERAGE( Far, FarPeriodTotal[1], i-1 ) +/* Generated */ ) || +/* Generated */ // ( 3 smaller than 2 && 2 smaller than 1 && (3 or 2 not short upper shadow) ) +/* Generated */ // advance blocked with progressively smaller real bodies and some upper shadows +/* Generated */ ( +/* Generated */ TA_REALBODY(i) < TA_REALBODY(i-1) && +/* Generated */ TA_REALBODY(i-1) < TA_REALBODY(i-2) && +/* Generated */ ( +/* Generated */ TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowShort, ShadowShortPeriodTotal[0], i ) || +/* Generated */ TA_UPPERSHADOW(i-1) > TA_CANDLEAVERAGE( ShadowShort, ShadowShortPeriodTotal[1], i-1 ) +/* Generated */ ) +/* Generated */ ) || +/* Generated */ // ( 3 smaller than 2 && 3 long upper shadow ) +/* Generated */ // advance blocked with 3rd candle's long upper shadow and smaller body +/* Generated */ ( +/* Generated */ TA_REALBODY(i) < TA_REALBODY(i-1) && +/* Generated */ TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal[0], i ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 2; totIdx >= 0; --totIdx) +/* Generated */ ShadowShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowShort, ShadowShortTrailingIdx-totIdx ); +/* Generated */ for (totIdx = 1; totIdx >= 0; --totIdx) +/* Generated */ ShadowLongPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowLong, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx-totIdx ); +/* Generated */ for (totIdx = 2; totIdx >= 1; --totIdx) { +/* Generated */ FarPeriodTotal[totIdx] += TA_CANDLERANGE( Far, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( Far, FarTrailingIdx-totIdx ); +/* Generated */ NearPeriodTotal[totIdx] += TA_CANDLERANGE( Near, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( Near, NearTrailingIdx-totIdx ); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-2 ); +/* Generated */ i++; +/* Generated */ ShadowShortTrailingIdx++; +/* Generated */ ShadowLongTrailingIdx++; +/* Generated */ NearTrailingIdx++; +/* Generated */ FarTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLBELTHOLD.c b/src/ta_func/ta_CDLBELTHOLD.c new file mode 100644 index 000000000..0a259e3a5 --- /dev/null +++ b/src/ta_func/ta_CDLBELTHOLD.c @@ -0,0 +1,376 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlBeltHoldLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlBeltHoldLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLBELTHOLD_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyLong), TA_CANDLEAVGPERIOD(ShadowVeryShort) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLBELTHOLD - Belt-hold + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlBeltHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlBeltHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlBeltHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLBELTHOLD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyLongPeriodTotal, ShadowVeryShortPeriodTotal; + int i, outIdx, BodyLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLBELTHOLD)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - long white (black) real body + * - no or very short lower (upper) shadow + * The meaning of "long" and "very short" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when white (bullish), negative (-1 to -100) when black (bearish) + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i ) && // long body + ( + ( // white body and very short lower shadow + TA_CANDLECOLOR(i) == 1 && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) + ) || + ( // black body and very short upper shadow + TA_CANDLECOLOR(i) == -1 && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) + ) + ) ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlBeltHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlBeltHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLBELTHOLD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyLongPeriodTotal, ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, BodyLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLBELTHOLD)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i ) && // long body +/* Generated */ ( +/* Generated */ ( // white body and very short lower shadow +/* Generated */ TA_CANDLECOLOR(i) == 1 && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) +/* Generated */ ) || +/* Generated */ ( // black body and very short upper shadow +/* Generated */ TA_CANDLECOLOR(i) == -1 && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) +/* Generated */ ) +/* Generated */ ) ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLBREAKAWAY.c b/src/ta_func/ta_CDLBREAKAWAY.c new file mode 100644 index 000000000..5ca3e9ad5 --- /dev/null +++ b/src/ta_func/ta_CDLBREAKAWAY.c @@ -0,0 +1,383 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlBreakawayLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlBreakawayLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLBREAKAWAY_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(BodyLong) + 4; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLBREAKAWAY - Breakaway + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlBreakaway( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlBreakaway( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlBreakaway( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLBREAKAWAY( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyLongPeriodTotal; + int i, outIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLBREAKAWAY)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-4 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black (white) + * - second candle: black (white) day whose body gaps down (up) + * - third candle: black or white day with lower (higher) high and lower (higher) low than prior candle's + * - fourth candle: black (white) day with lower (higher) high and lower (higher) low than prior candle's + * - fifth candle: white (black) day that closes inside the gap, erasing the prior 3 days + * The meaning of "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that breakaway is significant in a trend opposite to the last candle, while this + * function does not consider it + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-4) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-4 ) && // 1st long + TA_CANDLECOLOR(i-4) == TA_CANDLECOLOR(i-3) && // 1st, 2nd, 4th same color, 5th opposite + TA_CANDLECOLOR(i-3) == TA_CANDLECOLOR(i-1) && + TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && + ( + ( TA_CANDLECOLOR(i-4) == -1 && // when 1st is black: + TA_REALBODYGAPDOWN(i-3,i-4) && // 2nd gaps down + inHigh[i-2] < inHigh[i-3] && inLow[i-2] < inLow[i-3] && // 3rd has lower high and low than 2nd + inHigh[i-1] < inHigh[i-2] && inLow[i-1] < inLow[i-2] && // 4th has lower high and low than 3rd + inClose[i] > inOpen[i-3] && inClose[i] < inClose[i-4] // 5th closes inside the gap + ) + || + ( TA_CANDLECOLOR(i-4) == 1 && // when 1st is white: + TA_REALBODYGAPUP(i-3,i-4) && // 2nd gaps up + inHigh[i-2] > inHigh[i-3] && inLow[i-2] > inLow[i-3] && // 3rd has higher high and low than 2nd + inHigh[i-1] > inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 4th has higher high and low than 3rd + inClose[i] < inOpen[i-3] && inClose[i] > inClose[i-4] // 5th closes inside the gap + ) + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-4 ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-4 ); + i++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlBreakaway( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlBreakaway( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLBREAKAWAY( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLBREAKAWAY)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-4 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-4) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-4 ) && // 1st long +/* Generated */ TA_CANDLECOLOR(i-4) == TA_CANDLECOLOR(i-3) && // 1st, 2nd, 4th same color, 5th opposite +/* Generated */ TA_CANDLECOLOR(i-3) == TA_CANDLECOLOR(i-1) && +/* Generated */ TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && +/* Generated */ ( +/* Generated */ ( TA_CANDLECOLOR(i-4) == -1 && // when 1st is black: +/* Generated */ TA_REALBODYGAPDOWN(i-3,i-4) && // 2nd gaps down +/* Generated */ inHigh[i-2] < inHigh[i-3] && inLow[i-2] < inLow[i-3] && // 3rd has lower high and low than 2nd +/* Generated */ inHigh[i-1] < inHigh[i-2] && inLow[i-1] < inLow[i-2] && // 4th has lower high and low than 3rd +/* Generated */ inClose[i] > inOpen[i-3] && inClose[i] < inClose[i-4] // 5th closes inside the gap +/* Generated */ ) +/* Generated */ || +/* Generated */ ( TA_CANDLECOLOR(i-4) == 1 && // when 1st is white: +/* Generated */ TA_REALBODYGAPUP(i-3,i-4) && // 2nd gaps up +/* Generated */ inHigh[i-2] > inHigh[i-3] && inLow[i-2] > inLow[i-3] && // 3rd has higher high and low than 2nd +/* Generated */ inHigh[i-1] > inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 4th has higher high and low than 3rd +/* Generated */ inClose[i] < inOpen[i-3] && inClose[i] > inClose[i-4] // 5th closes inside the gap +/* Generated */ ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-4 ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-4 ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLCLOSINGMARUBOZU.c b/src/ta_func/ta_CDLCLOSINGMARUBOZU.c new file mode 100644 index 000000000..cbb991410 --- /dev/null +++ b/src/ta_func/ta_CDLCLOSINGMARUBOZU.c @@ -0,0 +1,376 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 022005 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlClosingMarubozuLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlClosingMarubozuLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLCLOSINGMARUBOZU_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyLong), TA_CANDLEAVGPERIOD(ShadowVeryShort) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLCLOSINGMARUBOZU - Closing Marubozu + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlClosingMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlClosingMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlClosingMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLCLOSINGMARUBOZU( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyLongPeriodTotal, ShadowVeryShortPeriodTotal; + int i, outIdx, BodyLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLCLOSINGMARUBOZU)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - long white (black) real body + * - no or very short upper (lower) shadow + * The meaning of "long" and "very short" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when white (bullish), negative (-1 to -100) when black (bearish) + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i ) && // long body + ( + ( // white body and very short lower shadow + TA_CANDLECOLOR(i) == 1 && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) + ) || + ( // black body and very short upper shadow + TA_CANDLECOLOR(i) == -1 && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) + ) + ) ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlClosingMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlClosingMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLCLOSINGMARUBOZU( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyLongPeriodTotal, ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, BodyLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLCLOSINGMARUBOZU)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i ) && // long body +/* Generated */ ( +/* Generated */ ( // white body and very short lower shadow +/* Generated */ TA_CANDLECOLOR(i) == 1 && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) +/* Generated */ ) || +/* Generated */ ( // black body and very short upper shadow +/* Generated */ TA_CANDLECOLOR(i) == -1 && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) +/* Generated */ ) +/* Generated */ ) ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLCONCEALBABYSWALL.c b/src/ta_func/ta_CDLCONCEALBABYSWALL.c new file mode 100644 index 000000000..bfba843c1 --- /dev/null +++ b/src/ta_func/ta_CDLCONCEALBABYSWALL.c @@ -0,0 +1,384 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 022705 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlConcealBabysWallLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlConcealBabysWallLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLCONCEALBABYSWALL_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(ShadowVeryShort) + 3; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLCONCEALBABYSWALL - Concealing Baby Swallow + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlConcealBabysWall( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlConcealBabysWall( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlConcealBabysWall( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLCONCEALBABYSWALL( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(ShadowVeryShortPeriodTotal,4); + int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLCONCEALBABYSWALL)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowVeryShortPeriodTotal[3] = 0; + ShadowVeryShortPeriodTotal[2] = 0; + ShadowVeryShortPeriodTotal[1] = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal[3] += TA_CANDLERANGE( ShadowVeryShort, i-3 ); + ShadowVeryShortPeriodTotal[2] += TA_CANDLERANGE( ShadowVeryShort, i-2 ); + ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: black marubozu (very short shadows) + * - second candle: black marubozu (very short shadows) + * - third candle: black candle that opens gapping down but has an upper shadow that extends into the prior body + * - fourth candle: black candle that completely engulfs the third candle, including the shadows + * The meanings of "very short shadow" are specified with TA_SetCandleSettings; + * outInteger is positive (1 to 100): concealing baby swallow is always bullish; + * the user should consider that concealing baby swallow is significant when it appears in downtrend, while + * this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-3) == -1 && // 1st black + TA_CANDLECOLOR(i-2) == -1 && // 2nd black + TA_CANDLECOLOR(i-1) == -1 && // 3rd black + TA_CANDLECOLOR(i) == -1 && // 4th black + // 1st: marubozu + TA_LOWERSHADOW(i-3) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[3], i-3 ) && + TA_UPPERSHADOW(i-3) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[3], i-3 ) && + // 2nd: marubozu + TA_LOWERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && + TA_UPPERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && + TA_REALBODYGAPDOWN(i-1,i-2) && // 3rd: opens gapping down + // and HAS an upper shadow + TA_UPPERSHADOW(i-1) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + inHigh[i-1] > inClose[i-2] && // that extends into the prior body + inHigh[i] > inHigh[i-1] && inLow[i] < inLow[i-1] // 4th: engulfs the 3rd including the shadows + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 3; totIdx >= 1; --totIdx) + ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); + i++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlConcealBabysWall( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlConcealBabysWall( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLCONCEALBABYSWALL( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(ShadowVeryShortPeriodTotal,4); +/* Generated */ int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLCONCEALBABYSWALL)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowVeryShortPeriodTotal[3] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[2] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[1] = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal[3] += TA_CANDLERANGE( ShadowVeryShort, i-3 ); +/* Generated */ ShadowVeryShortPeriodTotal[2] += TA_CANDLERANGE( ShadowVeryShort, i-2 ); +/* Generated */ ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-3) == -1 && // 1st black +/* Generated */ TA_CANDLECOLOR(i-2) == -1 && // 2nd black +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 3rd black +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 4th black +/* Generated */ // 1st: marubozu +/* Generated */ TA_LOWERSHADOW(i-3) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[3], i-3 ) && +/* Generated */ TA_UPPERSHADOW(i-3) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[3], i-3 ) && +/* Generated */ // 2nd: marubozu +/* Generated */ TA_LOWERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && +/* Generated */ TA_UPPERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && +/* Generated */ TA_REALBODYGAPDOWN(i-1,i-2) && // 3rd: opens gapping down +/* Generated */ // and HAS an upper shadow +/* Generated */ TA_UPPERSHADOW(i-1) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ inHigh[i-1] > inClose[i-2] && // that extends into the prior body +/* Generated */ inHigh[i] > inHigh[i-1] && inLow[i] < inLow[i-1] // 4th: engulfs the 3rd including the shadows +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 3; totIdx >= 1; --totIdx) +/* Generated */ ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); +/* Generated */ i++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLCOUNTERATTACK.c b/src/ta_func/ta_CDLCOUNTERATTACK.c new file mode 100644 index 000000000..fa76bba85 --- /dev/null +++ b/src/ta_func/ta_CDLCOUNTERATTACK.c @@ -0,0 +1,378 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlCounterAttackLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlCounterAttackLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLCOUNTERATTACK_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(Equal), TA_CANDLEAVGPERIOD(BodyLong) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLCOUNTERATTACK - Counterattack + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlCounterAttack( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlCounterAttack( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlCounterAttack( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLCOUNTERATTACK( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double EqualPeriodTotal; + ARRAY_LOCAL(BodyLongPeriodTotal,2); + int i, outIdx, totIdx, EqualTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLCOUNTERATTACK)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + EqualPeriodTotal = 0; + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + BodyLongPeriodTotal[1] = 0; + BodyLongPeriodTotal[0] = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); + BodyLongPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black (white) + * - second candle: long white (black) with close equal to the prior close + * The meaning of "equal" and "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that counterattack is significant in a trend, while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // opposite candles + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && // 1st long + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[0], i ) && // 2nd long + inClose[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // equal closes + inClose[i] >= inClose[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); + for (totIdx = 1; totIdx >= 0; --totIdx) + BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); + i++; + EqualTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlCounterAttack( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlCounterAttack( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLCOUNTERATTACK( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double EqualPeriodTotal; +/* Generated */ ARRAY_LOCAL(BodyLongPeriodTotal,2); +/* Generated */ int i, outIdx, totIdx, EqualTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLCOUNTERATTACK)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ EqualPeriodTotal = 0; +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ BodyLongPeriodTotal[1] = 0; +/* Generated */ BodyLongPeriodTotal[0] = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ BodyLongPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // opposite candles +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && // 1st long +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[0], i ) && // 2nd long +/* Generated */ inClose[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // equal closes +/* Generated */ inClose[i] >= inClose[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); +/* Generated */ for (totIdx = 1; totIdx >= 0; --totIdx) +/* Generated */ BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); +/* Generated */ i++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLDARKCLOUDCOVER.c b/src/ta_func/ta_CDLDARKCLOUDCOVER.c new file mode 100644 index 000000000..ee5e3f04d --- /dev/null +++ b/src/ta_func/ta_CDLDARKCLOUDCOVER.c @@ -0,0 +1,384 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120904 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlDarkCloudCoverLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlDarkCloudCoverLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLDARKCLOUDCOVER_Lookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 5.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInPenetration); + + return TA_CANDLEAVGPERIOD(BodyLong) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLDARKCLOUDCOVER - Dark Cloud Cover + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlDarkCloudCover( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlDarkCloudCover( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlDarkCloudCover( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLDARKCLOUDCOVER( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyLongPeriodTotal; + int i, outIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 5.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLDARKCLOUDCOVER)(optInPenetration); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white candle + * - second candle: black candle that opens above previous day high and closes within previous day real body; + * Greg Morris wants the close to be below the midpoint of the previous real body + * The meaning of "long" is specified with TA_SetCandleSettings, the penetration of the first real body is specified + * with optInPenetration + * outInteger is negative (-1 to -100): dark cloud cover is always bearish + * the user should consider that a dark cloud cover is significant when it appears in an uptrend, while + * this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == 1 && // 1st: white + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // long + TA_CANDLECOLOR(i) == -1 && // 2nd: black + inOpen[i] > inHigh[i-1] && // open above prior high + inClose[i] > inOpen[i-1] && // close within prior body + inClose[i] < inClose[i-1] - TA_REALBODY(i-1) * optInPenetration + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); + i++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlDarkCloudCover( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlDarkCloudCover( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLDARKCLOUDCOVER( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 5.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLDARKCLOUDCOVER)(optInPenetration); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == 1 && // 1st: white +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // long +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 2nd: black +/* Generated */ inOpen[i] > inHigh[i-1] && // open above prior high +/* Generated */ inClose[i] > inOpen[i-1] && // close within prior body +/* Generated */ inClose[i] < inClose[i-1] - TA_REALBODY(i-1) * optInPenetration +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLDOJI.c b/src/ta_func/ta_CDLDOJI.c new file mode 100644 index 000000000..6d42dc7b2 --- /dev/null +++ b/src/ta_func/ta_CDLDOJI.c @@ -0,0 +1,337 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlDojiLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlDojiLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLDOJI_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(BodyDoji); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLDOJI - Doji + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLDOJI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLDOJI)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyDojiPeriodTotal = 0; + BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); + + i = BodyDojiTrailingIdx; + while( i < startIdx ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * + * Must have: + * - open quite equal to close + * How much can be the maximum distance between open and close is specified with TA_SetCandleSettings + * outInteger is always positive (1 to 100) but this does not mean it is bullish: doji shows uncertainty and it is + * neither bullish nor bearish when considered alone + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + i++; + BodyDojiTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLDOJI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLDOJI)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLDOJISTAR.c b/src/ta_func/ta_CDLDOJISTAR.c new file mode 100644 index 000000000..14a6de1c2 --- /dev/null +++ b/src/ta_func/ta_CDLDOJISTAR.c @@ -0,0 +1,368 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 100204 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlDojiStarLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlDojiStarLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLDOJISTAR_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(BodyLong) ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLDOJISTAR - Doji Star + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLDOJISTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLDOJISTAR)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyDojiPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyLong); + BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); + + i = BodyLongTrailingIdx; + while( i < startIdx-1 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyDojiTrailingIdx; + while( i < startIdx ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long real body + * - second candle: star (open gapping up in an uptrend or down in a downtrend) with a doji + * The meaning of "doji" and "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * it's defined bullish when the long candle is white and the star gaps up, bearish when the long candle + * is black and the star gaps down; the user should consider that a doji star is bullish when it appears + * in an uptrend and it's bearish when it appears in a downtrend, so to determine the bullishness or + * bearishness of the pattern the trend must be analyzed + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // 1st: long real body + TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && // 2nd: doji + ( ( TA_CANDLECOLOR(i-1) == 1 && TA_REALBODYGAPUP(i,i-1) ) // that gaps up if 1st is white + || + ( TA_CANDLECOLOR(i-1) == -1 && TA_REALBODYGAPDOWN(i,i-1) ) // or down if 1st is black + ) ) + outInteger[outIdx++] = -TA_CANDLECOLOR(i-1) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyDojiTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLDOJISTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLDOJISTAR)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // 1st: long real body +/* Generated */ TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && // 2nd: doji +/* Generated */ ( ( TA_CANDLECOLOR(i-1) == 1 && TA_REALBODYGAPUP(i,i-1) ) // that gaps up if 1st is white +/* Generated */ || +/* Generated */ ( TA_CANDLECOLOR(i-1) == -1 && TA_REALBODYGAPDOWN(i,i-1) ) // or down if 1st is black +/* Generated */ ) ) +/* Generated */ outInteger[outIdx++] = -TA_CANDLECOLOR(i-1) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLDRAGONFLYDOJI.c b/src/ta_func/ta_CDLDRAGONFLYDOJI.c new file mode 100644 index 000000000..de3082919 --- /dev/null +++ b/src/ta_func/ta_CDLDRAGONFLYDOJI.c @@ -0,0 +1,365 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlDragonflyDojiLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlDragonflyDojiLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLDRAGONFLYDOJI_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(ShadowVeryShort) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLDRAGONFLYDOJI - Dragonfly Doji + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlDragonflyDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlDragonflyDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlDragonflyDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLDRAGONFLYDOJI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, ShadowVeryShortPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLDRAGONFLYDOJI)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyDojiPeriodTotal = 0; + BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = BodyDojiTrailingIdx; + while( i < startIdx ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * + * Must have: + * - doji body + * - open and close at the high of the day = no or very short upper shadow + * - lower shadow (to distinguish from other dojis, here lower shadow should not be very short) + * The meaning of "doji" and "very short" is specified with TA_SetCandleSettings + * outInteger is always positive (1 to 100) but this does not mean it is bullish: dragonfly doji must be considered + * relatively to the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && + TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + i++; + BodyDojiTrailingIdx++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlDragonflyDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlDragonflyDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLDRAGONFLYDOJI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLDRAGONFLYDOJI)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && +/* Generated */ TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLENGULFING.c b/src/ta_func/ta_CDLENGULFING.c new file mode 100644 index 000000000..291971cd9 --- /dev/null +++ b/src/ta_func/ta_CDLENGULFING.c @@ -0,0 +1,329 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 102404 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlEngulfingLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlEngulfingLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLENGULFING_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLENGULFING - Engulfing Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlEngulfing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlEngulfing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlEngulfing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLENGULFING( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int i, outIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLENGULFING)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first: black (white) real body + * - second: white (black) real body that engulfs the prior real body + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that an engulfing must appear in a downtrend if bullish or in an uptrend if bearish, + * while this function does not consider it + */ + outIdx = 0; + do + { + if( ( TA_CANDLECOLOR(i) == 1 && TA_CANDLECOLOR(i-1) == -1 && // white engulfs black + inClose[i] > inOpen[i-1] && inOpen[i] < inClose[i-1] + ) + || + ( TA_CANDLECOLOR(i) == -1 && TA_CANDLECOLOR(i-1) == 1 && // black engulfs white + inOpen[i] > inClose[i-1] && inClose[i] < inOpen[i-1] + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + i++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlEngulfing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlEngulfing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLENGULFING( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int i, outIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLENGULFING)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( ( TA_CANDLECOLOR(i) == 1 && TA_CANDLECOLOR(i-1) == -1 && // white engulfs black +/* Generated */ inClose[i] > inOpen[i-1] && inOpen[i] < inClose[i-1] +/* Generated */ ) +/* Generated */ || +/* Generated */ ( TA_CANDLECOLOR(i) == -1 && TA_CANDLECOLOR(i-1) == 1 && // black engulfs white +/* Generated */ inOpen[i] > inClose[i-1] && inClose[i] < inOpen[i-1] +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ i++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLEVENINGDOJISTAR.c b/src/ta_func/ta_CDLEVENINGDOJISTAR.c new file mode 100644 index 000000000..73f5b6565 --- /dev/null +++ b/src/ta_func/ta_CDLEVENINGDOJISTAR.c @@ -0,0 +1,426 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 100304 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlEveningDojiStarLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlEveningDojiStarLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLEVENINGDOJISTAR_Lookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInPenetration); + + return max( max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(BodyLong) ), + TA_CANDLEAVGPERIOD(BodyShort) + ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLEVENINGDOJISTAR - Evening Doji Star + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlEveningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlEveningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlEveningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLEVENINGDOJISTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLEVENINGDOJISTAR)(optInPenetration); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyDojiPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + BodyDojiTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyDoji); + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyDojiTrailingIdx; + while( i < startIdx-1 ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white real body + * - second candle: doji gapping up + * - third candle: black real body that moves well within the first candle's real body + * The meaning of "doji" and "long" is specified with TA_SetCandleSettings + * The meaning of "moves well within" is specified with optInPenetration and "moves" should mean the real body should + * not be short ("short" is specified with TA_SetCandleSettings) - Greg Morris wants it to be long, someone else want + * it to be relatively long + * outInteger is negative (-1 to -100): evening star is always bearish; + * the user should consider that an evening star is significant when it appears in an uptrend, + * while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long + TA_CANDLECOLOR(i-2) == 1 && // white + TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i-1 ) && // 2nd: doji + TA_REALBODYGAPUP(i-1,i-2) && // gapping up + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: longer than short + TA_CANDLECOLOR(i) == -1 && // black real body + inClose[i] < inClose[i-2] - TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i-1 ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyDojiTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlEveningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlEveningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLEVENINGDOJISTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLEVENINGDOJISTAR)(optInPenetration); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyDojiTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long +/* Generated */ TA_CANDLECOLOR(i-2) == 1 && // white +/* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i-1 ) && // 2nd: doji +/* Generated */ TA_REALBODYGAPUP(i-1,i-2) && // gapping up +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: longer than short +/* Generated */ TA_CANDLECOLOR(i) == -1 && // black real body +/* Generated */ inClose[i] < inClose[i-2] - TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i-1 ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLEVENINGSTAR.c b/src/ta_func/ta_CDLEVENINGSTAR.c new file mode 100644 index 000000000..00c623da3 --- /dev/null +++ b/src/ta_func/ta_CDLEVENINGSTAR.c @@ -0,0 +1,412 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 100304 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlEveningStarLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlEveningStarLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLEVENINGSTAR_Lookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInPenetration); + + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLEVENINGSTAR - Evening Star + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlEveningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlEveningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlEveningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLEVENINGSTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyShortPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal2; + int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLEVENINGSTAR)(optInPenetration); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyShortPeriodTotal2 = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + BodyShortTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx-1 ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + BodyShortPeriodTotal2 += TA_CANDLERANGE( BodyShort, i+1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white real body + * - second candle: star (short real body gapping up) + * - third candle: black real body that moves well within the first candle's real body + * The meaning of "short" and "long" is specified with TA_SetCandleSettings + * The meaning of "moves well within" is specified with optInPenetration and "moves" should mean the real body should + * not be short ("short" is specified with TA_SetCandleSettings) - Greg Morris wants it to be long, someone else want + * it to be relatively long + * outInteger is negative (-1 to -100): evening star is always bearish; + * the user should consider that an evening star is significant when it appears in an uptrend, + * while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long + TA_CANDLECOLOR(i-2) == 1 && // white + TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i-1 ) && // 2nd: short + TA_REALBODYGAPUP(i-1,i-2) && // gapping up + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal2, i ) && // 3rd: longer than short + TA_CANDLECOLOR(i) == -1 && // black real body + inClose[i] < inClose[i-2] - TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i-1 ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + BodyShortPeriodTotal2 += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx+1 ); + i++; + BodyLongTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlEveningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlEveningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLEVENINGSTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyShortPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal2; +/* Generated */ int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLEVENINGSTAR)(optInPenetration); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal2 = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyShortTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ BodyShortPeriodTotal2 += TA_CANDLERANGE( BodyShort, i+1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long +/* Generated */ TA_CANDLECOLOR(i-2) == 1 && // white +/* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i-1 ) && // 2nd: short +/* Generated */ TA_REALBODYGAPUP(i-1,i-2) && // gapping up +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal2, i ) && // 3rd: longer than short +/* Generated */ TA_CANDLECOLOR(i) == -1 && // black real body +/* Generated */ inClose[i] < inClose[i-2] - TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i-1 ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ BodyShortPeriodTotal2 += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx+1 ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLGAPSIDESIDEWHITE.c b/src/ta_func/ta_CDLGAPSIDESIDEWHITE.c new file mode 100644 index 000000000..57fe2d853 --- /dev/null +++ b/src/ta_func/ta_CDLGAPSIDESIDEWHITE.c @@ -0,0 +1,385 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 020605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlGapSideSideWhiteLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlGapSideSideWhiteLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLGAPSIDESIDEWHITE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(Near), TA_CANDLEAVGPERIOD(Equal) ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLGAPSIDESIDEWHITE - Up/Down-gap side-by-side white lines + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlGapSideSideWhite( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlGapSideSideWhite( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlGapSideSideWhite( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLGAPSIDESIDEWHITE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double NearPeriodTotal, EqualPeriodTotal; + int i, outIdx, NearTrailingIdx, EqualTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLGAPSIDESIDEWHITE)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + NearPeriodTotal = 0; + EqualPeriodTotal = 0; + NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + + i = NearTrailingIdx; + while( i < startIdx ) { + NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ); + i++; + } + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - upside or downside gap (between the bodies) + * - first candle after the window: white candlestick + * - second candle after the window: white candlestick with similar size (near the same) and about the same + * open (equal) of the previous candle + * - the second candle does not close the window + * The meaning of "near" and "equal" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) or negative (-1 to -100): the user should consider that upside + * or downside gap side-by-side white lines is significant when it appears in a trend, while this function + * does not consider the trend + */ + outIdx = 0; + do + { + if( + ( // upside or downside gap between the 1st candle and both the next 2 candles + ( TA_REALBODYGAPUP(i-1,i-2) && TA_REALBODYGAPUP(i,i-2) ) + || + ( TA_REALBODYGAPDOWN(i-1,i-2) && TA_REALBODYGAPDOWN(i,i-2) ) + ) && + TA_CANDLECOLOR(i-1) == 1 && // 2nd: white + TA_CANDLECOLOR(i) == 1 && // 3rd: white + TA_REALBODY(i) >= TA_REALBODY(i-1) - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) && // same size 2 and 3 + TA_REALBODY(i) <= TA_REALBODY(i-1) + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) && + inOpen[i] >= inOpen[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // same open 2 and 3 + inOpen[i] <= inOpen[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) + ) + outInteger[outIdx++] = ( TA_REALBODYGAPUP(i-1,i-2) ? 100 : -100 ); + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ) - TA_CANDLERANGE( Near, NearTrailingIdx-1 ); + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); + i++; + NearTrailingIdx++; + EqualTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlGapSideSideWhite( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlGapSideSideWhite( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLGAPSIDESIDEWHITE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double NearPeriodTotal, EqualPeriodTotal; +/* Generated */ int i, outIdx, NearTrailingIdx, EqualTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLGAPSIDESIDEWHITE)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ NearPeriodTotal = 0; +/* Generated */ EqualPeriodTotal = 0; +/* Generated */ NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( +/* Generated */ ( // upside or downside gap between the 1st candle and both the next 2 candles +/* Generated */ ( TA_REALBODYGAPUP(i-1,i-2) && TA_REALBODYGAPUP(i,i-2) ) +/* Generated */ || +/* Generated */ ( TA_REALBODYGAPDOWN(i-1,i-2) && TA_REALBODYGAPDOWN(i,i-2) ) +/* Generated */ ) && +/* Generated */ TA_CANDLECOLOR(i-1) == 1 && // 2nd: white +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 3rd: white +/* Generated */ TA_REALBODY(i) >= TA_REALBODY(i-1) - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) && // same size 2 and 3 +/* Generated */ TA_REALBODY(i) <= TA_REALBODY(i-1) + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) && +/* Generated */ inOpen[i] >= inOpen[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // same open 2 and 3 +/* Generated */ inOpen[i] <= inOpen[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = ( TA_REALBODYGAPUP(i-1,i-2) ? 100 : -100 ); +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ) - TA_CANDLERANGE( Near, NearTrailingIdx-1 ); +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ NearTrailingIdx++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLGRAVESTONEDOJI.c b/src/ta_func/ta_CDLGRAVESTONEDOJI.c new file mode 100644 index 000000000..16992fb42 --- /dev/null +++ b/src/ta_func/ta_CDLGRAVESTONEDOJI.c @@ -0,0 +1,365 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlGravestoneDojiLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlGravestoneDojiLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLGRAVESTONEDOJI_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(ShadowVeryShort) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLGRAVESTONEDOJI - Gravestone Doji + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlGravestoneDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlGravestoneDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlGravestoneDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLGRAVESTONEDOJI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, ShadowVeryShortPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLGRAVESTONEDOJI)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyDojiPeriodTotal = 0; + BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = BodyDojiTrailingIdx; + while( i < startIdx ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * + * Must have: + * - doji body + * - open and close at the low of the day = no or very short lower shadow + * - upper shadow (to distinguish from other dojis, here upper shadow should not be very short) + * The meaning of "doji" and "very short" is specified with TA_SetCandleSettings + * outInteger is always positive (1 to 100) but this does not mean it is bullish: gravestone doji must be considered + * relatively to the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && + TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + i++; + BodyDojiTrailingIdx++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlGravestoneDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlGravestoneDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLGRAVESTONEDOJI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLGRAVESTONEDOJI)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && +/* Generated */ TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLHAMMER.c b/src/ta_func/ta_CDLHAMMER.c new file mode 100644 index 000000000..c46950efc --- /dev/null +++ b/src/ta_func/ta_CDLHAMMER.c @@ -0,0 +1,414 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 102304 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlHammerLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlHammerLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLHAMMER_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(ShadowLong) ), + TA_CANDLEAVGPERIOD(ShadowVeryShort) ), + TA_CANDLEAVGPERIOD(Near) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLHAMMER - Hammer + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLHAMMER( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal, ShadowLongPeriodTotal, ShadowVeryShortPeriodTotal, NearPeriodTotal; + int i, outIdx, BodyTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, NearTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLHAMMER)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + ShadowLongPeriodTotal = 0; + ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + NearPeriodTotal = 0; + NearTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(Near); + + i = BodyTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = ShadowLongTrailingIdx; + while( i < startIdx ) { + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = NearTrailingIdx; + while( i < startIdx-1 ) { + NearPeriodTotal += TA_CANDLERANGE( Near, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - small real body + * - long lower shadow + * - no, or very short, upper shadow + * - body below or near the lows of the previous candle + * The meaning of "short", "long" and "near the lows" is specified with TA_SetCandleSettings; + * outInteger is positive (1 to 100): hammer is always bullish; + * the user should consider that a hammer must appear in a downtrend, while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && // small rb + TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long lower shadow + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && // very short upper shadow + min( inClose[i], inOpen[i] ) <= inLow[i-1] + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) // rb near the prior candle's lows + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) + - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) + - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ) + - TA_CANDLERANGE( Near, NearTrailingIdx ); + i++; + BodyTrailingIdx++; + ShadowLongTrailingIdx++; + ShadowVeryShortTrailingIdx++; + NearTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLHAMMER( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal, ShadowLongPeriodTotal, ShadowVeryShortPeriodTotal, NearPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, NearTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLHAMMER)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ ShadowLongPeriodTotal = 0; +/* Generated */ ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ NearPeriodTotal = 0; +/* Generated */ NearTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(Near); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && // small rb +/* Generated */ TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long lower shadow +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && // very short upper shadow +/* Generated */ min( inClose[i], inOpen[i] ) <= inLow[i-1] + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) // rb near the prior candle's lows +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) +/* Generated */ - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) +/* Generated */ - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ) +/* Generated */ - TA_CANDLERANGE( Near, NearTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ ShadowLongTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ NearTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLHANGINGMAN.c b/src/ta_func/ta_CDLHANGINGMAN.c new file mode 100644 index 000000000..866f7a11a --- /dev/null +++ b/src/ta_func/ta_CDLHANGINGMAN.c @@ -0,0 +1,414 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 102304 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlHangingManLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlHangingManLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLHANGINGMAN_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(ShadowLong) ), + TA_CANDLEAVGPERIOD(ShadowVeryShort) ), + TA_CANDLEAVGPERIOD(Near) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLHANGINGMAN - Hanging Man + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlHangingMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHangingMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHangingMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLHANGINGMAN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal, ShadowLongPeriodTotal, ShadowVeryShortPeriodTotal, NearPeriodTotal; + int i, outIdx, BodyTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, NearTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLHANGINGMAN)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + ShadowLongPeriodTotal = 0; + ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + NearPeriodTotal = 0; + NearTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(Near); + + i = BodyTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = ShadowLongTrailingIdx; + while( i < startIdx ) { + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = NearTrailingIdx; + while( i < startIdx-1 ) { + NearPeriodTotal += TA_CANDLERANGE( Near, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - small real body + * - long lower shadow + * - no, or very short, upper shadow + * - body above or near the highs of the previous candle + * The meaning of "short", "long" and "near the highs" is specified with TA_SetCandleSettings; + * outInteger is negative (-1 to -100): hanging man is always bearish; + * the user should consider that a hanging man must appear in an uptrend, while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && // small rb + TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long lower shadow + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && // very short upper shadow + min( inClose[i], inOpen[i] ) >= inHigh[i-1] - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) // rb near the prior candle's highs + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) + - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) + - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ) + - TA_CANDLERANGE( Near, NearTrailingIdx ); + i++; + BodyTrailingIdx++; + ShadowLongTrailingIdx++; + ShadowVeryShortTrailingIdx++; + NearTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHangingMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHangingMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLHANGINGMAN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal, ShadowLongPeriodTotal, ShadowVeryShortPeriodTotal, NearPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, NearTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLHANGINGMAN)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ ShadowLongPeriodTotal = 0; +/* Generated */ ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ NearPeriodTotal = 0; +/* Generated */ NearTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(Near); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && // small rb +/* Generated */ TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long lower shadow +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && // very short upper shadow +/* Generated */ min( inClose[i], inOpen[i] ) >= inHigh[i-1] - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) // rb near the prior candle's highs +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) +/* Generated */ - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) +/* Generated */ - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ) +/* Generated */ - TA_CANDLERANGE( Near, NearTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ ShadowLongTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ NearTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLHARAMI.c b/src/ta_func/ta_CDLHARAMI.c new file mode 100644 index 000000000..d8ecec8f6 --- /dev/null +++ b/src/ta_func/ta_CDLHARAMI.c @@ -0,0 +1,366 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 102404 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlHaramiLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlHaramiLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLHARAMI_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLHARAMI - Harami Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlHarami( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHarami( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHarami( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLHARAMI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyShortPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLHARAMI)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyLong); + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-1 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white (black) real body + * - second candle: short real body totally engulfed by the first + * The meaning of "short" and "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that a harami is significant when it appears in a downtrend if bullish or + * in an uptrend when bearish, while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // 1st: long + TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 2nd: short + max( inClose[i], inOpen[i] ) < max( inClose[i-1], inOpen[i-1] ) && // engulfed by 1st + min( inClose[i], inOpen[i] ) > min( inClose[i-1], inOpen[i-1] ) + ) + outInteger[outIdx++] = -TA_CANDLECOLOR(i-1) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHarami( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHarami( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLHARAMI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyShortPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLHARAMI)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // 1st: long +/* Generated */ TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 2nd: short +/* Generated */ max( inClose[i], inOpen[i] ) < max( inClose[i-1], inOpen[i-1] ) && // engulfed by 1st +/* Generated */ min( inClose[i], inOpen[i] ) > min( inClose[i-1], inOpen[i-1] ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -TA_CANDLECOLOR(i-1) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLHARAMICROSS.c b/src/ta_func/ta_CDLHARAMICROSS.c new file mode 100644 index 000000000..a2ee5bfa4 --- /dev/null +++ b/src/ta_func/ta_CDLHARAMICROSS.c @@ -0,0 +1,366 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 102404 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlHaramiCrossLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlHaramiCrossLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLHARAMICROSS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(BodyLong) ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLHARAMICROSS - Harami Cross Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlHaramiCross( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHaramiCross( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHaramiCross( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLHARAMICROSS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLHARAMICROSS)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyDojiPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyLong); + BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); + + i = BodyLongTrailingIdx; + while( i < startIdx-1 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyDojiTrailingIdx; + while( i < startIdx ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white (black) real body + * - second candle: doji totally engulfed by the first + * The meaning of "doji" and "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that a harami cross is significant when it appears in a downtrend if bullish or + * in an uptrend when bearish, while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // 1st: long + TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && // 2nd: doji + max( inClose[i], inOpen[i] ) < max( inClose[i-1], inOpen[i-1] ) && // engulfed by 1st + min( inClose[i], inOpen[i] ) > min( inClose[i-1], inOpen[i-1] ) + ) + outInteger[outIdx++] = -TA_CANDLECOLOR(i-1) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyDojiTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHaramiCross( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHaramiCross( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLHARAMICROSS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLHARAMICROSS)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // 1st: long +/* Generated */ TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && // 2nd: doji +/* Generated */ max( inClose[i], inOpen[i] ) < max( inClose[i-1], inOpen[i-1] ) && // engulfed by 1st +/* Generated */ min( inClose[i], inOpen[i] ) > min( inClose[i-1], inOpen[i-1] ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -TA_CANDLECOLOR(i-1) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLHIGHWAVE.c b/src/ta_func/ta_CDLHIGHWAVE.c new file mode 100644 index 000000000..7a542590b --- /dev/null +++ b/src/ta_func/ta_CDLHIGHWAVE.c @@ -0,0 +1,359 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 072404 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlHignWaveLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlHignWaveLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLHIGHWAVE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(ShadowVeryLong) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLHIGHWAVE - High-Wave Candle + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlHignWave( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHignWave( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHignWave( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLHIGHWAVE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal, ShadowPeriodTotal; + int i, outIdx, BodyTrailingIdx, ShadowTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLHIGHWAVE)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + ShadowPeriodTotal = 0; + ShadowTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryLong); + + i = BodyTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = ShadowTrailingIdx; + while( i < startIdx ) { + ShadowPeriodTotal += TA_CANDLERANGE( ShadowVeryLong, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - short real body + * - very long upper and lower shadow + * The meaning of "short" and "very long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when white or negative (-1 to -100) when black; + * it does not mean bullish or bearish + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && + TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryLong, ShadowPeriodTotal, i ) && + TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryLong, ShadowPeriodTotal, i ) ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); + ShadowPeriodTotal += TA_CANDLERANGE( ShadowVeryLong, i ) - TA_CANDLERANGE( ShadowVeryLong, ShadowTrailingIdx ); + i++; + BodyTrailingIdx++; + ShadowTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHignWave( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHignWave( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLHIGHWAVE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal, ShadowPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, ShadowTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLHIGHWAVE)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ ShadowPeriodTotal = 0; +/* Generated */ ShadowTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryLong); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowPeriodTotal += TA_CANDLERANGE( ShadowVeryLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && +/* Generated */ TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryLong, ShadowPeriodTotal, i ) && +/* Generated */ TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryLong, ShadowPeriodTotal, i ) ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); +/* Generated */ ShadowPeriodTotal += TA_CANDLERANGE( ShadowVeryLong, i ) - TA_CANDLERANGE( ShadowVeryLong, ShadowTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ ShadowTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLHIKKAKE.c b/src/ta_func/ta_CDLHIKKAKE.c new file mode 100644 index 000000000..2973c4f73 --- /dev/null +++ b/src/ta_func/ta_CDLHIKKAKE.c @@ -0,0 +1,399 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120305 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlHikkakeLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlHikkakeLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLHIKKAKE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return 5; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLHIKKAKE - Hikkake Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlHikkake( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHikkake( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHikkake( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLHIKKAKE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int i, outIdx, lookbackTotal, patternIdx, patternResult; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLHIKKAKE)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + patternIdx = 0; + patternResult = 0; + + i = startIdx - 3; + while( i < startIdx ) { + /* copy here the pattern recognition code below */ + if( inHigh[i-1] < inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 1st + 2nd: lower high and higher low + ( ( inHigh[i] < inHigh[i-1] && inLow[i] < inLow[i-1] ) // (bull) 3rd: lower high and lower low + || + ( inHigh[i] > inHigh[i-1] && inLow[i] > inLow[i-1] ) // (bear) 3rd: higher high and higher low + ) + ) { + patternResult = 100 * ( inHigh[i] < inHigh[i-1] ? 1 : -1 ); + patternIdx = i; + } else + /* search for confirmation if hikkake was no more than 3 bars ago */ + if( i <= patternIdx+3 && + ( ( patternResult > 0 && inClose[i] > inHigh[patternIdx-1] ) // close higher than the high of 2nd + || + ( patternResult < 0 && inClose[i] < inLow[patternIdx-1] ) // close lower than the low of 2nd + ) + ) + patternIdx = 0; + i++; + } + + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first and second candle: inside bar (2nd has lower high and higher low than 1st) + * - third candle: lower high and lower low than 2nd (higher high and higher low than 2nd) + * outInteger[hikkakebar] is positive (1 to 100) or negative (-1 to -100) meaning bullish or bearish hikkake + * Confirmation could come in the next 3 days with: + * - a day that closes higher than the high (lower than the low) of the 2nd candle + * outInteger[confirmationbar] is equal to 100 + the bullish hikkake result or -100 - the bearish hikkake result + * Note: if confirmation and a new hikkake come at the same bar, only the new hikkake is reported (the new hikkake + * overwrites the confirmation of the old hikkake) + */ + outIdx = 0; + do + { + if( inHigh[i-1] < inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 1st + 2nd: lower high and higher low + ( ( inHigh[i] < inHigh[i-1] && inLow[i] < inLow[i-1] ) // (bull) 3rd: lower high and lower low + || + ( inHigh[i] > inHigh[i-1] && inLow[i] > inLow[i-1] ) // (bear) 3rd: higher high and higher low + ) + ) { + patternResult = 100 * ( inHigh[i] < inHigh[i-1] ? 1 : -1 ); + patternIdx = i; + outInteger[outIdx++] = patternResult; + } else + /* search for confirmation if hikkake was no more than 3 bars ago */ + if( i <= patternIdx+3 && + ( ( patternResult > 0 && inClose[i] > inHigh[patternIdx-1] ) // close higher than the high of 2nd + || + ( patternResult < 0 && inClose[i] < inLow[patternIdx-1] ) // close lower than the low of 2nd + ) + ) { + outInteger[outIdx++] = patternResult + 100 * ( patternResult > 0 ? 1 : -1 ); + patternIdx = 0; + } else + outInteger[outIdx++] = 0; + i++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHikkake( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHikkake( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLHIKKAKE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int i, outIdx, lookbackTotal, patternIdx, patternResult; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLHIKKAKE)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ patternIdx = 0; +/* Generated */ patternResult = 0; +/* Generated */ i = startIdx - 3; +/* Generated */ while( i < startIdx ) { +/* Generated */ if( inHigh[i-1] < inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 1st + 2nd: lower high and higher low +/* Generated */ ( ( inHigh[i] < inHigh[i-1] && inLow[i] < inLow[i-1] ) // (bull) 3rd: lower high and lower low +/* Generated */ || +/* Generated */ ( inHigh[i] > inHigh[i-1] && inLow[i] > inLow[i-1] ) // (bear) 3rd: higher high and higher low +/* Generated */ ) +/* Generated */ ) { +/* Generated */ patternResult = 100 * ( inHigh[i] < inHigh[i-1] ? 1 : -1 ); +/* Generated */ patternIdx = i; +/* Generated */ } else +/* Generated */ if( i <= patternIdx+3 && +/* Generated */ ( ( patternResult > 0 && inClose[i] > inHigh[patternIdx-1] ) // close higher than the high of 2nd +/* Generated */ || +/* Generated */ ( patternResult < 0 && inClose[i] < inLow[patternIdx-1] ) // close lower than the low of 2nd +/* Generated */ ) +/* Generated */ ) +/* Generated */ patternIdx = 0; +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( inHigh[i-1] < inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 1st + 2nd: lower high and higher low +/* Generated */ ( ( inHigh[i] < inHigh[i-1] && inLow[i] < inLow[i-1] ) // (bull) 3rd: lower high and lower low +/* Generated */ || +/* Generated */ ( inHigh[i] > inHigh[i-1] && inLow[i] > inLow[i-1] ) // (bear) 3rd: higher high and higher low +/* Generated */ ) +/* Generated */ ) { +/* Generated */ patternResult = 100 * ( inHigh[i] < inHigh[i-1] ? 1 : -1 ); +/* Generated */ patternIdx = i; +/* Generated */ outInteger[outIdx++] = patternResult; +/* Generated */ } else +/* Generated */ if( i <= patternIdx+3 && +/* Generated */ ( ( patternResult > 0 && inClose[i] > inHigh[patternIdx-1] ) // close higher than the high of 2nd +/* Generated */ || +/* Generated */ ( patternResult < 0 && inClose[i] < inLow[patternIdx-1] ) // close lower than the low of 2nd +/* Generated */ ) +/* Generated */ ) { +/* Generated */ outInteger[outIdx++] = patternResult + 100 * ( patternResult > 0 ? 1 : -1 ); +/* Generated */ patternIdx = 0; +/* Generated */ } else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ i++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLHIKKAKEMOD.c b/src/ta_func/ta_CDLHIKKAKEMOD.c new file mode 100644 index 000000000..9fdf49685 --- /dev/null +++ b/src/ta_func/ta_CDLHIKKAKEMOD.c @@ -0,0 +1,457 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 122605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlHikkakeModLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlHikkakeModLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLHIKKAKEMOD_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( 1, TA_CANDLEAVGPERIOD(Near) ) + 5; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLHIKKAKEMOD - Modified Hikkake Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlHikkakeMod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHikkakeMod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHikkakeMod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLHIKKAKEMOD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double NearPeriodTotal; + int i, outIdx, NearTrailingIdx, lookbackTotal, patternIdx, patternResult; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLHIKKAKEMOD)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + NearPeriodTotal = 0; + NearTrailingIdx = startIdx - 3 - TA_CANDLEAVGPERIOD(Near); + i = NearTrailingIdx; + while( i < startIdx - 3 ) { + NearPeriodTotal += TA_CANDLERANGE( Near, i-2 ); + i++; + } + + patternIdx = 0; + patternResult = 0; + + i = startIdx - 3; + while( i < startIdx ) { + /* copy here the pattern recognition code below */ + if( inHigh[i-2] < inHigh[i-3] && inLow[i-2] > inLow[i-3] && // 2nd: lower high and higher low than 1st + inHigh[i-1] < inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 3rd: lower high and higher low than 2nd + ( ( inHigh[i] < inHigh[i-1] && inLow[i] < inLow[i-1] && // (bull) 4th: lower high and lower low + inClose[i-2] <= inLow[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-2 ) + // (bull) 2nd: close near the low + ) + || + ( inHigh[i] > inHigh[i-1] && inLow[i] > inLow[i-1] && // (bear) 4th: higher high and higher low + inClose[i-2] >= inHigh[i-2] - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-2 ) + // (bull) 2nd: close near the top + ) + ) + ) { + patternResult = 100 * ( inHigh[i] < inHigh[i-1] ? 1 : -1 ); + patternIdx = i; + } else + /* search for confirmation if modified hikkake was no more than 3 bars ago */ + if( i <= patternIdx+3 && + ( ( patternResult > 0 && inClose[i] > inHigh[patternIdx-1] ) // close higher than the high of 3rd + || + ( patternResult < 0 && inClose[i] < inLow[patternIdx-1] ) // close lower than the low of 3rd + ) + ) + patternIdx = 0; + NearPeriodTotal += TA_CANDLERANGE( Near, i-2 ) - TA_CANDLERANGE( Near, NearTrailingIdx-2 ); + NearTrailingIdx++; + i++; + } + + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle + * - second candle: candle with range less than first candle and close near the bottom (near the top) + * - third candle: lower high and higher low than 2nd + * - fourth candle: lower high and lower low (higher high and higher low) than 3rd + * outInteger[hikkake bar] is positive (1 to 100) or negative (-1 to -100) meaning bullish or bearish hikkake + * Confirmation could come in the next 3 days with: + * - a day that closes higher than the high (lower than the low) of the 3rd candle + * outInteger[confirmationbar] is equal to 100 + the bullish hikkake result or -100 - the bearish hikkake result + * Note: if confirmation and a new hikkake come at the same bar, only the new hikkake is reported (the new hikkake + * overwrites the confirmation of the old hikkake); + * the user should consider that modified hikkake is a reversal pattern, while hikkake could be both a reversal + * or a continuation pattern, so bullish (bearish) modified hikkake is significant when appearing in a downtrend + * (uptrend) + */ + outIdx = 0; + do + { + if( inHigh[i-2] < inHigh[i-3] && inLow[i-2] > inLow[i-3] && // 2nd: lower high and higher low than 1st + inHigh[i-1] < inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 3rd: lower high and higher low than 2nd + ( ( inHigh[i] < inHigh[i-1] && inLow[i] < inLow[i-1] && // (bull) 4th: lower high and lower low + inClose[i-2] <= inLow[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-2 ) + // (bull) 2nd: close near the low + ) + || + ( inHigh[i] > inHigh[i-1] && inLow[i] > inLow[i-1] && // (bear) 4th: higher high and higher low + inClose[i-2] >= inHigh[i-2] - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-2 ) + // (bull) 2nd: close near the top + ) + ) + ) { + patternResult = 100 * ( inHigh[i] < inHigh[i-1] ? 1 : -1 ); + patternIdx = i; + outInteger[outIdx++] = patternResult; + } else + /* search for confirmation if modified hikkake was no more than 3 bars ago */ + if( i <= patternIdx+3 && + ( ( patternResult > 0 && inClose[i] > inHigh[patternIdx-1] ) // close higher than the high of 3rd + || + ( patternResult < 0 && inClose[i] < inLow[patternIdx-1] ) // close lower than the low of 3rd + ) + ) { + outInteger[outIdx++] = patternResult + 100 * ( patternResult > 0 ? 1 : -1 ); + patternIdx = 0; + } else + outInteger[outIdx++] = 0; + NearPeriodTotal += TA_CANDLERANGE( Near, i-2 ) - TA_CANDLERANGE( Near, NearTrailingIdx-2 ); + NearTrailingIdx++; + i++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHikkakeMod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHikkakeMod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLHIKKAKEMOD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double NearPeriodTotal; +/* Generated */ int i, outIdx, NearTrailingIdx, lookbackTotal, patternIdx, patternResult; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLHIKKAKEMOD)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ NearPeriodTotal = 0; +/* Generated */ NearTrailingIdx = startIdx - 3 - TA_CANDLEAVGPERIOD(Near); +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx - 3 ) { +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-2 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ patternIdx = 0; +/* Generated */ patternResult = 0; +/* Generated */ i = startIdx - 3; +/* Generated */ while( i < startIdx ) { +/* Generated */ if( inHigh[i-2] < inHigh[i-3] && inLow[i-2] > inLow[i-3] && // 2nd: lower high and higher low than 1st +/* Generated */ inHigh[i-1] < inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 3rd: lower high and higher low than 2nd +/* Generated */ ( ( inHigh[i] < inHigh[i-1] && inLow[i] < inLow[i-1] && // (bull) 4th: lower high and lower low +/* Generated */ inClose[i-2] <= inLow[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-2 ) +/* Generated */ // (bull) 2nd: close near the low +/* Generated */ ) +/* Generated */ || +/* Generated */ ( inHigh[i] > inHigh[i-1] && inLow[i] > inLow[i-1] && // (bear) 4th: higher high and higher low +/* Generated */ inClose[i-2] >= inHigh[i-2] - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-2 ) +/* Generated */ // (bull) 2nd: close near the top +/* Generated */ ) +/* Generated */ ) +/* Generated */ ) { +/* Generated */ patternResult = 100 * ( inHigh[i] < inHigh[i-1] ? 1 : -1 ); +/* Generated */ patternIdx = i; +/* Generated */ } else +/* Generated */ if( i <= patternIdx+3 && +/* Generated */ ( ( patternResult > 0 && inClose[i] > inHigh[patternIdx-1] ) // close higher than the high of 3rd +/* Generated */ || +/* Generated */ ( patternResult < 0 && inClose[i] < inLow[patternIdx-1] ) // close lower than the low of 3rd +/* Generated */ ) +/* Generated */ ) +/* Generated */ patternIdx = 0; +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-2 ) - TA_CANDLERANGE( Near, NearTrailingIdx-2 ); +/* Generated */ NearTrailingIdx++; +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( inHigh[i-2] < inHigh[i-3] && inLow[i-2] > inLow[i-3] && // 2nd: lower high and higher low than 1st +/* Generated */ inHigh[i-1] < inHigh[i-2] && inLow[i-1] > inLow[i-2] && // 3rd: lower high and higher low than 2nd +/* Generated */ ( ( inHigh[i] < inHigh[i-1] && inLow[i] < inLow[i-1] && // (bull) 4th: lower high and lower low +/* Generated */ inClose[i-2] <= inLow[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-2 ) +/* Generated */ // (bull) 2nd: close near the low +/* Generated */ ) +/* Generated */ || +/* Generated */ ( inHigh[i] > inHigh[i-1] && inLow[i] > inLow[i-1] && // (bear) 4th: higher high and higher low +/* Generated */ inClose[i-2] >= inHigh[i-2] - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-2 ) +/* Generated */ // (bull) 2nd: close near the top +/* Generated */ ) +/* Generated */ ) +/* Generated */ ) { +/* Generated */ patternResult = 100 * ( inHigh[i] < inHigh[i-1] ? 1 : -1 ); +/* Generated */ patternIdx = i; +/* Generated */ outInteger[outIdx++] = patternResult; +/* Generated */ } else +/* Generated */ if( i <= patternIdx+3 && +/* Generated */ ( ( patternResult > 0 && inClose[i] > inHigh[patternIdx-1] ) // close higher than the high of 3rd +/* Generated */ || +/* Generated */ ( patternResult < 0 && inClose[i] < inLow[patternIdx-1] ) // close lower than the low of 3rd +/* Generated */ ) +/* Generated */ ) { +/* Generated */ outInteger[outIdx++] = patternResult + 100 * ( patternResult > 0 ? 1 : -1 ); +/* Generated */ patternIdx = 0; +/* Generated */ } else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-2 ) - TA_CANDLERANGE( Near, NearTrailingIdx-2 ); +/* Generated */ NearTrailingIdx++; +/* Generated */ i++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLHOMINGPIGEON.c b/src/ta_func/ta_CDLHOMINGPIGEON.c new file mode 100644 index 000000000..19c6386c7 --- /dev/null +++ b/src/ta_func/ta_CDLHOMINGPIGEON.c @@ -0,0 +1,370 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 032005 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlHomingPigeonLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlHomingPigeonLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLHOMINGPIGEON_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLHOMINGPIGEON - Homing Pigeon + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlHomingPigeon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHomingPigeon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHomingPigeon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLHOMINGPIGEON( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyShortPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLHOMINGPIGEON)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black candle + * - second candle: short black real body completely inside the previous day's body + * The meaning of "short" and "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100): homing pigeon is always bullish; + * the user should consider that homing pigeon is significant when it appears in a downtrend, + * while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -1 && // 1st black + TA_CANDLECOLOR(i) == -1 && // 2nd black + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // 1st long + TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 2nd short + inOpen[i] < inOpen[i-1] && // 2nd engulfed by 1st + inClose[i] > inClose[i-1] + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlHomingPigeon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlHomingPigeon( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLHOMINGPIGEON( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyShortPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLHOMINGPIGEON)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -1 && // 1st black +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 2nd black +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // 1st long +/* Generated */ TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 2nd short +/* Generated */ inOpen[i] < inOpen[i-1] && // 2nd engulfed by 1st +/* Generated */ inClose[i] > inClose[i-1] +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLIDENTICAL3CROWS.c b/src/ta_func/ta_CDLIDENTICAL3CROWS.c new file mode 100644 index 000000000..ca38679aa --- /dev/null +++ b/src/ta_func/ta_CDLIDENTICAL3CROWS.c @@ -0,0 +1,419 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 103104 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlIdentical3CrowsLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlIdentical3CrowsLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLIDENTICAL3CROWS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(ShadowVeryShort), TA_CANDLEAVGPERIOD(Equal) + ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLIDENTICAL3CROWS - Identical Three Crows + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlIdentical3Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlIdentical3Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlIdentical3Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLIDENTICAL3CROWS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(ShadowVeryShortPeriodTotal,3); + ARRAY_LOCAL(EqualPeriodTotal,3); + int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, EqualTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLIDENTICAL3CROWS)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowVeryShortPeriodTotal[2] = 0; + ShadowVeryShortPeriodTotal[1] = 0; + ShadowVeryShortPeriodTotal[0] = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + EqualPeriodTotal[2] = 0; + EqualPeriodTotal[1] = 0; + EqualPeriodTotal[0] = 0; + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal[2] += TA_CANDLERANGE( ShadowVeryShort, i-2 ); + ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal[2] += TA_CANDLERANGE( Equal, i-2 ); + EqualPeriodTotal[1] += TA_CANDLERANGE( Equal, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - three consecutive and declining black candlesticks + * - each candle must have no or very short lower shadow + * - each candle after the first must open at or very close to the prior candle's close + * The meaning of "very short" is specified with TA_SetCandleSettings; + * the meaning of "very close" is specified with TA_SetCandleSettings (Equal); + * outInteger is negative (-1 to -100): identical three crows is always bearish; + * the user should consider that identical 3 crows is significant when it appears after a mature advance or at high levels, + * while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == -1 && // 1st black + // very short lower shadow + TA_LOWERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && + TA_CANDLECOLOR(i-1) == -1 && // 2nd black + // very short lower shadow + TA_LOWERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + TA_CANDLECOLOR(i) == -1 && // 3rd black + // very short lower shadow + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + inClose[i-2] > inClose[i-1] && // three declining + inClose[i-1] > inClose[i] && + // 2nd black opens very close to 1st close + inOpen[i-1] <= inClose[i-2] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal[2], i-2 ) && + inOpen[i-1] >= inClose[i-2] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal[2], i-2 ) && + // 3rd black opens very close to 2nd close + inOpen[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal[1], i-1 ) && + inOpen[i] >= inClose[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal[1], i-1 ) + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 2; totIdx >= 0; --totIdx) + ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); + for (totIdx = 2; totIdx >= 1; --totIdx) + EqualPeriodTotal[totIdx] += TA_CANDLERANGE( Equal, i-totIdx ) + - TA_CANDLERANGE( Equal, EqualTrailingIdx-totIdx ); + i++; + ShadowVeryShortTrailingIdx++; + EqualTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlIdentical3Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlIdentical3Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLIDENTICAL3CROWS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(ShadowVeryShortPeriodTotal,3); +/* Generated */ ARRAY_LOCAL(EqualPeriodTotal,3); +/* Generated */ int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, EqualTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLIDENTICAL3CROWS)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowVeryShortPeriodTotal[2] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[1] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[0] = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ EqualPeriodTotal[2] = 0; +/* Generated */ EqualPeriodTotal[1] = 0; +/* Generated */ EqualPeriodTotal[0] = 0; +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal[2] += TA_CANDLERANGE( ShadowVeryShort, i-2 ); +/* Generated */ ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal[2] += TA_CANDLERANGE( Equal, i-2 ); +/* Generated */ EqualPeriodTotal[1] += TA_CANDLERANGE( Equal, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == -1 && // 1st black +/* Generated */ // very short lower shadow +/* Generated */ TA_LOWERSHADOW(i-2) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[2], i-2 ) && +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 2nd black +/* Generated */ // very short lower shadow +/* Generated */ TA_LOWERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 3rd black +/* Generated */ // very short lower shadow +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ inClose[i-2] > inClose[i-1] && // three declining +/* Generated */ inClose[i-1] > inClose[i] && +/* Generated */ // 2nd black opens very close to 1st close +/* Generated */ inOpen[i-1] <= inClose[i-2] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal[2], i-2 ) && +/* Generated */ inOpen[i-1] >= inClose[i-2] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal[2], i-2 ) && +/* Generated */ // 3rd black opens very close to 2nd close +/* Generated */ inOpen[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal[1], i-1 ) && +/* Generated */ inOpen[i] >= inClose[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal[1], i-1 ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 2; totIdx >= 0; --totIdx) +/* Generated */ ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); +/* Generated */ for (totIdx = 2; totIdx >= 1; --totIdx) +/* Generated */ EqualPeriodTotal[totIdx] += TA_CANDLERANGE( Equal, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( Equal, EqualTrailingIdx-totIdx ); +/* Generated */ i++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLINNECK.c b/src/ta_func/ta_CDLINNECK.c new file mode 100644 index 000000000..3d22e1123 --- /dev/null +++ b/src/ta_func/ta_CDLINNECK.c @@ -0,0 +1,373 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 121104 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlInNeckLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlInNeckLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLINNECK_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(Equal), TA_CANDLEAVGPERIOD(BodyLong) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLINNECK - In-Neck Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlInNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlInNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlInNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLINNECK( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double EqualPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, EqualTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLINNECK)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + EqualPeriodTotal = 0; + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black candle + * - second candle: white candle with open below previous day low and close slightly into previous day body + * The meaning of "equal" is specified with TA_SetCandleSettings + * outInteger is negative (-1 to -100): in-neck is always bearish + * the user should consider that in-neck is significant when it appears in a downtrend, while this function + * does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -1 && // 1st: black + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // long + TA_CANDLECOLOR(i) == 1 && // 2nd: white + inOpen[i] < inLow[i-1] && // open below prior low + inClose[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // close slightly into prior body + inClose[i] >= inClose[i-1] + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); + i++; + EqualTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlInNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlInNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLINNECK( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double EqualPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, EqualTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLINNECK)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ EqualPeriodTotal = 0; +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -1 && // 1st: black +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // long +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 2nd: white +/* Generated */ inOpen[i] < inLow[i-1] && // open below prior low +/* Generated */ inClose[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // close slightly into prior body +/* Generated */ inClose[i] >= inClose[i-1] +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLINVERTEDHAMMER.c b/src/ta_func/ta_CDLINVERTEDHAMMER.c new file mode 100644 index 000000000..1e7743f96 --- /dev/null +++ b/src/ta_func/ta_CDLINVERTEDHAMMER.c @@ -0,0 +1,389 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 103004 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlInvertedHammerLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlInvertedHammerLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLINVERTEDHAMMER_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(ShadowLong) ), + TA_CANDLEAVGPERIOD(ShadowVeryShort) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLINVERTEDHAMMER - Inverted Hammer + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlInvertedHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlInvertedHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlInvertedHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLINVERTEDHAMMER( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal, ShadowLongPeriodTotal, ShadowVeryShortPeriodTotal; + int i, outIdx, BodyTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLINVERTEDHAMMER)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + ShadowLongPeriodTotal = 0; + ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = BodyTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = ShadowLongTrailingIdx; + while( i < startIdx ) { + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - small real body + * - long upper shadow + * - no, or very short, lower shadow + * - gap down + * The meaning of "short", "very short" and "long" is specified with TA_SetCandleSettings; + * outInteger is positive (1 to 100): inverted hammer is always bullish; + * the user should consider that an inverted hammer must appear in a downtrend, while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && // small rb + TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long upper shadow + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && // very short lower shadow + TA_REALBODYGAPDOWN(i, i-1) ) // gap down + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) + - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) + - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + i++; + BodyTrailingIdx++; + ShadowLongTrailingIdx++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlInvertedHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlInvertedHammer( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLINVERTEDHAMMER( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal, ShadowLongPeriodTotal, ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLINVERTEDHAMMER)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ ShadowLongPeriodTotal = 0; +/* Generated */ ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && // small rb +/* Generated */ TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long upper shadow +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && // very short lower shadow +/* Generated */ TA_REALBODYGAPDOWN(i, i-1) ) // gap down +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) +/* Generated */ - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) +/* Generated */ - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ ShadowLongTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLKICKING.c b/src/ta_func/ta_CDLKICKING.c new file mode 100644 index 000000000..ad9a77753 --- /dev/null +++ b/src/ta_func/ta_CDLKICKING.c @@ -0,0 +1,406 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010705 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlKickingLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlKickingLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLKICKING_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(ShadowVeryShort), TA_CANDLEAVGPERIOD(BodyLong) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLKICKING - Kicking + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlKicking( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlKicking( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlKicking( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLKICKING( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(ShadowVeryShortPeriodTotal,2); + ARRAY_LOCAL(BodyLongPeriodTotal,2); + int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLKICKING)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowVeryShortPeriodTotal[1] = 0; + ShadowVeryShortPeriodTotal[0] = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + BodyLongPeriodTotal[1] = 0; + BodyLongPeriodTotal[0] = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); + BodyLongPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: marubozu + * - second candle: opposite color marubozu + * - gap between the two candles: upside gap if black then white, downside gap if white then black + * The meaning of "long body" and "very short shadow" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // opposite candles + // 1st marubozu + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && + TA_UPPERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + TA_LOWERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + // 2nd marubozu + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[0], i ) && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + // gap + ( + ( TA_CANDLECOLOR(i-1) == -1 && TA_CANDLEGAPUP(i,i-1) ) + || + ( TA_CANDLECOLOR(i-1) == 1 && TA_CANDLEGAPDOWN(i,i-1) ) + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 1; totIdx >= 0; --totIdx) { + BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); + ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); + } + i++; + ShadowVeryShortTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlKicking( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlKicking( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLKICKING( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(ShadowVeryShortPeriodTotal,2); +/* Generated */ ARRAY_LOCAL(BodyLongPeriodTotal,2); +/* Generated */ int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLKICKING)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowVeryShortPeriodTotal[1] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[0] = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ BodyLongPeriodTotal[1] = 0; +/* Generated */ BodyLongPeriodTotal[0] = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ BodyLongPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // opposite candles +/* Generated */ // 1st marubozu +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && +/* Generated */ TA_UPPERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ TA_LOWERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ // 2nd marubozu +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[0], i ) && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ // gap +/* Generated */ ( +/* Generated */ ( TA_CANDLECOLOR(i-1) == -1 && TA_CANDLEGAPUP(i,i-1) ) +/* Generated */ || +/* Generated */ ( TA_CANDLECOLOR(i-1) == 1 && TA_CANDLEGAPDOWN(i,i-1) ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 1; totIdx >= 0; --totIdx) { +/* Generated */ BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); +/* Generated */ ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); +/* Generated */ } +/* Generated */ i++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLKICKINGBYLENGTH.c b/src/ta_func/ta_CDLKICKINGBYLENGTH.c new file mode 100644 index 000000000..f432737fa --- /dev/null +++ b/src/ta_func/ta_CDLKICKINGBYLENGTH.c @@ -0,0 +1,407 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlKickingByLengthLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlKickingByLengthLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLKICKINGBYLENGTH_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(ShadowVeryShort), TA_CANDLEAVGPERIOD(BodyLong) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLKICKINGBYLENGTH - Kicking - bull/bear determined by the longer marubozu + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlKickingByLength( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlKickingByLength( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlKickingByLength( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLKICKINGBYLENGTH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(ShadowVeryShortPeriodTotal,2); + ARRAY_LOCAL(BodyLongPeriodTotal,2); + int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLKICKINGBYLENGTH)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowVeryShortPeriodTotal[1] = 0; + ShadowVeryShortPeriodTotal[0] = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + BodyLongPeriodTotal[1] = 0; + BodyLongPeriodTotal[0] = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); + BodyLongPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: marubozu + * - second candle: opposite color marubozu + * - gap between the two candles: upside gap if black then white, downside gap if white then black + * The meaning of "long body" and "very short shadow" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; the longer of the two + * marubozu determines the bullishness or bearishness of this pattern + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // opposite candles + // 1st marubozu + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && + TA_UPPERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + TA_LOWERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && + // 2nd marubozu + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[0], i ) && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && + // gap + ( + ( TA_CANDLECOLOR(i-1) == -1 && TA_CANDLEGAPUP(i,i-1) ) + || + ( TA_CANDLECOLOR(i-1) == 1 && TA_CANDLEGAPDOWN(i,i-1) ) + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR( ( TA_REALBODY(i) > TA_REALBODY(i-1) ? i : i-1 ) ) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 1; totIdx >= 0; --totIdx) { + BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); + ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); + } + i++; + ShadowVeryShortTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlKickingByLength( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlKickingByLength( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLKICKINGBYLENGTH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(ShadowVeryShortPeriodTotal,2); +/* Generated */ ARRAY_LOCAL(BodyLongPeriodTotal,2); +/* Generated */ int i, outIdx, totIdx, ShadowVeryShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLKICKINGBYLENGTH)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowVeryShortPeriodTotal[1] = 0; +/* Generated */ ShadowVeryShortPeriodTotal[0] = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ BodyLongPeriodTotal[1] = 0; +/* Generated */ BodyLongPeriodTotal[0] = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal[1] += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ ShadowVeryShortPeriodTotal[0] += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ BodyLongPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // opposite candles +/* Generated */ // 1st marubozu +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && +/* Generated */ TA_UPPERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ TA_LOWERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[1], i-1 ) && +/* Generated */ // 2nd marubozu +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[0], i ) && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal[0], i ) && +/* Generated */ // gap +/* Generated */ ( +/* Generated */ ( TA_CANDLECOLOR(i-1) == -1 && TA_CANDLEGAPUP(i,i-1) ) +/* Generated */ || +/* Generated */ ( TA_CANDLECOLOR(i-1) == 1 && TA_CANDLEGAPDOWN(i,i-1) ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR( ( TA_REALBODY(i) > TA_REALBODY(i-1) ? i : i-1 ) ) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 1; totIdx >= 0; --totIdx) { +/* Generated */ BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); +/* Generated */ ShadowVeryShortPeriodTotal[totIdx] += TA_CANDLERANGE( ShadowVeryShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-totIdx ); +/* Generated */ } +/* Generated */ i++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLLADDERBOTTOM.c b/src/ta_func/ta_CDLLADDERBOTTOM.c new file mode 100644 index 000000000..d6eb75f22 --- /dev/null +++ b/src/ta_func/ta_CDLLADDERBOTTOM.c @@ -0,0 +1,361 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 032005 AC Creation + * 041305 MF Minor modification for a compiler warning + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlLadderBottomLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlLadderBottomLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLLADDERBOTTOM_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(ShadowVeryShort) + 4; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLLADDERBOTTOM - Ladder Bottom + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlLadderBottom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlLadderBottom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlLadderBottom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLLADDERBOTTOM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double ShadowVeryShortPeriodTotal; + int i, outIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLLADDERBOTTOM)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - three black candlesticks with consecutively lower opens and closes + * - fourth candle: black candle with an upper shadow (it's supposed to be not very short) + * - fifth candle: white candle that opens above prior candle's body and closes above prior candle's high + * The meaning of "very short" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100): ladder bottom is always bullish; + * the user should consider that ladder bottom is significant when it appears in a downtrend, + * while this function does not consider it + */ + outIdx = 0; + do + { + if( + TA_CANDLECOLOR(i-4) == -1 && TA_CANDLECOLOR(i-3) == -1 && TA_CANDLECOLOR(i-2) == -1 && // 3 black candlesticks + inOpen[i-4] > inOpen[i-3] && inOpen[i-3] > inOpen[i-2] && // with consecutively lower opens + inClose[i-4] > inClose[i-3] && inClose[i-3] > inClose[i-2] && // and closes + TA_CANDLECOLOR(i-1) == -1 && // 4th: black with an upper shadow + TA_UPPERSHADOW(i-1) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i-1 ) && + TA_CANDLECOLOR(i) == 1 && // 5th: white + inOpen[i] > inOpen[i-1] && // that opens above prior candle's body + inClose[i] > inHigh[i-1] // and closes above prior candle's high + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i-1 ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-1 ); + i++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlLadderBottom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlLadderBottom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLLADDERBOTTOM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLLADDERBOTTOM)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( +/* Generated */ TA_CANDLECOLOR(i-4) == -1 && TA_CANDLECOLOR(i-3) == -1 && TA_CANDLECOLOR(i-2) == -1 && // 3 black candlesticks +/* Generated */ inOpen[i-4] > inOpen[i-3] && inOpen[i-3] > inOpen[i-2] && // with consecutively lower opens +/* Generated */ inClose[i-4] > inClose[i-3] && inClose[i-3] > inClose[i-2] && // and closes +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 4th: black with an upper shadow +/* Generated */ TA_UPPERSHADOW(i-1) > TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i-1 ) && +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 5th: white +/* Generated */ inOpen[i] > inOpen[i-1] && // that opens above prior candle's body +/* Generated */ inClose[i] > inHigh[i-1] // and closes above prior candle's high +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i-1 ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLLONGLEGGEDDOJI.c b/src/ta_func/ta_CDLLONGLEGGEDDOJI.c new file mode 100644 index 000000000..3548c687c --- /dev/null +++ b/src/ta_func/ta_CDLLONGLEGGEDDOJI.c @@ -0,0 +1,365 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlLongLeggedDojiLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlLongLeggedDojiLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLLONGLEGGEDDOJI_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(ShadowLong) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLLONGLEGGEDDOJI - Long Legged Doji + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlLongLeggedDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlLongLeggedDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlLongLeggedDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLLONGLEGGEDDOJI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, ShadowLongPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, ShadowLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLLONGLEGGEDDOJI)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyDojiPeriodTotal = 0; + BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); + ShadowLongPeriodTotal = 0; + ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); + + i = BodyDojiTrailingIdx; + while( i < startIdx ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = ShadowLongTrailingIdx; + while( i < startIdx ) { + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * + * Must have: + * - doji body + * - one or two long shadows + * The meaning of "doji" is specified with TA_SetCandleSettings + * outInteger is always positive (1 to 100) but this does not mean it is bullish: long legged doji shows uncertainty + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && + ( TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) + || + TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) + ) + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); + i++; + BodyDojiTrailingIdx++; + ShadowLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlLongLeggedDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlLongLeggedDoji( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLLONGLEGGEDDOJI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, ShadowLongPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, ShadowLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLLONGLEGGEDDOJI)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ ShadowLongPeriodTotal = 0; +/* Generated */ ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && +/* Generated */ ( TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) +/* Generated */ || +/* Generated */ TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ ShadowLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLLONGLINE.c b/src/ta_func/ta_CDLLONGLINE.c new file mode 100644 index 000000000..589de1250 --- /dev/null +++ b/src/ta_func/ta_CDLLONGLINE.c @@ -0,0 +1,358 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 071704 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlLongLineLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlLongLineLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLLONGLINE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyLong), TA_CANDLEAVGPERIOD(ShadowShort) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLLONGLINE - Long Line Candle + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlLongLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlLongLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlLongLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLLONGLINE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal, ShadowPeriodTotal; + int i, outIdx, BodyTrailingIdx, ShadowTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLLONGLINE)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + ShadowPeriodTotal = 0; + ShadowTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowShort); + + i = BodyTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = ShadowTrailingIdx; + while( i < startIdx ) { + ShadowPeriodTotal += TA_CANDLERANGE( ShadowShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - long real body + * - short upper and lower shadow + * The meaning of "long" and "short" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when white (bullish), negative (-1 to -100) when black (bearish) + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyPeriodTotal, i ) && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowShort, ShadowPeriodTotal, i ) && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowShort, ShadowPeriodTotal, i ) ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyTrailingIdx ); + ShadowPeriodTotal += TA_CANDLERANGE( ShadowShort, i ) - TA_CANDLERANGE( ShadowShort, ShadowTrailingIdx ); + i++; + BodyTrailingIdx++; + ShadowTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlLongLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlLongLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLLONGLINE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal, ShadowPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, ShadowTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLLONGLINE)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ ShadowPeriodTotal = 0; +/* Generated */ ShadowTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowShort); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowPeriodTotal += TA_CANDLERANGE( ShadowShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyPeriodTotal, i ) && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowShort, ShadowPeriodTotal, i ) && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowShort, ShadowPeriodTotal, i ) ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyTrailingIdx ); +/* Generated */ ShadowPeriodTotal += TA_CANDLERANGE( ShadowShort, i ) - TA_CANDLERANGE( ShadowShort, ShadowTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ ShadowTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLMARUBOZU.c b/src/ta_func/ta_CDLMARUBOZU.c new file mode 100644 index 000000000..9d1cef970 --- /dev/null +++ b/src/ta_func/ta_CDLMARUBOZU.c @@ -0,0 +1,360 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlMarubozuLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlMarubozuLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLMARUBOZU_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyLong), TA_CANDLEAVGPERIOD(ShadowVeryShort) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLMARUBOZU - Marubozu + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLMARUBOZU( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyLongPeriodTotal, ShadowVeryShortPeriodTotal; + int i, outIdx, BodyLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLMARUBOZU)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - long real body + * - no or very short upper and lower shadow + * The meaning of "long" and "very short" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when white (bullish), negative (-1 to -100) when black (bearish) + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i ) && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMarubozu( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLMARUBOZU( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyLongPeriodTotal, ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, BodyLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLMARUBOZU)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i ) && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLMATCHINGLOW.c b/src/ta_func/ta_CDLMATCHINGLOW.c new file mode 100644 index 000000000..3e813d016 --- /dev/null +++ b/src/ta_func/ta_CDLMATCHINGLOW.c @@ -0,0 +1,346 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 032605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlMatchingLowLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlMatchingLowLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLMATCHINGLOW_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(Equal) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLMATCHINGLOW - Matching Low + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlMatchingLow( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMatchingLow( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMatchingLow( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLMATCHINGLOW( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double EqualPeriodTotal; + int i, outIdx, EqualTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLMATCHINGLOW)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + EqualPeriodTotal = 0; + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: black candle + * - second candle: black candle with the close equal to the previous close + * The meaning of "equal" is specified with TA_SetCandleSettings + * outInteger is always positive (1 to 100): matching low is always bullish; + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -1 && // first black + TA_CANDLECOLOR(i) == -1 && // second black + inClose[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // 1st and 2nd same close + inClose[i] >= inClose[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); + i++; + EqualTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMatchingLow( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMatchingLow( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLMATCHINGLOW( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double EqualPeriodTotal; +/* Generated */ int i, outIdx, EqualTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLMATCHINGLOW)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ EqualPeriodTotal = 0; +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -1 && // first black +/* Generated */ TA_CANDLECOLOR(i) == -1 && // second black +/* Generated */ inClose[i] <= inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // 1st and 2nd same close +/* Generated */ inClose[i] >= inClose[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLMATHOLD.c b/src/ta_func/ta_CDLMATHOLD.c new file mode 100644 index 000000000..c9cebdd24 --- /dev/null +++ b/src/ta_func/ta_CDLMATHOLD.c @@ -0,0 +1,455 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 022005 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlMatHoldLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlMatHoldLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLMATHOLD_Lookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 5.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInPenetration); + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 4; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLMATHOLD - Mat Hold + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlMatHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMatHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMatHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLMATHOLD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(BodyPeriodTotal,5); + int i, outIdx, totIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 5.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLMATHOLD)(optInPenetration); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal[4] = 0; + BodyPeriodTotal[3] = 0; + BodyPeriodTotal[2] = 0; + BodyPeriodTotal[1] = 0; + BodyPeriodTotal[0] = 0; + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal[3] += TA_CANDLERANGE( BodyShort, i-3 ); + BodyPeriodTotal[2] += TA_CANDLERANGE( BodyShort, i-2 ); + BodyPeriodTotal[1] += TA_CANDLERANGE( BodyShort, i-1 ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal[4] += TA_CANDLERANGE( BodyLong, i-4 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white candle + * - upside gap between the first and the second bodies + * - second candle: small black candle + * - third and fourth candles: falling small real body candlesticks (commonly black) that hold within the long + * white candle's body and are higher than the reaction days of the rising three methods + * - fifth candle: white candle that opens above the previous small candle's close and closes higher than the + * high of the highest reaction day + * The meaning of "short" and "long" is specified with TA_SetCandleSettings; + * "hold within" means "a part of the real body must be within"; + * optInPenetration is the maximum percentage of the first white body the reaction days can penetrate (it is + * to specify how much the reaction days should be "higher than the reaction days of the rising three methods") + * outInteger is positive (1 to 100): mat hold is always bullish + */ + outIdx = 0; + do + { + if( // 1st long, then 3 small + TA_REALBODY(i-4) > TA_CANDLEAVERAGE( BodyLong, BodyPeriodTotal[4], i-4 ) && + TA_REALBODY(i-3) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[3], i-3 ) && + TA_REALBODY(i-2) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[2], i-2 ) && + TA_REALBODY(i-1) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[1], i-1 ) && + // white, black, 2 black or white, white + TA_CANDLECOLOR(i-4) == 1 && + TA_CANDLECOLOR(i-3) == -1 && + TA_CANDLECOLOR(i) == 1 && + // upside gap 1st to 2nd + TA_REALBODYGAPUP(i-3,i-4) && + // 3rd to 4th hold within 1st: a part of the real body must be within 1st real body + min(inOpen[i-2], inClose[i-2]) < inClose[i-4] && + min(inOpen[i-1], inClose[i-1]) < inClose[i-4] && + // reaction days penetrate first body less than optInPenetration percent + min(inOpen[i-2], inClose[i-2]) > inClose[i-4] - TA_REALBODY(i-4) * optInPenetration && + min(inOpen[i-1], inClose[i-1]) > inClose[i-4] - TA_REALBODY(i-4) * optInPenetration && + // 2nd to 4th are falling + max(inClose[i-2], inOpen[i-2]) < inOpen[i-3] && + max(inClose[i-1], inOpen[i-1]) < max(inClose[i-2], inOpen[i-2]) && + // 5th opens above the prior close + inOpen[i] > inClose[i-1] && + // 5th closes above the highest high of the reaction days + inClose[i] > max(max(inHigh[i-3], inHigh[i-2]), inHigh[i-1]) + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal[4] += TA_CANDLERANGE( BodyLong, i-4 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-4 ); + for (totIdx = 3; totIdx >= 1; --totIdx) + BodyPeriodTotal[totIdx] += TA_CANDLERANGE( BodyShort, i-totIdx ) + - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx-totIdx ); + i++; + BodyShortTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMatHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMatHold( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLMATHOLD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(BodyPeriodTotal,5); +/* Generated */ int i, outIdx, totIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 5.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLMATHOLD)(optInPenetration); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal[4] = 0; +/* Generated */ BodyPeriodTotal[3] = 0; +/* Generated */ BodyPeriodTotal[2] = 0; +/* Generated */ BodyPeriodTotal[1] = 0; +/* Generated */ BodyPeriodTotal[0] = 0; +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal[3] += TA_CANDLERANGE( BodyShort, i-3 ); +/* Generated */ BodyPeriodTotal[2] += TA_CANDLERANGE( BodyShort, i-2 ); +/* Generated */ BodyPeriodTotal[1] += TA_CANDLERANGE( BodyShort, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal[4] += TA_CANDLERANGE( BodyLong, i-4 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( // 1st long, then 3 small +/* Generated */ TA_REALBODY(i-4) > TA_CANDLEAVERAGE( BodyLong, BodyPeriodTotal[4], i-4 ) && +/* Generated */ TA_REALBODY(i-3) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[3], i-3 ) && +/* Generated */ TA_REALBODY(i-2) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[2], i-2 ) && +/* Generated */ TA_REALBODY(i-1) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[1], i-1 ) && +/* Generated */ // white, black, 2 black or white, white +/* Generated */ TA_CANDLECOLOR(i-4) == 1 && +/* Generated */ TA_CANDLECOLOR(i-3) == -1 && +/* Generated */ TA_CANDLECOLOR(i) == 1 && +/* Generated */ // upside gap 1st to 2nd +/* Generated */ TA_REALBODYGAPUP(i-3,i-4) && +/* Generated */ // 3rd to 4th hold within 1st: a part of the real body must be within 1st real body +/* Generated */ min(inOpen[i-2], inClose[i-2]) < inClose[i-4] && +/* Generated */ min(inOpen[i-1], inClose[i-1]) < inClose[i-4] && +/* Generated */ // reaction days penetrate first body less than optInPenetration percent +/* Generated */ min(inOpen[i-2], inClose[i-2]) > inClose[i-4] - TA_REALBODY(i-4) * optInPenetration && +/* Generated */ min(inOpen[i-1], inClose[i-1]) > inClose[i-4] - TA_REALBODY(i-4) * optInPenetration && +/* Generated */ // 2nd to 4th are falling +/* Generated */ max(inClose[i-2], inOpen[i-2]) < inOpen[i-3] && +/* Generated */ max(inClose[i-1], inOpen[i-1]) < max(inClose[i-2], inOpen[i-2]) && +/* Generated */ // 5th opens above the prior close +/* Generated */ inOpen[i] > inClose[i-1] && +/* Generated */ // 5th closes above the highest high of the reaction days +/* Generated */ inClose[i] > max(max(inHigh[i-3], inHigh[i-2]), inHigh[i-1]) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal[4] += TA_CANDLERANGE( BodyLong, i-4 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-4 ); +/* Generated */ for (totIdx = 3; totIdx >= 1; --totIdx) +/* Generated */ BodyPeriodTotal[totIdx] += TA_CANDLERANGE( BodyShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx-totIdx ); +/* Generated */ i++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLMORNINGDOJISTAR.c b/src/ta_func/ta_CDLMORNINGDOJISTAR.c new file mode 100644 index 000000000..5189c284d --- /dev/null +++ b/src/ta_func/ta_CDLMORNINGDOJISTAR.c @@ -0,0 +1,425 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 100304 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlMorningDojiStarLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlMorningDojiStarLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLMORNINGDOJISTAR_Lookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInPenetration); + return max( max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(BodyLong) ), + TA_CANDLEAVGPERIOD(BodyShort) + ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLMORNINGDOJISTAR - Morning Doji Star + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlMorningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMorningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMorningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLMORNINGDOJISTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLMORNINGDOJISTAR)(optInPenetration); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyDojiPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + BodyDojiTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyDoji); + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyDojiTrailingIdx; + while( i < startIdx-1 ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black real body + * - second candle: doji gapping down + * - third candle: white real body that moves well within the first candle's real body + * The meaning of "doji" and "long" is specified with TA_SetCandleSettings + * The meaning of "moves well within" is specified with optInPenetration and "moves" should mean the real body should + * not be short ("short" is specified with TA_SetCandleSettings) - Greg Morris wants it to be long, someone else want + * it to be relatively long + * outInteger is positive (1 to 100): morning doji star is always bullish; + * the user should consider that a morning star is significant when it appears in a downtrend, + * while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long + TA_CANDLECOLOR(i-2) == -1 && // black + TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i-1 ) && // 2nd: doji + TA_REALBODYGAPDOWN(i-1,i-2) && // gapping down + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: longer than short + TA_CANDLECOLOR(i) == 1 && // white real body + inClose[i] > inClose[i-2] + TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i-1 ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyDojiTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMorningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMorningDojiStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLMORNINGDOJISTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLMORNINGDOJISTAR)(optInPenetration); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyDojiTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long +/* Generated */ TA_CANDLECOLOR(i-2) == -1 && // black +/* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i-1 ) && // 2nd: doji +/* Generated */ TA_REALBODYGAPDOWN(i-1,i-2) && // gapping down +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: longer than short +/* Generated */ TA_CANDLECOLOR(i) == 1 && // white real body +/* Generated */ inClose[i] > inClose[i-2] + TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i-1 ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLMORNINGSTAR.c b/src/ta_func/ta_CDLMORNINGSTAR.c new file mode 100644 index 000000000..86334e8f0 --- /dev/null +++ b/src/ta_func/ta_CDLMORNINGSTAR.c @@ -0,0 +1,411 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 100304 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlMorningStarLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlMorningStarLookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLMORNINGSTAR_Lookback( double optInPenetration ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInPenetration); + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLMORNINGSTAR - Morning Star + * + * Input = Open, High, Low, Close + * Output = int + * + * Optional Parameters + * ------------------- + * optInPenetration:(From 0 to TA_REAL_MAX) + * Percentage of penetration of a candle within another candle + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlMorningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMorningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMorningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLMORNINGSTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyShortPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal2; + int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) ||/* Generated */ (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLMORNINGSTAR)(optInPenetration); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyShortPeriodTotal2 = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + BodyShortTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx-1 ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + BodyShortPeriodTotal2 += TA_CANDLERANGE( BodyShort, i+1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black real body + * - second candle: star (Short real body gapping down) + * - third candle: white real body that moves well within the first candle's real body + * The meaning of "short" and "long" is specified with TA_SetCandleSettings + * The meaning of "moves well within" is specified with optInPenetration and "moves" should mean the real body should + * not be short ("short" is specified with TA_SetCandleSettings) - Greg Morris wants it to be long, someone else want + * it to be relatively long + * outInteger is positive (1 to 100): morning star is always bullish; + * the user should consider that a morning star is significant when it appears in a downtrend, + * while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long + TA_CANDLECOLOR(i-2) == -1 && // black + TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i-1 ) && // 2nd: short + TA_REALBODYGAPDOWN(i-1,i-2) && // gapping down + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal2, i ) && // 3rd: longer than short + TA_CANDLECOLOR(i) == 1 && // black real body + inClose[i] > inClose[i-2] + TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i-1 ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + BodyShortPeriodTotal2 += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx+1 ); + i++; + BodyLongTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlMorningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlMorningStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLMORNINGSTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyShortPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal2; +/* Generated */ int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) +/* Generated */ optInPenetration = 3.000000e-1; +/* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLMORNINGSTAR)(optInPenetration); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal2 = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyShortTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ BodyShortPeriodTotal2 += TA_CANDLERANGE( BodyShort, i+1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long +/* Generated */ TA_CANDLECOLOR(i-2) == -1 && // black +/* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i-1 ) && // 2nd: short +/* Generated */ TA_REALBODYGAPDOWN(i-1,i-2) && // gapping down +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal2, i ) && // 3rd: longer than short +/* Generated */ TA_CANDLECOLOR(i) == 1 && // black real body +/* Generated */ inClose[i] > inClose[i-2] + TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i-1 ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ BodyShortPeriodTotal2 += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx+1 ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLONNECK.c b/src/ta_func/ta_CDLONNECK.c new file mode 100644 index 000000000..6f4bacd09 --- /dev/null +++ b/src/ta_func/ta_CDLONNECK.c @@ -0,0 +1,373 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 121104 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlOnNeckLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlOnNeckLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLONNECK_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(Equal), TA_CANDLEAVGPERIOD(BodyLong) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLONNECK - On-Neck Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlOnNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlOnNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlOnNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLONNECK( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double EqualPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, EqualTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLONNECK)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + EqualPeriodTotal = 0; + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black candle + * - second candle: white candle with open below previous day low and close equal to previous day low + * The meaning of "equal" is specified with TA_SetCandleSettings + * outInteger is negative (-1 to -100): on-neck is always bearish + * the user should consider that on-neck is significant when it appears in a downtrend, while this function + * does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -1 && // 1st: black + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // long + TA_CANDLECOLOR(i) == 1 && // 2nd: white + inOpen[i] < inLow[i-1] && // open below prior low + inClose[i] <= inLow[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // close equal to prior low + inClose[i] >= inLow[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); + i++; + EqualTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlOnNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlOnNeck( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLONNECK( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double EqualPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, EqualTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLONNECK)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ EqualPeriodTotal = 0; +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -1 && // 1st: black +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // long +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 2nd: white +/* Generated */ inOpen[i] < inLow[i-1] && // open below prior low +/* Generated */ inClose[i] <= inLow[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // close equal to prior low +/* Generated */ inClose[i] >= inLow[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLPIERCING.c b/src/ta_func/ta_CDLPIERCING.c new file mode 100644 index 000000000..7d95aaaae --- /dev/null +++ b/src/ta_func/ta_CDLPIERCING.c @@ -0,0 +1,363 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120904 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlPiercingLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlPiercingLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLPIERCING_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(BodyLong) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLPIERCING - Piercing Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlPiercing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlPiercing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlPiercing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLPIERCING( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(BodyLongPeriodTotal,2); + int i, outIdx, totIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLPIERCING)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal[1] = 0; + BodyLongPeriodTotal[0] = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); + BodyLongPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black candle + * - second candle: long white candle with open below previous day low and close at least at 50% of previous day + * real body + * The meaning of "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100): piercing pattern is always bullish + * the user should consider that a piercing pattern is significant when it appears in a downtrend, while + * this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -1 && // 1st: black + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && // long + TA_CANDLECOLOR(i) == 1 && // 2nd: white + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[0], i ) && // long + inOpen[i] < inLow[i-1] && // open below prior low + inClose[i] < inOpen[i-1] && // close within prior body + inClose[i] > inClose[i-1] + TA_REALBODY(i-1) * 0.5 // above midpoint + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 1; totIdx >= 0; --totIdx) + BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); + i++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlPiercing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlPiercing( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLPIERCING( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(BodyLongPeriodTotal,2); +/* Generated */ int i, outIdx, totIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLPIERCING)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal[1] = 0; +/* Generated */ BodyLongPeriodTotal[0] = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ BodyLongPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -1 && // 1st: black +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && // long +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 2nd: white +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[0], i ) && // long +/* Generated */ inOpen[i] < inLow[i-1] && // open below prior low +/* Generated */ inClose[i] < inOpen[i-1] && // close within prior body +/* Generated */ inClose[i] > inClose[i-1] + TA_REALBODY(i-1) * 0.5 // above midpoint +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 1; totIdx >= 0; --totIdx) +/* Generated */ BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLRICKSHAWMAN.c b/src/ta_func/ta_CDLRICKSHAWMAN.c new file mode 100644 index 000000000..798b2632a --- /dev/null +++ b/src/ta_func/ta_CDLRICKSHAWMAN.c @@ -0,0 +1,396 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlRickshawManLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlRickshawManLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLRICKSHAWMAN_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(ShadowLong) ), + TA_CANDLEAVGPERIOD(Near) + ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLRICKSHAWMAN - Rickshaw Man + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlRickshawMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlRickshawMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlRickshawMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLRICKSHAWMAN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, ShadowLongPeriodTotal, NearPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, ShadowLongTrailingIdx, NearTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLRICKSHAWMAN)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyDojiPeriodTotal = 0; + BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); + ShadowLongPeriodTotal = 0; + ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); + NearPeriodTotal = 0; + NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); + + i = BodyDojiTrailingIdx; + while( i < startIdx ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = ShadowLongTrailingIdx; + while( i < startIdx ) { + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); + i++; + } + i = NearTrailingIdx; + while( i < startIdx ) { + NearPeriodTotal += TA_CANDLERANGE( Near, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * + * Must have: + * - doji body + * - two long shadows + * - body near the midpoint of the high-low range + * The meaning of "doji" and "near" is specified with TA_SetCandleSettings + * outInteger is always positive (1 to 100) but this does not mean it is bullish: rickshaw man shows uncertainty + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && // doji + TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long shadow + TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long shadow + ( // body near midpoint + min( inOpen[i], inClose[i] ) + <= inLow[i] + TA_HIGHLOWRANGE(i) / 2 + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i ) + && + max( inOpen[i], inClose[i] ) + >= inLow[i] + TA_HIGHLOWRANGE(i) / 2 - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i ) + ) + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); + NearPeriodTotal += TA_CANDLERANGE( Near, i ) - TA_CANDLERANGE( Near, NearTrailingIdx ); + i++; + BodyDojiTrailingIdx++; + ShadowLongTrailingIdx++; + NearTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlRickshawMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlRickshawMan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLRICKSHAWMAN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, ShadowLongPeriodTotal, NearPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, ShadowLongTrailingIdx, NearTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLRICKSHAWMAN)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ ShadowLongPeriodTotal = 0; +/* Generated */ ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); +/* Generated */ NearPeriodTotal = 0; +/* Generated */ NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && // doji +/* Generated */ TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long shadow +/* Generated */ TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long shadow +/* Generated */ ( // body near midpoint +/* Generated */ min( inOpen[i], inClose[i] ) +/* Generated */ <= inLow[i] + TA_HIGHLOWRANGE(i) / 2 + TA_CANDLEAVERAGE( Near, NearPeriodTotal, i ) +/* Generated */ && +/* Generated */ max( inOpen[i], inClose[i] ) +/* Generated */ >= inLow[i] + TA_HIGHLOWRANGE(i) / 2 - TA_CANDLEAVERAGE( Near, NearPeriodTotal, i ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i ) - TA_CANDLERANGE( Near, NearTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ ShadowLongTrailingIdx++; +/* Generated */ NearTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLRISEFALL3METHODS.c b/src/ta_func/ta_CDLRISEFALL3METHODS.c new file mode 100644 index 000000000..3766281df --- /dev/null +++ b/src/ta_func/ta_CDLRISEFALL3METHODS.c @@ -0,0 +1,422 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 020605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlRiseFall3MethodsLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlRiseFall3MethodsLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLRISEFALL3METHODS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 4; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLRISEFALL3METHODS - Rising/Falling Three Methods + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlRiseFall3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlRiseFall3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlRiseFall3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLRISEFALL3METHODS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(BodyPeriodTotal,5); + int i, outIdx, totIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLRISEFALL3METHODS)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal[4] = 0; + BodyPeriodTotal[3] = 0; + BodyPeriodTotal[2] = 0; + BodyPeriodTotal[1] = 0; + BodyPeriodTotal[0] = 0; + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal[3] += TA_CANDLERANGE( BodyShort, i-3 ); + BodyPeriodTotal[2] += TA_CANDLERANGE( BodyShort, i-2 ); + BodyPeriodTotal[1] += TA_CANDLERANGE( BodyShort, i-1 ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal[4] += TA_CANDLERANGE( BodyLong, i-4 ); + BodyPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long white (black) candlestick + * - then: group of falling (rising) small real body candlesticks (commonly black (white)) that hold within + * the prior long candle's range: ideally they should be three but two or more than three are ok too + * - final candle: long white (black) candle that opens above (below) the previous small candle's close + * and closes above (below) the first long candle's close + * The meaning of "short" and "long" is specified with TA_SetCandleSettings; here only patterns with 3 small candles + * are considered; + * outInteger is positive (1 to 100) or negative (-1 to -100) + */ + outIdx = 0; + do + { + if( // 1st long, then 3 small, 5th long + TA_REALBODY(i-4) > TA_CANDLEAVERAGE( BodyLong, BodyPeriodTotal[4], i-4 ) && + TA_REALBODY(i-3) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[3], i-3 ) && + TA_REALBODY(i-2) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[2], i-2 ) && + TA_REALBODY(i-1) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[1], i-1 ) && + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyPeriodTotal[0], i ) && + // white, 3 black, white || black, 3 white, black + TA_CANDLECOLOR(i-4) == -TA_CANDLECOLOR(i-3) && + TA_CANDLECOLOR(i-3) == TA_CANDLECOLOR(i-2) && + TA_CANDLECOLOR(i-2) == TA_CANDLECOLOR(i-1) && + TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && + // 2nd to 4th hold within 1st: a part of the real body must be within 1st range + min(inOpen[i-3], inClose[i-3]) < inHigh[i-4] && max(inOpen[i-3], inClose[i-3]) > inLow[i-4] && + min(inOpen[i-2], inClose[i-2]) < inHigh[i-4] && max(inOpen[i-2], inClose[i-2]) > inLow[i-4] && + min(inOpen[i-1], inClose[i-1]) < inHigh[i-4] && max(inOpen[i-1], inClose[i-1]) > inLow[i-4] && + // 2nd to 4th are falling (rising) + inClose[i-2] * TA_CANDLECOLOR(i-4) < inClose[i-3] * TA_CANDLECOLOR(i-4) && + inClose[i-1] * TA_CANDLECOLOR(i-4) < inClose[i-2] * TA_CANDLECOLOR(i-4) && + // 5th opens above (below) the prior close + inOpen[i] * TA_CANDLECOLOR(i-4) > inClose[i-1] * TA_CANDLECOLOR(i-4) && + // 5th closes above (below) the 1st close + inClose[i] * TA_CANDLECOLOR(i-4) > inClose[i-4] * TA_CANDLECOLOR(i-4) + ) + outInteger[outIdx++] = 100 * TA_CANDLECOLOR(i-4); + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal[4] += TA_CANDLERANGE( BodyLong, i-4 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-4 ); + for (totIdx = 3; totIdx >= 1; --totIdx) + BodyPeriodTotal[totIdx] += TA_CANDLERANGE( BodyShort, i-totIdx ) + - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx-totIdx ); + BodyPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + i++; + BodyShortTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlRiseFall3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlRiseFall3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLRISEFALL3METHODS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(BodyPeriodTotal,5); +/* Generated */ int i, outIdx, totIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLRISEFALL3METHODS)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal[4] = 0; +/* Generated */ BodyPeriodTotal[3] = 0; +/* Generated */ BodyPeriodTotal[2] = 0; +/* Generated */ BodyPeriodTotal[1] = 0; +/* Generated */ BodyPeriodTotal[0] = 0; +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal[3] += TA_CANDLERANGE( BodyShort, i-3 ); +/* Generated */ BodyPeriodTotal[2] += TA_CANDLERANGE( BodyShort, i-2 ); +/* Generated */ BodyPeriodTotal[1] += TA_CANDLERANGE( BodyShort, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal[4] += TA_CANDLERANGE( BodyLong, i-4 ); +/* Generated */ BodyPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( // 1st long, then 3 small, 5th long +/* Generated */ TA_REALBODY(i-4) > TA_CANDLEAVERAGE( BodyLong, BodyPeriodTotal[4], i-4 ) && +/* Generated */ TA_REALBODY(i-3) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[3], i-3 ) && +/* Generated */ TA_REALBODY(i-2) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[2], i-2 ) && +/* Generated */ TA_REALBODY(i-1) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal[1], i-1 ) && +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyPeriodTotal[0], i ) && +/* Generated */ // white, 3 black, white || black, 3 white, black +/* Generated */ TA_CANDLECOLOR(i-4) == -TA_CANDLECOLOR(i-3) && +/* Generated */ TA_CANDLECOLOR(i-3) == TA_CANDLECOLOR(i-2) && +/* Generated */ TA_CANDLECOLOR(i-2) == TA_CANDLECOLOR(i-1) && +/* Generated */ TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && +/* Generated */ // 2nd to 4th hold within 1st: a part of the real body must be within 1st range +/* Generated */ min(inOpen[i-3], inClose[i-3]) < inHigh[i-4] && max(inOpen[i-3], inClose[i-3]) > inLow[i-4] && +/* Generated */ min(inOpen[i-2], inClose[i-2]) < inHigh[i-4] && max(inOpen[i-2], inClose[i-2]) > inLow[i-4] && +/* Generated */ min(inOpen[i-1], inClose[i-1]) < inHigh[i-4] && max(inOpen[i-1], inClose[i-1]) > inLow[i-4] && +/* Generated */ // 2nd to 4th are falling (rising) +/* Generated */ inClose[i-2] * TA_CANDLECOLOR(i-4) < inClose[i-3] * TA_CANDLECOLOR(i-4) && +/* Generated */ inClose[i-1] * TA_CANDLECOLOR(i-4) < inClose[i-2] * TA_CANDLECOLOR(i-4) && +/* Generated */ // 5th opens above (below) the prior close +/* Generated */ inOpen[i] * TA_CANDLECOLOR(i-4) > inClose[i-1] * TA_CANDLECOLOR(i-4) && +/* Generated */ // 5th closes above (below) the 1st close +/* Generated */ inClose[i] * TA_CANDLECOLOR(i-4) > inClose[i-4] * TA_CANDLECOLOR(i-4) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100 * TA_CANDLECOLOR(i-4); +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal[4] += TA_CANDLERANGE( BodyLong, i-4 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-4 ); +/* Generated */ for (totIdx = 3; totIdx >= 1; --totIdx) +/* Generated */ BodyPeriodTotal[totIdx] += TA_CANDLERANGE( BodyShort, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx-totIdx ); +/* Generated */ BodyPeriodTotal[0] += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLSEPARATINGLINES.c b/src/ta_func/ta_CDLSEPARATINGLINES.c new file mode 100644 index 000000000..0bb52152b --- /dev/null +++ b/src/ta_func/ta_CDLSEPARATINGLINES.c @@ -0,0 +1,406 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlSeperatingLinesLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlSeperatingLinesLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLSEPARATINGLINES_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( TA_CANDLEAVGPERIOD(ShadowVeryShort), TA_CANDLEAVGPERIOD(BodyLong) ), + TA_CANDLEAVGPERIOD(Equal) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLSEPARATINGLINES - Separating Lines + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlSeperatingLines( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlSeperatingLines( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlSeperatingLines( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLSEPARATINGLINES( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double ShadowVeryShortPeriodTotal, BodyLongPeriodTotal, EqualPeriodTotal; + int i, outIdx, ShadowVeryShortTrailingIdx, BodyLongTrailingIdx, EqualTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLSEPARATINGLINES)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + EqualPeriodTotal = 0; + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: black (white) candle + * - second candle: bullish (bearish) belt hold with the same open as the prior candle + * The meaning of "long body" and "very short shadow" of the belt hold is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that separating lines is significant when coming in a trend and the belt hold has + * the same direction of the trend, while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // opposite candles + inOpen[i] <= inOpen[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // same open + inOpen[i] >= inOpen[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && + TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i ) && // belt hold: long body + ( + ( TA_CANDLECOLOR(i) == 1 && // with no lower shadow if bullish + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) + ) + || + ( TA_CANDLECOLOR(i) == -1 && // with no upper shadow if bearish + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) + ) + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); + i++; + ShadowVeryShortTrailingIdx++; + BodyLongTrailingIdx++; + EqualTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlSeperatingLines( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlSeperatingLines( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLSEPARATINGLINES( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double ShadowVeryShortPeriodTotal, BodyLongPeriodTotal, EqualPeriodTotal; +/* Generated */ int i, outIdx, ShadowVeryShortTrailingIdx, BodyLongTrailingIdx, EqualTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLSEPARATINGLINES)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ EqualPeriodTotal = 0; +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // opposite candles +/* Generated */ inOpen[i] <= inOpen[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // same open +/* Generated */ inOpen[i] >= inOpen[i-1] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && +/* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i ) && // belt hold: long body +/* Generated */ ( +/* Generated */ ( TA_CANDLECOLOR(i) == 1 && // with no lower shadow if bullish +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) +/* Generated */ ) +/* Generated */ || +/* Generated */ ( TA_CANDLECOLOR(i) == -1 && // with no upper shadow if bearish +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLSHOOTINGSTAR.c b/src/ta_func/ta_CDLSHOOTINGSTAR.c new file mode 100644 index 000000000..93f5b82fc --- /dev/null +++ b/src/ta_func/ta_CDLSHOOTINGSTAR.c @@ -0,0 +1,389 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 103004 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlShootingStarLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlShootingStarLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLSHOOTINGSTAR_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(ShadowLong) ), + TA_CANDLEAVGPERIOD(ShadowVeryShort) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLSHOOTINGSTAR - Shooting Star + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlShootingStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlShootingStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlShootingStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLSHOOTINGSTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal, ShadowLongPeriodTotal, ShadowVeryShortPeriodTotal; + int i, outIdx, BodyTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLSHOOTINGSTAR)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + ShadowLongPeriodTotal = 0; + ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + + i = BodyTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = ShadowLongTrailingIdx; + while( i < startIdx ) { + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - small real body + * - long upper shadow + * - no, or very short, lower shadow + * - gap up from prior real body + * The meaning of "short", "very short" and "long" is specified with TA_SetCandleSettings; + * outInteger is negative (-1 to -100): shooting star is always bearish; + * the user should consider that a shooting star must appear in an uptrend, while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && // small rb + TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long upper shadow + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && // very short lower shadow + TA_REALBODYGAPUP(i, i-1) ) // gap up + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) + - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); + ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) + - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + i++; + BodyTrailingIdx++; + ShadowLongTrailingIdx++; + ShadowVeryShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlShootingStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlShootingStar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLSHOOTINGSTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal, ShadowLongPeriodTotal, ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, ShadowLongTrailingIdx, ShadowVeryShortTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLSHOOTINGSTAR)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ ShadowLongPeriodTotal = 0; +/* Generated */ ShadowLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowLong); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && // small rb +/* Generated */ TA_UPPERSHADOW(i) > TA_CANDLEAVERAGE( ShadowLong, ShadowLongPeriodTotal, i ) && // long upper shadow +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && // very short lower shadow +/* Generated */ TA_REALBODYGAPUP(i, i-1) ) // gap up +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) +/* Generated */ - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); +/* Generated */ ShadowLongPeriodTotal += TA_CANDLERANGE( ShadowLong, i ) +/* Generated */ - TA_CANDLERANGE( ShadowLong, ShadowLongTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ ShadowLongTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLSHORTLINE.c b/src/ta_func/ta_CDLSHORTLINE.c new file mode 100644 index 000000000..dc9a37632 --- /dev/null +++ b/src/ta_func/ta_CDLSHORTLINE.c @@ -0,0 +1,359 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 072404 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlShortLineLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlShortLineLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLSHORTLINE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(ShadowShort) ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLSHORTLINE - Short Line Candle + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlShortLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlShortLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlShortLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLSHORTLINE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal, ShadowPeriodTotal; + int i, outIdx, BodyTrailingIdx, ShadowTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLSHORTLINE)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + ShadowPeriodTotal = 0; + ShadowTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowShort); + + i = BodyTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = ShadowTrailingIdx; + while( i < startIdx ) { + ShadowPeriodTotal += TA_CANDLERANGE( ShadowShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - short real body + * - short upper and lower shadow + * The meaning of "short" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when white, negative (-1 to -100) when black; + * it does not mean bullish or bearish + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowShort, ShadowPeriodTotal, i ) && + TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowShort, ShadowPeriodTotal, i ) ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); + ShadowPeriodTotal += TA_CANDLERANGE( ShadowShort, i ) - TA_CANDLERANGE( ShadowShort, ShadowTrailingIdx ); + i++; + BodyTrailingIdx++; + ShadowTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlShortLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlShortLine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLSHORTLINE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal, ShadowPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, ShadowTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLSHORTLINE)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ ShadowPeriodTotal = 0; +/* Generated */ ShadowTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowShort); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowPeriodTotal += TA_CANDLERANGE( ShadowShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowShort, ShadowPeriodTotal, i ) && +/* Generated */ TA_LOWERSHADOW(i) < TA_CANDLEAVERAGE( ShadowShort, ShadowPeriodTotal, i ) ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); +/* Generated */ ShadowPeriodTotal += TA_CANDLERANGE( ShadowShort, i ) - TA_CANDLERANGE( ShadowShort, ShadowTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ ShadowTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLSPINNINGTOP.c b/src/ta_func/ta_CDLSPINNINGTOP.c new file mode 100644 index 000000000..024255331 --- /dev/null +++ b/src/ta_func/ta_CDLSPINNINGTOP.c @@ -0,0 +1,343 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 071804 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlSpinningTopLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlSpinningTopLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLSPINNINGTOP_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(BodyShort); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLSPINNINGTOP - Spinning Top + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlSpinningTop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlSpinningTop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlSpinningTop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLSPINNINGTOP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal; + int i, outIdx, BodyTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLSPINNINGTOP)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyTrailingIdx; + while( i < startIdx ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - small real body + * - shadows longer than the real body + * The meaning of "short" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when white or negative (-1 to -100) when black; + * it does not mean bullish or bearish + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && + TA_UPPERSHADOW(i) > TA_REALBODY(i) && + TA_LOWERSHADOW(i) > TA_REALBODY(i) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); + i++; + BodyTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlSpinningTop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlSpinningTop( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLSPINNINGTOP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLSPINNINGTOP)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyPeriodTotal, i ) && +/* Generated */ TA_UPPERSHADOW(i) > TA_REALBODY(i) && +/* Generated */ TA_LOWERSHADOW(i) > TA_REALBODY(i) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLSTALLEDPATTERN.c b/src/ta_func/ta_CDLSTALLEDPATTERN.c new file mode 100644 index 000000000..a03d8ecdc --- /dev/null +++ b/src/ta_func/ta_CDLSTALLEDPATTERN.c @@ -0,0 +1,456 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120804 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlStalledPatternLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlStalledPatternLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLSTALLEDPATTERN_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( TA_CANDLEAVGPERIOD(BodyLong), TA_CANDLEAVGPERIOD(BodyShort) ), + max( TA_CANDLEAVGPERIOD(ShadowVeryShort), TA_CANDLEAVGPERIOD(Near) ) + ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLSTALLEDPATTERN - Stalled Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlStalledPattern( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlStalledPattern( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlStalledPattern( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLSTALLEDPATTERN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_LOCAL(BodyLongPeriodTotal,3); + ARRAY_LOCAL(NearPeriodTotal,3); + double BodyShortPeriodTotal, ShadowVeryShortPeriodTotal; + int i, outIdx, totIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, ShadowVeryShortTrailingIdx, NearTrailingIdx, + lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLSTALLEDPATTERN)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal[2] = 0; + BodyLongPeriodTotal[1] = 0; + BodyLongPeriodTotal[0] = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + BodyShortPeriodTotal = 0; + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + NearPeriodTotal[2] = 0; + NearPeriodTotal[1] = 0; + NearPeriodTotal[0] = 0; + NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); + + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal[2] += TA_CANDLERANGE( BodyLong, i-2 ); + BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i-1 ); + i++; + } + i = NearTrailingIdx; + while( i < startIdx ) { + NearPeriodTotal[2] += TA_CANDLERANGE( Near, i-2 ); + NearPeriodTotal[1] += TA_CANDLERANGE( Near, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - three white candlesticks with consecutively higher closes + * - first candle: long white + * - second candle: long white with no or very short upper shadow opening within or near the previous white real body + * and closing higher than the prior candle + * - third candle: small white that gaps away or "rides on the shoulder" of the prior long real body (= it's at + * the upper end of the prior real body) + * The meanings of "long", "very short", "short", "near" are specified with TA_SetCandleSettings; + * outInteger is negative (-1 to -100): stalled pattern is always bearish; + * the user should consider that stalled pattern is significant when it appears in uptrend, while this function + * does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == 1 && // 1st white + TA_CANDLECOLOR(i-1) == 1 && // 2nd white + TA_CANDLECOLOR(i) == 1 && // 3rd white + inClose[i] > inClose[i-1] && inClose[i-1] > inClose[i-2] && // consecutive higher closes + TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[2], i-2 ) && // 1st: long real body + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && // 2nd: long real body + // very short upper shadow + TA_UPPERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i-1 ) && + // opens within/near 1st real body + inOpen[i-1] > inOpen[i-2] && + inOpen[i-1] <= inClose[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && + TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: small real body + // rides on the shoulder of 2nd real body + inOpen[i] >= inClose[i-1] - TA_REALBODY(i) - TA_CANDLEAVERAGE( Near, NearPeriodTotal[1], i-1 ) + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + for (totIdx = 2; totIdx >= 1; --totIdx) { + BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); + NearPeriodTotal[totIdx] += TA_CANDLERANGE( Near, i-totIdx ) + - TA_CANDLERANGE( Near, NearTrailingIdx-totIdx ); + } + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i-1 ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-1 ); + i++; + BodyLongTrailingIdx++; + BodyShortTrailingIdx++; + ShadowVeryShortTrailingIdx++; + NearTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlStalledPattern( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlStalledPattern( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLSTALLEDPATTERN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_LOCAL(BodyLongPeriodTotal,3); +/* Generated */ ARRAY_LOCAL(NearPeriodTotal,3); +/* Generated */ double BodyShortPeriodTotal, ShadowVeryShortPeriodTotal; +/* Generated */ int i, outIdx, totIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, ShadowVeryShortTrailingIdx, NearTrailingIdx, +/* Generated */ lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLSTALLEDPATTERN)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal[2] = 0; +/* Generated */ BodyLongPeriodTotal[1] = 0; +/* Generated */ BodyLongPeriodTotal[0] = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ NearPeriodTotal[2] = 0; +/* Generated */ NearPeriodTotal[1] = 0; +/* Generated */ NearPeriodTotal[0] = 0; +/* Generated */ NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal[2] += TA_CANDLERANGE( BodyLong, i-2 ); +/* Generated */ BodyLongPeriodTotal[1] += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ NearPeriodTotal[2] += TA_CANDLERANGE( Near, i-2 ); +/* Generated */ NearPeriodTotal[1] += TA_CANDLERANGE( Near, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == 1 && // 1st white +/* Generated */ TA_CANDLECOLOR(i-1) == 1 && // 2nd white +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 3rd white +/* Generated */ inClose[i] > inClose[i-1] && inClose[i-1] > inClose[i-2] && // consecutive higher closes +/* Generated */ TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[2], i-2 ) && // 1st: long real body +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal[1], i-1 ) && // 2nd: long real body +/* Generated */ // very short upper shadow +/* Generated */ TA_UPPERSHADOW(i-1) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i-1 ) && +/* Generated */ // opens within/near 1st real body +/* Generated */ inOpen[i-1] > inOpen[i-2] && +/* Generated */ inOpen[i-1] <= inClose[i-2] + TA_CANDLEAVERAGE( Near, NearPeriodTotal[2], i-2 ) && +/* Generated */ TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: small real body +/* Generated */ // rides on the shoulder of 2nd real body +/* Generated */ inOpen[i] >= inClose[i-1] - TA_REALBODY(i) - TA_CANDLEAVERAGE( Near, NearPeriodTotal[1], i-1 ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ for (totIdx = 2; totIdx >= 1; --totIdx) { +/* Generated */ BodyLongPeriodTotal[totIdx] += TA_CANDLERANGE( BodyLong, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-totIdx ); +/* Generated */ NearPeriodTotal[totIdx] += TA_CANDLERANGE( Near, i-totIdx ) +/* Generated */ - TA_CANDLERANGE( Near, NearTrailingIdx-totIdx ); +/* Generated */ } +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i-1 ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ NearTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLSTICKSANDWICH.c b/src/ta_func/ta_CDLSTICKSANDWICH.c new file mode 100644 index 000000000..bed1fbaf3 --- /dev/null +++ b/src/ta_func/ta_CDLSTICKSANDWICH.c @@ -0,0 +1,353 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 032005 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlStickSandwhichLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlStickSandwhichLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLSTICKSANDWICH_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(Equal) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLSTICKSANDWICH - Stick Sandwich + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlStickSandwhich( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlStickSandwhich( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlStickSandwhich( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLSTICKSANDWICH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double EqualPeriodTotal; + int i, outIdx, EqualTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLSTICKSANDWICH)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + EqualPeriodTotal = 0; + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-2 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: black candle + * - second candle: white candle that trades only above the prior close (low > prior close) + * - third candle: black candle with the close equal to the first candle's close + * The meaning of "equal" is specified with TA_SetCandleSettings + * outInteger is always positive (1 to 100): stick sandwich is always bullish; + * the user should consider that stick sandwich is significant when coming in a downtrend, + * while this function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == -1 && // first black + TA_CANDLECOLOR(i-1) == 1 && // second white + TA_CANDLECOLOR(i) == -1 && // third black + inLow[i-1] > inClose[i-2] && // 2nd low > prior close + inClose[i] <= inClose[i-2] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-2 ) && // 1st and 3rd same close + inClose[i] >= inClose[i-2] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-2 ) + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-2 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-2 ); + i++; + EqualTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlStickSandwhich( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlStickSandwhich( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLSTICKSANDWICH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double EqualPeriodTotal; +/* Generated */ int i, outIdx, EqualTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLSTICKSANDWICH)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ EqualPeriodTotal = 0; +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-2 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == -1 && // first black +/* Generated */ TA_CANDLECOLOR(i-1) == 1 && // second white +/* Generated */ TA_CANDLECOLOR(i) == -1 && // third black +/* Generated */ inLow[i-1] > inClose[i-2] && // 2nd low > prior close +/* Generated */ inClose[i] <= inClose[i-2] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-2 ) && // 1st and 3rd same close +/* Generated */ inClose[i] >= inClose[i-2] - TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-2 ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-2 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-2 ); +/* Generated */ i++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLTAKURI.c b/src/ta_func/ta_CDLTAKURI.c new file mode 100644 index 000000000..c445407a8 --- /dev/null +++ b/src/ta_func/ta_CDLTAKURI.c @@ -0,0 +1,387 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011505 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlTakuriLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlTakuriLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLTAKURI_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( max( TA_CANDLEAVGPERIOD(BodyDoji), TA_CANDLEAVGPERIOD(ShadowVeryShort) ), + TA_CANDLEAVGPERIOD(ShadowVeryLong) + ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLTAKURI - Takuri (Dragonfly Doji with very long lower shadow) + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlTakuri( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlTakuri( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlTakuri( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLTAKURI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyDojiPeriodTotal, ShadowVeryShortPeriodTotal, ShadowVeryLongPeriodTotal; + int i, outIdx, BodyDojiTrailingIdx, ShadowVeryShortTrailingIdx, ShadowVeryLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLTAKURI)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyDojiPeriodTotal = 0; + BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); + ShadowVeryShortPeriodTotal = 0; + ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); + ShadowVeryLongPeriodTotal = 0; + ShadowVeryLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryLong); + + i = BodyDojiTrailingIdx; + while( i < startIdx ) { + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + i = ShadowVeryShortTrailingIdx; + while( i < startIdx ) { + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); + i++; + } + i = ShadowVeryLongTrailingIdx; + while( i < startIdx ) { + ShadowVeryLongPeriodTotal += TA_CANDLERANGE( ShadowVeryLong, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * + * Must have: + * - doji body + * - open and close at the high of the day = no or very short upper shadow + * - very long lower shadow + * The meaning of "doji", "very short" and "very long" is specified with TA_SetCandleSettings + * outInteger is always positive (1 to 100) but this does not mean it is bullish: takuri must be considered + * relatively to the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && + TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && + TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryLong, ShadowVeryLongPeriodTotal, i ) + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); + ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) + - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); + ShadowVeryLongPeriodTotal += TA_CANDLERANGE( ShadowVeryLong, i ) + - TA_CANDLERANGE( ShadowVeryLong, ShadowVeryLongTrailingIdx ); + i++; + BodyDojiTrailingIdx++; + ShadowVeryShortTrailingIdx++; + ShadowVeryLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlTakuri( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlTakuri( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLTAKURI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyDojiPeriodTotal, ShadowVeryShortPeriodTotal, ShadowVeryLongPeriodTotal; +/* Generated */ int i, outIdx, BodyDojiTrailingIdx, ShadowVeryShortTrailingIdx, ShadowVeryLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLTAKURI)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyDojiPeriodTotal = 0; +/* Generated */ BodyDojiTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ ShadowVeryShortPeriodTotal = 0; +/* Generated */ ShadowVeryShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryShort); +/* Generated */ ShadowVeryLongPeriodTotal = 0; +/* Generated */ ShadowVeryLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(ShadowVeryLong); +/* Generated */ i = BodyDojiTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = ShadowVeryLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ ShadowVeryLongPeriodTotal += TA_CANDLERANGE( ShadowVeryLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyDojiPeriodTotal, i ) && +/* Generated */ TA_UPPERSHADOW(i) < TA_CANDLEAVERAGE( ShadowVeryShort, ShadowVeryShortPeriodTotal, i ) && +/* Generated */ TA_LOWERSHADOW(i) > TA_CANDLEAVERAGE( ShadowVeryLong, ShadowVeryLongPeriodTotal, i ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( BodyDoji, i ) - TA_CANDLERANGE( BodyDoji, BodyDojiTrailingIdx ); +/* Generated */ ShadowVeryShortPeriodTotal += TA_CANDLERANGE( ShadowVeryShort, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryShort, ShadowVeryShortTrailingIdx ); +/* Generated */ ShadowVeryLongPeriodTotal += TA_CANDLERANGE( ShadowVeryLong, i ) +/* Generated */ - TA_CANDLERANGE( ShadowVeryLong, ShadowVeryLongTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyDojiTrailingIdx++; +/* Generated */ ShadowVeryShortTrailingIdx++; +/* Generated */ ShadowVeryLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLTASUKIGAP.c b/src/ta_func/ta_CDLTASUKIGAP.c new file mode 100644 index 000000000..389c2c76c --- /dev/null +++ b/src/ta_func/ta_CDLTASUKIGAP.c @@ -0,0 +1,385 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlTasukiGapLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlTasukiGapLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLTASUKIGAP_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(Near) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLTASUKIGAP - Tasuki Gap + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlTasukiGap( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlTasukiGap( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlTasukiGap( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLTASUKIGAP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double NearPeriodTotal; + int i, outIdx, NearTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLTASUKIGAP)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + NearPeriodTotal = 0; + NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); + + i = NearTrailingIdx; + while( i < startIdx ) { + NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - upside (downside) gap + * - first candle after the window: white (black) candlestick + * - second candle: black (white) candlestick that opens within the previous real body and closes under (above) + * the previous real body inside the gap + * - the size of two real bodies should be near the same + * The meaning of "near" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that tasuki gap is significant when it appears in a trend, while this function does + * not consider it + */ + outIdx = 0; + do + { + if( + ( + TA_REALBODYGAPUP(i-1,i-2) && // upside gap + TA_CANDLECOLOR(i-1) == 1 && // 1st: white + TA_CANDLECOLOR(i) == -1 && // 2nd: black + inOpen[i] < inClose[i-1] && inOpen[i] > inOpen[i-1] && // that opens within the white rb + inClose[i] < inOpen[i-1] && // and closes under the white rb + inClose[i] > max(inClose[i-2], inOpen[i-2]) && // inside the gap + // size of 2 rb near the same + std_fabs(TA_REALBODY(i-1) - TA_REALBODY(i)) < TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) + ) || + ( + TA_REALBODYGAPDOWN(i-1,i-2) && // downside gap + TA_CANDLECOLOR(i-1) == -1 && // 1st: black + TA_CANDLECOLOR(i) == 1 && // 2nd: white + inOpen[i] < inOpen[i-1] && inOpen[i] > inClose[i-1] && // that opens within the black rb + inClose[i] > inOpen[i-1] && // and closes above the black rb + inClose[i] < min(inClose[i-2], inOpen[i-2]) && // inside the gap + // size of 2 rb near the same + std_fabs(TA_REALBODY(i-1) - TA_REALBODY(i)) < TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i-1) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ) - TA_CANDLERANGE( Near, NearTrailingIdx-1 ); + i++; + NearTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlTasukiGap( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlTasukiGap( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLTASUKIGAP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double NearPeriodTotal; +/* Generated */ int i, outIdx, NearTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLTASUKIGAP)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ NearPeriodTotal = 0; +/* Generated */ NearTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Near); +/* Generated */ i = NearTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( +/* Generated */ ( +/* Generated */ TA_REALBODYGAPUP(i-1,i-2) && // upside gap +/* Generated */ TA_CANDLECOLOR(i-1) == 1 && // 1st: white +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 2nd: black +/* Generated */ inOpen[i] < inClose[i-1] && inOpen[i] > inOpen[i-1] && // that opens within the white rb +/* Generated */ inClose[i] < inOpen[i-1] && // and closes under the white rb +/* Generated */ inClose[i] > max(inClose[i-2], inOpen[i-2]) && // inside the gap +/* Generated */ // size of 2 rb near the same +/* Generated */ std_fabs(TA_REALBODY(i-1) - TA_REALBODY(i)) < TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) +/* Generated */ ) || +/* Generated */ ( +/* Generated */ TA_REALBODYGAPDOWN(i-1,i-2) && // downside gap +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 1st: black +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 2nd: white +/* Generated */ inOpen[i] < inOpen[i-1] && inOpen[i] > inClose[i-1] && // that opens within the black rb +/* Generated */ inClose[i] > inOpen[i-1] && // and closes above the black rb +/* Generated */ inClose[i] < min(inClose[i-2], inOpen[i-2]) && // inside the gap +/* Generated */ // size of 2 rb near the same +/* Generated */ std_fabs(TA_REALBODY(i-1) - TA_REALBODY(i)) < TA_CANDLEAVERAGE( Near, NearPeriodTotal, i-1 ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i-1) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ NearPeriodTotal += TA_CANDLERANGE( Near, i-1 ) - TA_CANDLERANGE( Near, NearTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ NearTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLTHRUSTING.c b/src/ta_func/ta_CDLTHRUSTING.c new file mode 100644 index 000000000..e8efa7ccc --- /dev/null +++ b/src/ta_func/ta_CDLTHRUSTING.c @@ -0,0 +1,375 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 121204 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlThrustingLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlThrustingLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLTHRUSTING_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(Equal), TA_CANDLEAVGPERIOD(BodyLong) + ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLTHRUSTING - Thrusting Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlThrusting( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlThrusting( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlThrusting( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLTHRUSTING( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double EqualPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, EqualTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLTHRUSTING)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + EqualPeriodTotal = 0; + EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); + BodyLongPeriodTotal = 0; + BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); + + i = EqualTrailingIdx; + while( i < startIdx ) { + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); + i++; + } + i = BodyLongTrailingIdx; + while( i < startIdx ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black candle + * - second candle: white candle with open below previous day low and close into previous day body under the midpoint; + * to differentiate it from in-neck the close should not be equal to the black candle's close + * The meaning of "equal" is specified with TA_SetCandleSettings + * outInteger is negative (-1 to -100): thrusting pattern is always bearish + * the user should consider that the thrusting pattern is significant when it appears in a downtrend and it could be + * even bullish "when coming in an uptrend or occurring twice within several days" (Steve Nison says), while this + * function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-1) == -1 && // 1st: black + TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // long + TA_CANDLECOLOR(i) == 1 && // 2nd: white + inOpen[i] < inLow[i-1] && // open below prior low + inClose[i] > inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // close into prior body + inClose[i] <= inClose[i-1] + TA_REALBODY(i-1) * 0.5 // under the midpoint + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) + - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); + i++; + EqualTrailingIdx++; + BodyLongTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlThrusting( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlThrusting( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLTHRUSTING( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double EqualPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, EqualTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLTHRUSTING)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ EqualPeriodTotal = 0; +/* Generated */ EqualTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(Equal); +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ i = EqualTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-1) == -1 && // 1st: black +/* Generated */ TA_REALBODY(i-1) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-1 ) && // long +/* Generated */ TA_CANDLECOLOR(i) == 1 && // 2nd: white +/* Generated */ inOpen[i] < inLow[i-1] && // open below prior low +/* Generated */ inClose[i] > inClose[i-1] + TA_CANDLEAVERAGE( Equal, EqualPeriodTotal, i-1 ) && // close into prior body +/* Generated */ inClose[i] <= inClose[i-1] + TA_REALBODY(i-1) * 0.5 // under the midpoint +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ EqualPeriodTotal += TA_CANDLERANGE( Equal, i-1 ) - TA_CANDLERANGE( Equal, EqualTrailingIdx-1 ); +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-1 ) +/* Generated */ - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx-1 ); +/* Generated */ i++; +/* Generated */ EqualTrailingIdx++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLTRISTAR.c b/src/ta_func/ta_CDLTRISTAR.c new file mode 100644 index 000000000..f65e69430 --- /dev/null +++ b/src/ta_func/ta_CDLTRISTAR.c @@ -0,0 +1,366 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * CSB Christopher Barnhouse + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 100204 AC Creation + * 051005 CSB,AC Fix #1199526 for out-of-bound write in output. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlTristarLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlTristarLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLTRISTAR_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return TA_CANDLEAVGPERIOD(BodyDoji) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLTRISTAR - Tristar Pattern + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlTristar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlTristar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlTristar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLTRISTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyPeriodTotal; + int i, outIdx, BodyTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLTRISTAR)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyPeriodTotal = 0; + BodyTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyDoji); + + i = BodyTrailingIdx; + while( i < startIdx-2 ) { + BodyPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); + i++; + } + + /* Proceed with the calculation for the requested range. + * Must have: + * - 3 consecutive doji days + * - the second doji is a star + * The meaning of "doji" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish + */ + i = startIdx; + outIdx = 0; + do + { + if( TA_REALBODY(i-2) <= TA_CANDLEAVERAGE( BodyDoji, BodyPeriodTotal, i-2 ) && // 1st: doji + TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyDoji, BodyPeriodTotal, i-2 ) && // 2nd: doji + TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyPeriodTotal, i-2 ) ) { // 3rd: doji + outInteger[outIdx] = 0; + if ( TA_REALBODYGAPUP(i-1,i-2) // 2nd gaps up + && + max(inOpen[i],inClose[i]) < max(inOpen[i-1],inClose[i-1]) // 3rd is not higher than 2nd + ) + outInteger[outIdx] = -100; + if ( TA_REALBODYGAPDOWN(i-1,i-2) // 2nd gaps down + && + min(inOpen[i],inClose[i]) > min(inOpen[i-1],inClose[i-1]) // 3rd is not lower than 2nd + ) + outInteger[outIdx] = +100; + outIdx++; + } + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyPeriodTotal += TA_CANDLERANGE( BodyDoji, i-2 ) - TA_CANDLERANGE( BodyDoji, BodyTrailingIdx ); + i++; + BodyTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlTristar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlTristar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLTRISTAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyPeriodTotal; +/* Generated */ int i, outIdx, BodyTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLTRISTAR)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyPeriodTotal = 0; +/* Generated */ BodyTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyDoji); +/* Generated */ i = BodyTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyDoji, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-2) <= TA_CANDLEAVERAGE( BodyDoji, BodyPeriodTotal, i-2 ) && // 1st: doji +/* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyDoji, BodyPeriodTotal, i-2 ) && // 2nd: doji +/* Generated */ TA_REALBODY(i) <= TA_CANDLEAVERAGE( BodyDoji, BodyPeriodTotal, i-2 ) ) { // 3rd: doji +/* Generated */ outInteger[outIdx] = 0; +/* Generated */ if ( TA_REALBODYGAPUP(i-1,i-2) // 2nd gaps up +/* Generated */ && +/* Generated */ max(inOpen[i],inClose[i]) < max(inOpen[i-1],inClose[i-1]) // 3rd is not higher than 2nd +/* Generated */ ) +/* Generated */ outInteger[outIdx] = -100; +/* Generated */ if ( TA_REALBODYGAPDOWN(i-1,i-2) // 2nd gaps down +/* Generated */ && +/* Generated */ min(inOpen[i],inClose[i]) > min(inOpen[i-1],inClose[i-1]) // 3rd is not lower than 2nd +/* Generated */ ) +/* Generated */ outInteger[outIdx] = +100; +/* Generated */ outIdx++; +/* Generated */ } +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyPeriodTotal += TA_CANDLERANGE( BodyDoji, i-2 ) - TA_CANDLERANGE( BodyDoji, BodyTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLUNIQUE3RIVER.c b/src/ta_func/ta_CDLUNIQUE3RIVER.c new file mode 100644 index 000000000..53a15684d --- /dev/null +++ b/src/ta_func/ta_CDLUNIQUE3RIVER.c @@ -0,0 +1,375 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 022005 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlUnique3RiverLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlUnique3RiverLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLUNIQUE3RIVER_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLUNIQUE3RIVER - Unique 3 River + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlUnique3River( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlUnique3River( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlUnique3River( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLUNIQUE3RIVER( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyShortPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLUNIQUE3RIVER)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: long black candle + * - second candle: black harami candle with a lower low than the first candle's low + * - third candle: small white candle with open not lower than the second candle's low, better if its open and + * close are under the second candle's close + * The meaning of "short" and "long" is specified with TA_SetCandleSettings + * outInteger is positive (1 to 100): unique 3 river is always bullish and should appear in a downtrend + * to be significant, while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long + TA_CANDLECOLOR(i-2) == -1 && // black + TA_CANDLECOLOR(i-1) == -1 && // 2nd: black + inClose[i-1] > inClose[i-2] && inOpen[i-1] <= inOpen[i-2] && // harami + inLow[i-1] < inLow[i-2] && // lower low + TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: short + TA_CANDLECOLOR(i) == 1 && // white + inOpen[i] > inLow[i-1] // open not lower + ) + outInteger[outIdx++] = 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlUnique3River( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlUnique3River( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLUNIQUE3RIVER( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyShortPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLUNIQUE3RIVER)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long +/* Generated */ TA_CANDLECOLOR(i-2) == -1 && // black +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 2nd: black +/* Generated */ inClose[i-1] > inClose[i-2] && inOpen[i-1] <= inOpen[i-2] && // harami +/* Generated */ inLow[i-1] < inLow[i-2] && // lower low +/* Generated */ TA_REALBODY(i) < TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i ) && // 3rd: short +/* Generated */ TA_CANDLECOLOR(i) == 1 && // white +/* Generated */ inOpen[i] > inLow[i-1] // open not lower +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLUPSIDEGAP2CROWS.c b/src/ta_func/ta_CDLUPSIDEGAP2CROWS.c new file mode 100644 index 000000000..191e29e1e --- /dev/null +++ b/src/ta_func/ta_CDLUPSIDEGAP2CROWS.c @@ -0,0 +1,377 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 110104 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlUpsideGap2CrowsLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlUpsideGap2CrowsLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLUPSIDEGAP2CROWS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return max( TA_CANDLEAVGPERIOD(BodyShort), TA_CANDLEAVGPERIOD(BodyLong) ) + 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLUPSIDEGAP2CROWS - Upside Gap Two Crows + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlUpsideGap2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlUpsideGap2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlUpsideGap2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLUPSIDEGAP2CROWS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double BodyShortPeriodTotal, BodyLongPeriodTotal; + int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLUPSIDEGAP2CROWS)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + BodyLongPeriodTotal = 0; + BodyShortPeriodTotal = 0; + BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); + BodyShortTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyShort); + + i = BodyLongTrailingIdx; + while( i < startIdx-2 ) { + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); + i++; + } + i = BodyShortTrailingIdx; + while( i < startIdx-1 ) { + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); + i++; + } + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: white candle, usually long + * - second candle: small black real body + * - gap between the first and the second candle's real bodies + * - third candle: black candle with a real body that engulfs the preceding candle + * and closes above the white candle's close + * The meaning of "short" and "long" is specified with TA_SetCandleSettings + * outInteger is negative (-1 to -100): upside gap two crows is always bearish; + * the user should consider that an upside gap two crows is significant when it appears in an uptrend, + * while this function does not consider the trend + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == 1 && // 1st: white + TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // long + TA_CANDLECOLOR(i-1) == -1 && // 2nd: black + TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i-1 ) && // short + TA_REALBODYGAPUP(i-1,i-2) && // gapping up + TA_CANDLECOLOR(i) == -1 && // 3rd: black + inOpen[i] > inOpen[i-1] && inClose[i] < inClose[i-1] && // 3rd: engulfing prior rb + inClose[i] > inClose[i-2] // closing above 1st + ) + outInteger[outIdx++] = -100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); + BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i-1 ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); + i++; + BodyLongTrailingIdx++; + BodyShortTrailingIdx++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlUpsideGap2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlUpsideGap2Crows( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLUPSIDEGAP2CROWS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double BodyShortPeriodTotal, BodyLongPeriodTotal; +/* Generated */ int i, outIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLUPSIDEGAP2CROWS)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ BodyLongPeriodTotal = 0; +/* Generated */ BodyShortPeriodTotal = 0; +/* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); +/* Generated */ BodyShortTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(BodyShort); +/* Generated */ i = BodyLongTrailingIdx; +/* Generated */ while( i < startIdx-2 ) { +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = BodyShortTrailingIdx; +/* Generated */ while( i < startIdx-1 ) { +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i ); +/* Generated */ i++; +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == 1 && // 1st: white +/* Generated */ TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // long +/* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 2nd: black +/* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( BodyShort, BodyShortPeriodTotal, i-1 ) && // short +/* Generated */ TA_REALBODYGAPUP(i-1,i-2) && // gapping up +/* Generated */ TA_CANDLECOLOR(i) == -1 && // 3rd: black +/* Generated */ inOpen[i] > inOpen[i-1] && inClose[i] < inClose[i-1] && // 3rd: engulfing prior rb +/* Generated */ inClose[i] > inClose[i-2] // closing above 1st +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = -100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); +/* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( BodyShort, i-1 ) - TA_CANDLERANGE( BodyShort, BodyShortTrailingIdx ); +/* Generated */ i++; +/* Generated */ BodyLongTrailingIdx++; +/* Generated */ BodyShortTrailingIdx++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CDLXSIDEGAP3METHODS.c b/src/ta_func/ta_CDLXSIDEGAP3METHODS.c new file mode 100644 index 000000000..3a6b5be5a --- /dev/null +++ b/src/ta_func/ta_CDLXSIDEGAP3METHODS.c @@ -0,0 +1,350 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011605 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CdlXSideGap3MethodsLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cdlXSideGap3MethodsLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CDLXSIDEGAP3METHODS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CDLXSIDEGAP3METHODS - Upside/Downside Gap Three Methods + * + * Input = Open, High, Low, Close + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::CdlXSideGap3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inOpen, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlXSideGap3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlXSideGap3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inOpen[], +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CDLXSIDEGAP3METHODS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inOpen[], +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int i, outIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + + lookbackTotal = LOOKBACK_CALL(CDLXSIDEGAP3METHODS)(); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + i = startIdx; + + /* Proceed with the calculation for the requested range. + * Must have: + * - first candle: white (black) candle + * - second candle: white (black) candle + * - upside (downside) gap between the first and the second real bodies + * - third candle: black (white) candle that opens within the second real body and closes within the first real body + * outInteger is positive (1 to 100) when bullish or negative (-1 to -100) when bearish; + * the user should consider that up/downside gap 3 methods is significant when it appears in a trend, while this + * function does not consider it + */ + outIdx = 0; + do + { + if( TA_CANDLECOLOR(i-2) == TA_CANDLECOLOR(i-1) && // 1st and 2nd of same color + TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // 3rd opposite color + inOpen[i] < max(inClose[i-1], inOpen[i-1]) && // 3rd opens within 2nd rb + inOpen[i] > min(inClose[i-1], inOpen[i-1]) && + inClose[i] < max(inClose[i-2], inOpen[i-2]) && // 3rd closes within 1st rb + inClose[i] > min(inClose[i-2], inOpen[i-2]) && + ( ( + TA_CANDLECOLOR(i-2) == 1 && // when 1st is white + TA_REALBODYGAPUP(i-1,i-2) // upside gap + ) || + ( + TA_CANDLECOLOR(i-2) == -1 && // when 1st is black + TA_REALBODYGAPDOWN(i-1,i-2) // downside gap + ) + ) + ) + outInteger[outIdx++] = TA_CANDLECOLOR(i-2) * 100; + else + outInteger[outIdx++] = 0; + /* add the current range and subtract the first range: this is done after the pattern recognition + * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle) + */ + i++; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::CdlXSideGap3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inOpen, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cdlXSideGap3Methods( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inOpen[], +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CDLXSIDEGAP3METHODS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inOpen[], +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int i, outIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(CDLXSIDEGAP3METHODS)(); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ i = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ if( TA_CANDLECOLOR(i-2) == TA_CANDLECOLOR(i-1) && // 1st and 2nd of same color +/* Generated */ TA_CANDLECOLOR(i-1) == -TA_CANDLECOLOR(i) && // 3rd opposite color +/* Generated */ inOpen[i] < max(inClose[i-1], inOpen[i-1]) && // 3rd opens within 2nd rb +/* Generated */ inOpen[i] > min(inClose[i-1], inOpen[i-1]) && +/* Generated */ inClose[i] < max(inClose[i-2], inOpen[i-2]) && // 3rd closes within 1st rb +/* Generated */ inClose[i] > min(inClose[i-2], inOpen[i-2]) && +/* Generated */ ( ( +/* Generated */ TA_CANDLECOLOR(i-2) == 1 && // when 1st is white +/* Generated */ TA_REALBODYGAPUP(i-1,i-2) // upside gap +/* Generated */ ) || +/* Generated */ ( +/* Generated */ TA_CANDLECOLOR(i-2) == -1 && // when 1st is black +/* Generated */ TA_REALBODYGAPDOWN(i-1,i-2) // downside gap +/* Generated */ ) +/* Generated */ ) +/* Generated */ ) +/* Generated */ outInteger[outIdx++] = TA_CANDLECOLOR(i-2) * 100; +/* Generated */ else +/* Generated */ outInteger[outIdx++] = 0; +/* Generated */ i++; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CEIL.c b/src/ta_func/ta_CEIL.c new file mode 100644 index 000000000..65542d18d --- /dev/null +++ b/src/ta_func/ta_CEIL.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CeilLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int ceilLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CEIL_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CEIL - Vector Ceil + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Ceil( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ceil( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ceil( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CEIL( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_ceil(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ceil( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ceil( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CEIL( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_ceil(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CMO.c b/src/ta_func/ta_CMO.c new file mode 100644 index 000000000..3bab2039e --- /dev/null +++ b/src/ta_func/ta_CMO.c @@ -0,0 +1,595 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * BT Barry Tsung + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112605 MF Initial version. + * 021806 MF,BT Fix #1434450 reported by BT. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CmoLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cmoLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CMO_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int retValue; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + retValue = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_CMO,Cmo); + if( TA_GLOBALS_COMPATIBILITY == ENUM_VALUE(Compatibility,TA_COMPATIBILITY_METASTOCK,Metastock) ) + retValue--; + + return retValue; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CMO - Chande Momentum Oscillator + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cmo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cmo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cmo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CMO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + + int today, lookbackTotal, unstablePeriod, i; + double prevGain, prevLoss, prevValue, savePrevValue; + double tempValue1, tempValue2, tempValue3, tempValue4; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* CMO calculation is mostly identical to RSI. + * + * The only difference is in the last step of calculation: + * + * RSI = gain / (gain+loss) + * CMO = (gain-loss) / (gain+loss) + * + * See the RSI function for potentially some more info + * on this algo. + */ + + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(CMO)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + + outIdx = 0; /* Index into the output. */ + + /* Trap special case where the period is '1'. + * In that case, just copy the input into the + * output for the requested range (as-is !) + */ + if( optInTimePeriod == 1 ) + { + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + i = (endIdx-startIdx)+1; + VALUE_HANDLE_DEREF(outNBElement) = i; + #if defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) + ARRAY_MEMMOVE( outReal, 0, (inReal->mDataArray), (inReal->mOffset)+startIdx, i ); + #else + ARRAY_MEMMOVE( outReal, 0, inReal, startIdx, i ); + #endif + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Accumulate Wilder's "Average Gain" and "Average Loss" + * among the initial period. + */ + today = startIdx-lookbackTotal; + prevValue = inReal[today]; + + unstablePeriod = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_CMO,Cmo); + + /* If there is no unstable period, + * calculate the 'additional' initial + * price bar who is particuliar to + * metastock. + * If there is an unstable period, + * no need to calculate since this + * first value will be surely skip. + */ + if( (unstablePeriod == 0) && + (TA_GLOBALS_COMPATIBILITY == ENUM_VALUE(Compatibility,TA_COMPATIBILITY_METASTOCK,Metastock))) + { + /* Preserve prevValue because it may get + * overwritten by the output. + *(because output ptr could be the same as input ptr). + */ + savePrevValue = prevValue; + + /* No unstable period, so must calculate first output + * particular to Metastock. + * (Metastock re-use the first price bar, so there + * is no loss/gain at first. Beats me why they + * are doing all this). + */ + prevGain = 0.0; + prevLoss = 0.0; + for( i=optInTimePeriod; i > 0; i-- ) + { + tempValue1 = inReal[today++]; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + if( tempValue2 < 0 ) + prevLoss -= tempValue2; + else + prevGain += tempValue2; + } + + + tempValue1 = prevLoss/optInTimePeriod; + tempValue2 = prevGain/optInTimePeriod; + tempValue3 = tempValue2-tempValue1; + tempValue4 = tempValue1+tempValue2; + + /* Write the output. */ + if( !TA_IS_ZERO(tempValue4) ) + outReal[outIdx++] = 100*(tempValue3/tempValue4); + else + outReal[outIdx++] = 0.0; + + /* Are we done? */ + if( today > endIdx ) + { + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Start over for the next price bar. */ + today -= optInTimePeriod; + prevValue = savePrevValue; + } + + + /* Remaining of the processing is identical + * for both Classic calculation and Metastock. + */ + prevGain = 0.0; + prevLoss = 0.0; + today++; + for( i=optInTimePeriod; i > 0; i-- ) + { + tempValue1 = inReal[today++]; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + if( tempValue2 < 0 ) + prevLoss -= tempValue2; + else + prevGain += tempValue2; + } + + + /* Subsequent prevLoss and prevGain are smoothed + * using the previous values (Wilder's approach). + * 1) Multiply the previous by 'period-1'. + * 2) Add today value. + * 3) Divide by 'period'. + */ + prevLoss /= optInTimePeriod; + prevGain /= optInTimePeriod; + + /* Often documentation present the RSI calculation as follow: + * RSI = 100 - (100 / 1 + (prevGain/prevLoss)) + * + * The following is equivalent: + * RSI = 100 * (prevGain/(prevGain+prevLoss)) + * + * The second equation is used here for speed optimization. + */ + if( today > startIdx ) + { + tempValue1 = prevGain+prevLoss; + if( !TA_IS_ZERO(tempValue1) ) + outReal[outIdx++] = 100.0*((prevGain-prevLoss)/tempValue1); + else + outReal[outIdx++] = 0.0; + } + else + { + /* Skip the unstable period. Do the processing + * but do not write it in the output. + */ + while( today < startIdx ) + { + tempValue1 = inReal[today]; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + + prevLoss *= (optInTimePeriod-1); + prevGain *= (optInTimePeriod-1); + if( tempValue2 < 0 ) + prevLoss -= tempValue2; + else + prevGain += tempValue2; + + prevLoss /= optInTimePeriod; + prevGain /= optInTimePeriod; + + today++; + } + } + + /* Unstable period skipped... now continue + * processing if needed. + */ + while( today <= endIdx ) + { + tempValue1 = inReal[today++]; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + + prevLoss *= (optInTimePeriod-1); + prevGain *= (optInTimePeriod-1); + if( tempValue2 < 0 ) + prevLoss -= tempValue2; + else + prevGain += tempValue2; + + prevLoss /= optInTimePeriod; + prevGain /= optInTimePeriod; + tempValue1 = prevGain+prevLoss; + if( !TA_IS_ZERO(tempValue1) ) + outReal[outIdx++] = 100.0*((prevGain-prevLoss)/tempValue1); + else + outReal[outIdx++] = 0.0; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cmo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cmo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CMO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int today, lookbackTotal, unstablePeriod, i; +/* Generated */ double prevGain, prevLoss, prevValue, savePrevValue; +/* Generated */ double tempValue1, tempValue2, tempValue3, tempValue4; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ lookbackTotal = LOOKBACK_CALL(CMO)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ outIdx = 0; +/* Generated */ if( optInTimePeriod == 1 ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ i = (endIdx-startIdx)+1; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = i; +/* Generated */ #if defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) +/* Generated */ ARRAY_MEMMOVE( outReal, 0, (inReal->mDataArray), (inReal->mOffset)+startIdx, i ); +/* Generated */ #else +/* Generated */ ARRAY_MEMMOVE( outReal, 0, inReal, startIdx, i ); +/* Generated */ #endif +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ today = startIdx-lookbackTotal; +/* Generated */ prevValue = inReal[today]; +/* Generated */ unstablePeriod = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_CMO,Cmo); +/* Generated */ if( (unstablePeriod == 0) && +/* Generated */ (TA_GLOBALS_COMPATIBILITY == ENUM_VALUE(Compatibility,TA_COMPATIBILITY_METASTOCK,Metastock))) +/* Generated */ { +/* Generated */ savePrevValue = prevValue; +/* Generated */ prevGain = 0.0; +/* Generated */ prevLoss = 0.0; +/* Generated */ for( i=optInTimePeriod; i > 0; i-- ) +/* Generated */ { +/* Generated */ tempValue1 = inReal[today++]; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ prevLoss -= tempValue2; +/* Generated */ else +/* Generated */ prevGain += tempValue2; +/* Generated */ } +/* Generated */ tempValue1 = prevLoss/optInTimePeriod; +/* Generated */ tempValue2 = prevGain/optInTimePeriod; +/* Generated */ tempValue3 = tempValue2-tempValue1; +/* Generated */ tempValue4 = tempValue1+tempValue2; +/* Generated */ if( !TA_IS_ZERO(tempValue4) ) +/* Generated */ outReal[outIdx++] = 100*(tempValue3/tempValue4); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ if( today > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ today -= optInTimePeriod; +/* Generated */ prevValue = savePrevValue; +/* Generated */ } +/* Generated */ prevGain = 0.0; +/* Generated */ prevLoss = 0.0; +/* Generated */ today++; +/* Generated */ for( i=optInTimePeriod; i > 0; i-- ) +/* Generated */ { +/* Generated */ tempValue1 = inReal[today++]; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ prevLoss -= tempValue2; +/* Generated */ else +/* Generated */ prevGain += tempValue2; +/* Generated */ } +/* Generated */ prevLoss /= optInTimePeriod; +/* Generated */ prevGain /= optInTimePeriod; +/* Generated */ if( today > startIdx ) +/* Generated */ { +/* Generated */ tempValue1 = prevGain+prevLoss; +/* Generated */ if( !TA_IS_ZERO(tempValue1) ) +/* Generated */ outReal[outIdx++] = 100.0*((prevGain-prevLoss)/tempValue1); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ while( today < startIdx ) +/* Generated */ { +/* Generated */ tempValue1 = inReal[today]; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ prevLoss *= (optInTimePeriod-1); +/* Generated */ prevGain *= (optInTimePeriod-1); +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ prevLoss -= tempValue2; +/* Generated */ else +/* Generated */ prevGain += tempValue2; +/* Generated */ prevLoss /= optInTimePeriod; +/* Generated */ prevGain /= optInTimePeriod; +/* Generated */ today++; +/* Generated */ } +/* Generated */ } +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tempValue1 = inReal[today++]; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ prevLoss *= (optInTimePeriod-1); +/* Generated */ prevGain *= (optInTimePeriod-1); +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ prevLoss -= tempValue2; +/* Generated */ else +/* Generated */ prevGain += tempValue2; +/* Generated */ prevLoss /= optInTimePeriod; +/* Generated */ prevGain /= optInTimePeriod; +/* Generated */ tempValue1 = prevGain+prevLoss; +/* Generated */ if( !TA_IS_ZERO(tempValue1) ) +/* Generated */ outReal[outIdx++] = 100.0*((prevGain-prevLoss)/tempValue1); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_CORREL.c b/src/ta_func/ta_CORREL.c new file mode 100644 index 000000000..fc7d6a2de --- /dev/null +++ b/src/ta_func/ta_CORREL.c @@ -0,0 +1,404 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 101003 MF Initial Coding + * 062804 MF Resolve div by zero bug on limit case. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CorrelLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int correlLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_CORREL_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_CORREL - Pearson's Correlation Coefficient (r) + * + * Input = double, double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Correl( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal0, +/* Generated */ SubArray^ inReal1, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Correl( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode correl( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal0[], +/* Generated */ double inReal1[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_CORREL( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal0[], +/* Generated */ const double inReal1[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + double sumXY, sumX, sumY, sumX2, sumY2, x, y, trailingX, trailingY; + double tempReal; + int lookbackTotal, today, trailingIdx, outIdx; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Move up the start index if there is not + * enough initial data. + */ + lookbackTotal = optInTimePeriod-1; + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + trailingIdx = startIdx - lookbackTotal; + + /* Calculate the initial values. */ + sumXY = sumX = sumY = sumX2 = sumY2 = 0.0; + for( today=trailingIdx; today <= startIdx; today++ ) + { + x = inReal0[today]; + sumX += x; + sumX2 += x*x; + + y = inReal1[today]; + sumXY += x*y; + sumY += y; + sumY2 += y*y; + } + + /* Write the first output. + * Save first the trailing values since the input + * and output might be the same array, + */ + trailingX = inReal0[trailingIdx]; + trailingY = inReal1[trailingIdx++]; + tempReal = (sumX2-((sumX*sumX)/optInTimePeriod)) * (sumY2-((sumY*sumY)/optInTimePeriod)); + if( !TA_IS_ZERO_OR_NEG(tempReal) ) + outReal[0] = (sumXY-((sumX*sumY)/optInTimePeriod)) / std_sqrt(tempReal); + else + outReal[0] = 0.0; + + /* Tight loop to do subsequent values. */ + outIdx = 1; + while( today <= endIdx ) + { + /* Remove trailing values */ + sumX -= trailingX; + sumX2 -= trailingX*trailingX; + + sumXY -= trailingX*trailingY; + sumY -= trailingY; + sumY2 -= trailingY*trailingY; + + /* Add new values */ + x = inReal0[today]; + sumX += x; + sumX2 += x*x; + + y = inReal1[today++]; + sumXY += x*y; + sumY += y; + sumY2 += y*y; + + /* Output new coefficient. + * Save first the trailing values since the input + * and output might be the same array, + */ + trailingX = inReal0[trailingIdx]; + trailingY = inReal1[trailingIdx++]; + tempReal = (sumX2-((sumX*sumX)/optInTimePeriod)) * (sumY2-((sumY*sumY)/optInTimePeriod)); + if( !TA_IS_ZERO_OR_NEG(tempReal) ) + outReal[outIdx++] = (sumXY-((sumX*sumY)/optInTimePeriod)) / std_sqrt(tempReal); + else + outReal[outIdx++] = 0.0; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Correl( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode correl( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal0[], +/* Generated */ float inReal1[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_CORREL( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal0[], +/* Generated */ const float inReal1[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double sumXY, sumX, sumY, sumX2, sumY2, x, y, trailingX, trailingY; +/* Generated */ double tempReal; +/* Generated */ int lookbackTotal, today, trailingIdx, outIdx; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = optInTimePeriod-1; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ trailingIdx = startIdx - lookbackTotal; +/* Generated */ sumXY = sumX = sumY = sumX2 = sumY2 = 0.0; +/* Generated */ for( today=trailingIdx; today <= startIdx; today++ ) +/* Generated */ { +/* Generated */ x = inReal0[today]; +/* Generated */ sumX += x; +/* Generated */ sumX2 += x*x; +/* Generated */ y = inReal1[today]; +/* Generated */ sumXY += x*y; +/* Generated */ sumY += y; +/* Generated */ sumY2 += y*y; +/* Generated */ } +/* Generated */ trailingX = inReal0[trailingIdx]; +/* Generated */ trailingY = inReal1[trailingIdx++]; +/* Generated */ tempReal = (sumX2-((sumX*sumX)/optInTimePeriod)) * (sumY2-((sumY*sumY)/optInTimePeriod)); +/* Generated */ if( !TA_IS_ZERO_OR_NEG(tempReal) ) +/* Generated */ outReal[0] = (sumXY-((sumX*sumY)/optInTimePeriod)) / std_sqrt(tempReal); +/* Generated */ else +/* Generated */ outReal[0] = 0.0; +/* Generated */ outIdx = 1; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ sumX -= trailingX; +/* Generated */ sumX2 -= trailingX*trailingX; +/* Generated */ sumXY -= trailingX*trailingY; +/* Generated */ sumY -= trailingY; +/* Generated */ sumY2 -= trailingY*trailingY; +/* Generated */ x = inReal0[today]; +/* Generated */ sumX += x; +/* Generated */ sumX2 += x*x; +/* Generated */ y = inReal1[today++]; +/* Generated */ sumXY += x*y; +/* Generated */ sumY += y; +/* Generated */ sumY2 += y*y; +/* Generated */ trailingX = inReal0[trailingIdx]; +/* Generated */ trailingY = inReal1[trailingIdx++]; +/* Generated */ tempReal = (sumX2-((sumX*sumX)/optInTimePeriod)) * (sumY2-((sumY*sumY)/optInTimePeriod)); +/* Generated */ if( !TA_IS_ZERO_OR_NEG(tempReal) ) +/* Generated */ outReal[outIdx++] = (sumXY-((sumX*sumY)/optInTimePeriod)) / std_sqrt(tempReal); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_COS.c b/src/ta_func/ta_COS.c new file mode 100644 index 000000000..3de979510 --- /dev/null +++ b/src/ta_func/ta_COS.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CosLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int cosLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_COS_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_COS - Vector Trigonometric Cos + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_COS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_cos(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cos( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_COS( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_cos(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_COSH.c b/src/ta_func/ta_COSH.c new file mode 100644 index 000000000..47b6b45f1 --- /dev/null +++ b/src/ta_func/ta_COSH.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::CoshLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int coshLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_COSH_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_COSH - Vector Trigonometric Cosh + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Cosh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cosh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cosh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_COSH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_cosh(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Cosh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode cosh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_COSH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_cosh(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_DEMA.c b/src/ta_func/ta_DEMA.c new file mode 100644 index 000000000..c7153dfa5 --- /dev/null +++ b/src/ta_func/ta_DEMA.c @@ -0,0 +1,487 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010102 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::DemaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int demaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_DEMA_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* Get lookback for one EMA. + * Multiply by two (because double smoothing). + */ + return LOOKBACK_CALL(EMA)( optInTimePeriod ) * 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_DEMA - Double Exponential Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Dema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Dema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode dema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_DEMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_REF(firstEMA); + ARRAY_REF(secondEMA); + double k; + VALUE_HANDLE_INT(firstEMABegIdx); + VALUE_HANDLE_INT(firstEMANbElement); + VALUE_HANDLE_INT(secondEMABegIdx); + VALUE_HANDLE_INT(secondEMANbElement); + int tempInt, outIdx, firstEMAIdx, lookbackTotal, lookbackEMA; + ENUM_DECLARATION(RetCode) retCode; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* For an explanation of this function, please read + * + * Stocks & Commodities V. 12:1 (11-19): + * Smoothing Data With Faster Moving Averages + * Stocks & Commodities V. 12:2 (72-80): + * Smoothing Data With Less Lag + * + * Both magazine articles written by Patrick G. Mulloy + * + * Essentially, a DEMA of time serie 't' is: + * EMA2 = EMA(EMA(t,period),period) + * DEMA = 2*EMA(t,period)- EMA2 + * + * DEMA offers a moving average with less lags then the + * traditional EMA. + * + * Do not confuse a DEMA with the EMA2. Both are called + * "Double EMA" in the litterature, but EMA2 is a simple + * EMA of an EMA, while DEMA is a compostie of a single + * EMA with EMA2. + * + * TEMA is very similar (and from the same author). + */ + + /* Will change only on success. */ + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + + /* Adjust startIdx to account for the lookback period. */ + lookbackEMA = LOOKBACK_CALL(EMA)( optInTimePeriod ); + lookbackTotal = lookbackEMA * 2; + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + + /* Allocate a temporary buffer for the firstEMA. + * + * When possible, re-use the outputBuffer for temp + * calculation. + */ + #if defined(USE_SINGLE_PRECISION_INPUT) || defined( USE_SUBARRAY ) + tempInt = lookbackTotal+(endIdx-startIdx)+1; + ARRAY_ALLOC(firstEMA, tempInt ); + #if !defined( _JAVA ) + if( !firstEMA ) + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + #endif + #else + if( inReal == outReal ) + firstEMA = outReal; + else + { + tempInt = lookbackTotal+(endIdx-startIdx)+1; + ARRAY_ALLOC(firstEMA, tempInt ); + #if !defined( _JAVA ) + if( !firstEMA ) + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + #endif + } + #endif + + /* Calculate the first EMA */ + k = PER_TO_K(optInTimePeriod); + retCode = FUNCTION_CALL(INT_EMA)( startIdx-lookbackEMA, endIdx, inReal, + optInTimePeriod, k, + VALUE_HANDLE_OUT(firstEMABegIdx), VALUE_HANDLE_OUT(firstEMANbElement), + firstEMA ); + + /* Verify for failure or if not enough data after + * calculating the first EMA. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success)) || (VALUE_HANDLE_GET(firstEMANbElement) == 0) ) + { + ARRAY_FREE_COND( firstEMA != outReal, firstEMA ); + return retCode; + } + + /* Allocate a temporary buffer for storing the EMA of the EMA. */ + ARRAY_ALLOC(secondEMA, VALUE_HANDLE_GET(firstEMANbElement)); + + #if !defined( _JAVA ) + if( !secondEMA ) + { + ARRAY_FREE_COND( firstEMA != outReal, firstEMA ); + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + } + #endif + + retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, VALUE_HANDLE_GET(firstEMANbElement)-1, firstEMA, + optInTimePeriod, k, + VALUE_HANDLE_OUT(secondEMABegIdx), VALUE_HANDLE_OUT(secondEMANbElement), + secondEMA ); + + /* Return empty output on failure or if not enough data after + * calculating the second EMA. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success)) || (VALUE_HANDLE_GET(secondEMANbElement) == 0) ) + { + #if defined(USE_SINGLE_PRECISION_INPUT) + ARRAY_FREE( firstEMA ); + #else + ARRAY_FREE_COND( firstEMA != outReal, firstEMA ); + #endif + ARRAY_FREE( secondEMA ); + return retCode; + } + + /* Iterate through the second EMA and write the DEMA into + * the output. + */ + firstEMAIdx = VALUE_HANDLE_GET(secondEMABegIdx); + outIdx = 0; + while( outIdx < VALUE_HANDLE_GET(secondEMANbElement) ) + { + outReal[outIdx] = (2.0*firstEMA[firstEMAIdx++]) - secondEMA[outIdx]; + outIdx++; + } + + #if defined(USE_SINGLE_PRECISION_INPUT) + ARRAY_FREE( firstEMA ); + #else + ARRAY_FREE_COND( firstEMA != outReal, firstEMA ); + #endif + ARRAY_FREE( secondEMA ); + + /* Succeed. Indicate where the output starts relative to + * the caller input. + */ + VALUE_HANDLE_DEREF(outBegIdx) = VALUE_HANDLE_GET(firstEMABegIdx) + VALUE_HANDLE_GET(secondEMABegIdx); + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Dema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode dema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_DEMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF(firstEMA); +/* Generated */ ARRAY_REF(secondEMA); +/* Generated */ double k; +/* Generated */ VALUE_HANDLE_INT(firstEMABegIdx); +/* Generated */ VALUE_HANDLE_INT(firstEMANbElement); +/* Generated */ VALUE_HANDLE_INT(secondEMABegIdx); +/* Generated */ VALUE_HANDLE_INT(secondEMANbElement); +/* Generated */ int tempInt, outIdx, firstEMAIdx, lookbackTotal, lookbackEMA; +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ lookbackEMA = LOOKBACK_CALL(EMA)( optInTimePeriod ); +/* Generated */ lookbackTotal = lookbackEMA * 2; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) || defined( USE_SUBARRAY ) +/* Generated */ tempInt = lookbackTotal+(endIdx-startIdx)+1; +/* Generated */ ARRAY_ALLOC(firstEMA, tempInt ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !firstEMA ) +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ #endif +/* Generated */ #else +/* Generated */ if( inReal == outReal ) +/* Generated */ firstEMA = outReal; +/* Generated */ else +/* Generated */ { +/* Generated */ tempInt = lookbackTotal+(endIdx-startIdx)+1; +/* Generated */ ARRAY_ALLOC(firstEMA, tempInt ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !firstEMA ) +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ #endif +/* Generated */ } +/* Generated */ #endif +/* Generated */ k = PER_TO_K(optInTimePeriod); +/* Generated */ retCode = FUNCTION_CALL(INT_EMA)( startIdx-lookbackEMA, endIdx, inReal, +/* Generated */ optInTimePeriod, k, +/* Generated */ VALUE_HANDLE_OUT(firstEMABegIdx), VALUE_HANDLE_OUT(firstEMANbElement), +/* Generated */ firstEMA ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success)) || (VALUE_HANDLE_GET(firstEMANbElement) == 0) ) +/* Generated */ { +/* Generated */ ARRAY_FREE_COND( firstEMA != outReal, firstEMA ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ ARRAY_ALLOC(secondEMA, VALUE_HANDLE_GET(firstEMANbElement)); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !secondEMA ) +/* Generated */ { +/* Generated */ ARRAY_FREE_COND( firstEMA != outReal, firstEMA ); +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ } +/* Generated */ #endif +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, VALUE_HANDLE_GET(firstEMANbElement)-1, firstEMA, +/* Generated */ optInTimePeriod, k, +/* Generated */ VALUE_HANDLE_OUT(secondEMABegIdx), VALUE_HANDLE_OUT(secondEMANbElement), +/* Generated */ secondEMA ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success)) || (VALUE_HANDLE_GET(secondEMANbElement) == 0) ) +/* Generated */ { +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ ARRAY_FREE( firstEMA ); +/* Generated */ #else +/* Generated */ ARRAY_FREE_COND( firstEMA != outReal, firstEMA ); +/* Generated */ #endif +/* Generated */ ARRAY_FREE( secondEMA ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ firstEMAIdx = VALUE_HANDLE_GET(secondEMABegIdx); +/* Generated */ outIdx = 0; +/* Generated */ while( outIdx < VALUE_HANDLE_GET(secondEMANbElement) ) +/* Generated */ { +/* Generated */ outReal[outIdx] = (2.0*firstEMA[firstEMAIdx++]) - secondEMA[outIdx]; +/* Generated */ outIdx++; +/* Generated */ } +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ ARRAY_FREE( firstEMA ); +/* Generated */ #else +/* Generated */ ARRAY_FREE_COND( firstEMA != outReal, firstEMA ); +/* Generated */ #endif +/* Generated */ ARRAY_FREE( secondEMA ); +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = VALUE_HANDLE_GET(firstEMABegIdx) + VALUE_HANDLE_GET(secondEMABegIdx); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_DIV.c b/src/ta_func/ta_DIV.c new file mode 100644 index 000000000..e195a39bc --- /dev/null +++ b/src/ta_func/ta_DIV.c @@ -0,0 +1,250 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::DivLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int divLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_DIV_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_DIV - Vector Arithmetic Div + * + * Input = double, double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Div( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal0, +/* Generated */ SubArray^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Div( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode div( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal0[], +/* Generated */ double inReal1[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_DIV( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal0[], +/* Generated */ const double inReal1[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = inReal0[i]/inReal1[i]; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Div( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode div( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal0[], +/* Generated */ float inReal1[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_DIV( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal0[], +/* Generated */ const float inReal1[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = inReal0[i]/inReal1[i]; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_DX.c b/src/ta_func/ta_DX.c new file mode 100644 index 000000000..8c3bb1ffe --- /dev/null +++ b/src/ta_func/ta_DX.c @@ -0,0 +1,692 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AM Adrian Michel + * MIF Mirek Fontan (mira@fontan.cz) + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 082303 MF Fix #792298. Remove rounding. Bug reported by AM. + * 062704 MF Fix #965557. Div by zero bug reported by MIF. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::DxLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int dxLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_DX_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + if( optInTimePeriod > 1 ) + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_DX,Dx); + else + return 2; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_DX - Directional Movement Index + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Dx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Dx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode dx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_DX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int today, lookbackTotal, outIdx; + double prevHigh, prevLow, prevClose; + double prevMinusDM, prevPlusDM, prevTR; + double tempReal, tempReal2, diffP, diffM; + double minusDI, plusDI; + + int i; + + #define TRUE_RANGE(TH,TL,YC,OUT) {\ + OUT = TH-TL; \ + tempReal2 = std_fabs(TH-YC); \ + if( tempReal2 > OUT ) \ + OUT = tempReal2; \ + tempReal2 = std_fabs(TL-YC); \ + if( tempReal2 > OUT ) \ + OUT = tempReal2; \ + } + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* + * The DM1 (one period) is base on the largest part of + * today's range that is outside of yesterdays range. + * + * The following 7 cases explain how the +DM and -DM are + * calculated on one period: + * + * Case 1: Case 2: + * C| A| + * | | C| + * | +DM1 = (C-A) B| | +DM1 = 0 + * | -DM1 = 0 | -DM1 = (B-D) + * A| | D| + * | D| + * B| + * + * Case 3: Case 4: + * C| C| + * | A| | + * | +DM1 = (C-A) | | +DM1 = 0 + * | -DM1 = 0 B| | -DM1 = (B-D) + * A| | | + * | | D| + * B| | + * D| + * + * Case 5: Case 6: + * A| A| C| + * | C| +DM1 = 0 | | +DM1 = 0 + * | | -DM1 = 0 | | -DM1 = 0 + * | D| | | + * B| B| D| + * + * + * Case 7: + * + * C| + * A| | + * | | +DM=0 + * B| | -DM=0 + * D| + * + * In case 3 and 4, the rule is that the smallest delta between + * (C-A) and (B-D) determine which of +DM or -DM is zero. + * + * In case 7, (C-A) and (B-D) are equal, so both +DM and -DM are + * zero. + * + * The rules remain the same when A=B and C=D (when the highs + * equal the lows). + * + * When calculating the DM over a period > 1, the one-period DM + * for the desired period are initialy sum. In other word, + * for a -DM14, sum the -DM1 for the first 14 days (that's + * 13 values because there is no DM for the first day!) + * Subsequent DM are calculated using the Wilder's + * smoothing approach: + * + * Previous -DM14 + * Today's -DM14 = Previous -DM14 - -------------- + Today's -DM1 + * 14 + * + * Calculation of a -DI14 is as follow: + * + * -DM14 + * -DI14 = -------- + * TR14 + * + * Calculation of the TR14 is: + * + * Previous TR14 + * Today's TR14 = Previous TR14 - -------------- + Today's TR1 + * 14 + * + * The first TR14 is the summation of the first 14 TR1. See the + * TA_TRANGE function on how to calculate the true range. + * + * Calculation of the DX14 is: + * + * diffDI = ABS( (-DI14) - (+DI14) ) + * sumDI = (-DI14) + (+DI14) + * + * DX14 = 100 * (diffDI / sumDI) + * + * Reference: + * New Concepts In Technical Trading Systems, J. Welles Wilder Jr + */ + + /* Original implementation from Wilder's book was doing some integer + * rounding in its calculations. + * + * This was understandable in the context that at the time the book + * was written, most user were doing the calculation by hand. + * + * For a computer, rounding is unnecessary (and even problematic when inputs + * are close to 1). + * + * TA-Lib does not do the rounding. Still, if you want to reproduce Wilder's examples, + * you can comment out the following #undef/#define and rebuild the library. + */ + #undef round_pos + #define round_pos(x) (x) + + if( optInTimePeriod > 1 ) + lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_DX,Dx); + else + lookbackTotal = 2; + + /* Adjust startIdx to account for the lookback period. */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Indicate where the next output should be put + * in the outReal. + */ + outIdx = 0; + + /* Process the initial DM and TR */ + VALUE_HANDLE_DEREF(outBegIdx) = today = startIdx; + + prevMinusDM = 0.0; + prevPlusDM = 0.0; + prevTR = 0.0; + today = startIdx - lookbackTotal; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + prevClose = inClose[today]; + i = optInTimePeriod-1; + while( i-- > 0 ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + else if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR += tempReal; + prevClose = inClose[today]; + } + + /* Skip the unstable period. Note that this loop must be executed + * at least ONCE to calculate the first DI. + */ + i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_DX,Dx) + 1; + while( i-- != 0 ) + { + /* Calculate the prevMinusDM and prevPlusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + prevMinusDM -= prevMinusDM/optInTimePeriod; + prevPlusDM -= prevPlusDM/optInTimePeriod; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + else if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + } + + /* Write the first DX output */ + if( !TA_IS_ZERO(prevTR) ) + { + minusDI = round_pos(100.0*(prevMinusDM/prevTR)); + plusDI = round_pos(100.0*(prevPlusDM/prevTR)); + tempReal = minusDI+plusDI; + if( !TA_IS_ZERO(tempReal) ) + outReal[0] = round_pos( 100.0 * (std_fabs(minusDI-plusDI)/tempReal) ); + else + outReal[0] = 0.0; + } + else + outReal[0] = 0.0; + outIdx = 1; + + while( today < endIdx ) + { + /* Calculate the prevMinusDM and prevPlusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + prevMinusDM -= prevMinusDM/optInTimePeriod; + prevPlusDM -= prevPlusDM/optInTimePeriod; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + else if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + + /* Calculate the DX. The value is rounded (see Wilder book). */ + if( !TA_IS_ZERO(prevTR)) + { + minusDI = round_pos(100.0*(prevMinusDM/prevTR)); + plusDI = round_pos(100.0*(prevPlusDM/prevTR)); + /* This loop is just to accumulate the initial DX */ + tempReal = minusDI+plusDI; + if( !TA_IS_ZERO(tempReal)) + outReal[outIdx] = round_pos( 100.0 * (std_fabs(minusDI-plusDI)/tempReal) ); + else + outReal[outIdx] = outReal[outIdx-1]; + } + else + outReal[outIdx] = outReal[outIdx-1]; + outIdx++; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Dx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode dx( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_DX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int today, lookbackTotal, outIdx; +/* Generated */ double prevHigh, prevLow, prevClose; +/* Generated */ double prevMinusDM, prevPlusDM, prevTR; +/* Generated */ double tempReal, tempReal2, diffP, diffM; +/* Generated */ double minusDI, plusDI; +/* Generated */ int i; +/* Generated */ #define TRUE_RANGE(TH,TL,YC,OUT) {\ +/* Generated */ OUT = TH-TL; \ +/* Generated */ tempReal2 = std_fabs(TH-YC); \ +/* Generated */ if( tempReal2 > OUT ) \ +/* Generated */ OUT = tempReal2; \ +/* Generated */ tempReal2 = std_fabs(TL-YC); \ +/* Generated */ if( tempReal2 > OUT ) \ +/* Generated */ OUT = tempReal2; \ +/* Generated */ } +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ #undef round_pos +/* Generated */ #define round_pos(x) (x) +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_DX,Dx); +/* Generated */ else +/* Generated */ lookbackTotal = 2; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = today = startIdx; +/* Generated */ prevMinusDM = 0.0; +/* Generated */ prevPlusDM = 0.0; +/* Generated */ prevTR = 0.0; +/* Generated */ today = startIdx - lookbackTotal; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ prevClose = inClose[today]; +/* Generated */ i = optInTimePeriod-1; +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ else if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR += tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_DX,Dx) + 1; +/* Generated */ while( i-- != 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ prevMinusDM -= prevMinusDM/optInTimePeriod; +/* Generated */ prevPlusDM -= prevPlusDM/optInTimePeriod; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ else if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ if( !TA_IS_ZERO(prevTR) ) +/* Generated */ { +/* Generated */ minusDI = round_pos(100.0*(prevMinusDM/prevTR)); +/* Generated */ plusDI = round_pos(100.0*(prevPlusDM/prevTR)); +/* Generated */ tempReal = minusDI+plusDI; +/* Generated */ if( !TA_IS_ZERO(tempReal) ) +/* Generated */ outReal[0] = round_pos( 100.0 * (std_fabs(minusDI-plusDI)/tempReal) ); +/* Generated */ else +/* Generated */ outReal[0] = 0.0; +/* Generated */ } +/* Generated */ else +/* Generated */ outReal[0] = 0.0; +/* Generated */ outIdx = 1; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ prevMinusDM -= prevMinusDM/optInTimePeriod; +/* Generated */ prevPlusDM -= prevPlusDM/optInTimePeriod; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ else if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ if( !TA_IS_ZERO(prevTR)) +/* Generated */ { +/* Generated */ minusDI = round_pos(100.0*(prevMinusDM/prevTR)); +/* Generated */ plusDI = round_pos(100.0*(prevPlusDM/prevTR)); +/* Generated */ tempReal = minusDI+plusDI; +/* Generated */ if( !TA_IS_ZERO(tempReal)) +/* Generated */ outReal[outIdx] = round_pos( 100.0 * (std_fabs(minusDI-plusDI)/tempReal) ); +/* Generated */ else +/* Generated */ outReal[outIdx] = outReal[outIdx-1]; +/* Generated */ } +/* Generated */ else +/* Generated */ outReal[outIdx] = outReal[outIdx-1]; +/* Generated */ outIdx++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_EMA.c b/src/ta_func/ta_EMA.c new file mode 100644 index 000000000..c528b88e0 --- /dev/null +++ b/src/ta_func/ta_EMA.c @@ -0,0 +1,493 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::EmaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int emaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_EMA_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod - 1 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_EMA,Ema); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_EMA - Exponential Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Ema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_EMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Simply call the internal implementation of the EMA. */ + return FUNCTION_CALL(INT_EMA)( startIdx, endIdx, inReal, + optInTimePeriod, + PER_TO_K( optInTimePeriod ), + outBegIdx, outNBElement, outReal ); +} + +/* Internal implementation can be called from any other TA function. + * + * Faster because there is no parameter check, but it is a double + * edge sword. + * + * The optInK_1 and optInTimePeriod are usually tightly coupled: + * + * optInK_1 = 2 / (optInTimePeriod + 1). + * + * These values are going to be related by this equation 99.9% of the + * time... but there is some exception, this is why both must be provided. + * + * The macro PER_TO_K is equivalent to the above formula. + */ +#if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT) + enum class Core::RetCode Core::TA_INT_EMA( int startIdx, + int endIdx, + SubArray^ inReal, + int optInTimePeriod, + double optInK_1, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outReal ) +#elif defined( _MANAGED ) + enum class Core::RetCode Core::TA_INT_EMA( int startIdx, + int endIdx, + cli::array^ inReal, + int optInTimePeriod, + double optInK_1, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outReal ) +#elif defined( _JAVA ) +public RetCode TA_INT_EMA( int startIdx, + int endIdx, + INPUT_TYPE []inReal, + int optInTimePeriod, /* From 1 to TA_INTEGER_MAX */ + double optInK_1, /* Ratio for calculation of EMA. */ + MInteger outBegIdx, + MInteger outNBElement, + double []outReal ) + +#else +TA_RetCode TA_PREFIX(INT_EMA)( int startIdx, + int endIdx, + const INPUT_TYPE *inReal, + int optInTimePeriod, /* From 1 to TA_INTEGER_MAX */ + double optInK_1, /* Ratio for calculation of EMA. */ + int *outBegIdx, + int *outNBElement, + double *outReal ) +#endif +{ + double tempReal, prevMA; + int i, today, outIdx, lookbackTotal; + + /* Ususally, optInK_1 = 2 / (optInTimePeriod + 1), + * but sometime there is exception. This + * is why both value are parameters. + */ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = LOOKBACK_CALL(EMA)( optInTimePeriod ); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Do the EMA calculation using tight loops. */ + + /* The first EMA is calculated differently. It + * then become the seed for subsequent EMA. + * + * The algorithm for this seed vary widely. + * Only 3 are implemented here: + * + * TA_MA_CLASSIC: + * Use a simple MA of the first 'period'. + * This is the approach most widely documented. + * + * TA_MA_METASTOCK: + * Use first price bar value as a seed + * from the begining of all the available + * data. + * + * TA_MA_TRADESTATION: + * Use 4th price bar as a seed, except when + * period is 1 who use 2th price bar or something + * like that... (not an obvious one...). + */ + if( TA_GLOBALS_COMPATIBILITY == ENUM_VALUE(Compatibility,TA_COMPATIBILITY_DEFAULT,Default) ) + { + today = startIdx-lookbackTotal; + i = optInTimePeriod; + tempReal = 0.0; + while( i-- > 0 ) + tempReal += inReal[today++]; + + prevMA = tempReal / optInTimePeriod; + } + else + { + prevMA = inReal[0]; + today = 1; + + /* !!! Tradestation not supported yet. + case TA_MA_TRADESTATION: + prevMA = inReal[startIdx-1]; + if( optInTimePeriod == 1 ) + VALUE_HANDLE_DEREF(outBegIdx)_0 = 1; + else + VALUE_HANDLE_DEREF(outBegIdx)_0 = 3; + */ + } + + /* At this point, prevMA is the first EMA (the seed for + * the rest). + * 'today' keep track of where the processing is within the + * input. + */ + + /* Skip the unstable period. Do the processing + * but do not write it in the output. + */ + while( today <= startIdx ) + prevMA = ((inReal[today++]-prevMA)*optInK_1) + prevMA; + + /* Write the first value. */ + outReal[0] = prevMA; + outIdx = 1; + + /* Calculate the remaining range. */ + while( today <= endIdx ) + { + prevMA = ((inReal[today++]-prevMA)*optInK_1) + prevMA; + outReal[outIdx++] = prevMA; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_EMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ return FUNCTION_CALL(INT_EMA)( startIdx, endIdx, inReal, +/* Generated */ optInTimePeriod, +/* Generated */ PER_TO_K( optInTimePeriod ), +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ } +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ enum class Core::RetCode Core::TA_INT_EMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ double optInK_1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TA_INT_EMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ double optInK_1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode TA_INT_EMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ INPUT_TYPE []inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ double optInK_1, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double []outReal ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PREFIX(INT_EMA)( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const INPUT_TYPE *inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ double optInK_1, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double *outReal ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double tempReal, prevMA; +/* Generated */ int i, today, outIdx, lookbackTotal; +/* Generated */ lookbackTotal = LOOKBACK_CALL(EMA)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ if( TA_GLOBALS_COMPATIBILITY == ENUM_VALUE(Compatibility,TA_COMPATIBILITY_DEFAULT,Default) ) +/* Generated */ { +/* Generated */ today = startIdx-lookbackTotal; +/* Generated */ i = optInTimePeriod; +/* Generated */ tempReal = 0.0; +/* Generated */ while( i-- > 0 ) +/* Generated */ tempReal += inReal[today++]; +/* Generated */ prevMA = tempReal / optInTimePeriod; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevMA = inReal[0]; +/* Generated */ today = 1; +/* Generated */ } +/* Generated */ while( today <= startIdx ) +/* Generated */ prevMA = ((inReal[today++]-prevMA)*optInK_1) + prevMA; +/* Generated */ outReal[0] = prevMA; +/* Generated */ outIdx = 1; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ prevMA = ((inReal[today++]-prevMA)*optInK_1) + prevMA; +/* Generated */ outReal[outIdx++] = prevMA; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_EXP.c b/src/ta_func/ta_EXP.c new file mode 100644 index 000000000..3d8c4e51a --- /dev/null +++ b/src/ta_func/ta_EXP.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::ExpLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int expLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_EXP_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_EXP - Vector Arithmetic Exp + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Exp( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Exp( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode exp( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_EXP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_exp(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Exp( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode exp( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_EXP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_exp(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_FLOOR.c b/src/ta_func/ta_FLOOR.c new file mode 100644 index 000000000..d90110940 --- /dev/null +++ b/src/ta_func/ta_FLOOR.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::FloorLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int floorLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_FLOOR_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_FLOOR - Vector Floor + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Floor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Floor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode floor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_FLOOR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_floor(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Floor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode floor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_FLOOR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_floor(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_HT_DCPERIOD.c b/src/ta_func/ta_HT_DCPERIOD.c new file mode 100644 index 000000000..7bd66f128 --- /dev/null +++ b/src/ta_func/ta_HT_DCPERIOD.c @@ -0,0 +1,561 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::HtDcPeriodLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int htDcPeriodLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_HT_DCPERIOD_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* See TA_MAMA_Lookback for an explanation of these */ + return 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_DCPERIOD,HtDcPeriod); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_HT_DCPERIOD - Hilbert Transform - Dominant Cycle Period + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::HtDcPeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtDcPeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htDcPeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_HT_DCPERIOD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int outIdx, i; + int lookbackTotal, today; + double tempReal, tempReal2; + + double adjustedPrevPeriod, period; + + /* Variable used for the price smoother (a weighted moving average). */ + int trailingWMAIdx; + double periodWMASum, periodWMASub, trailingWMAValue; + double smoothedValue; + + /* Variables used for the Hilbert Transormation */ + CONSTANT_DOUBLE(a) = 0.0962; + CONSTANT_DOUBLE(b) = 0.5769; + double hilbertTempReal; + int hilbertIdx; + + HILBERT_VARIABLES( detrender ); + HILBERT_VARIABLES( Q1 ); + HILBERT_VARIABLES( jI ); + HILBERT_VARIABLES( jQ ); + + double Q2, I2, prevQ2, prevI2, Re, Im; + + double I1ForOddPrev2, I1ForOddPrev3; + double I1ForEvenPrev2, I1ForEvenPrev3; + + double rad2Deg; + + double todayValue, smoothPeriod; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Constant */ + rad2Deg = 180.0 / (4.0 * std_atan(1)); + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_DCPERIOD,HtDcPeriod); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Initialize the price smoother, which is simply a weighted + * moving average of the price. + * To understand this algorithm, I strongly suggest to understand + * first how TA_WMA is done. + */ + trailingWMAIdx = startIdx - lookbackTotal; + today = trailingWMAIdx; + + /* Initialization is same as WMA, except loop is unrolled + * for speed optimization. + */ + tempReal = inReal[today++]; + periodWMASub = tempReal; + periodWMASum = tempReal; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*2.0; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*3.0; + + trailingWMAValue = 0.0; + + /* Subsequent WMA value are evaluated by using + * the DO_PRICE_WMA macro. + */ + #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ + periodWMASub += varNewPrice; \ + periodWMASub -= trailingWMAValue; \ + periodWMASum += varNewPrice*4.0; \ + trailingWMAValue = inReal[trailingWMAIdx++]; \ + varToStoreSmoothedValue = periodWMASum*0.1; \ + periodWMASum -= periodWMASub; \ + } + + i = 9; + do + { + tempReal = inReal[today++]; + DO_PRICE_WMA(tempReal,smoothedValue); + } while( --i != 0); + + /* Initialize the circular buffers used by the hilbert + * transform logic. + * A buffer is used for odd day and another for even days. + * This minimize the number of memory access and floating point + * operations needed (note also that by using static circular buffer, + * no large dynamic memory allocation is needed for storing + * intermediate calculation!). + */ + hilbertIdx = 0; + + INIT_HILBERT_VARIABLES(detrender); + INIT_HILBERT_VARIABLES(Q1); + INIT_HILBERT_VARIABLES(jI); + INIT_HILBERT_VARIABLES(jQ); + + period = 0.0; + outIdx = 0; + + prevI2 = prevQ2 = 0.0; + Re = Im = 0.0; + I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; + I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; + smoothPeriod = 0.0; + + /* The code is speed optimized and is most likely very + * hard to follow if you do not already know well the + * original algorithm. + * To understadn better, it is strongly suggested to look + * first at the Excel implementation in "test_MAMA.xls" included + * in this package. + */ + while( today <= endIdx ) + { + adjustedPrevPeriod = (0.075*period)+0.54; + + todayValue = inReal[today]; + DO_PRICE_WMA(todayValue,smoothedValue); + + if( (today%2) == 0 ) + { + /* Do the Hilbert Transforms for even price bar */ + DO_HILBERT_EVEN(detrender,smoothedValue); + DO_HILBERT_EVEN(Q1,detrender); + DO_HILBERT_EVEN(jI,I1ForEvenPrev3); + DO_HILBERT_EVEN(jQ,Q1); + if( ++hilbertIdx == 3 ) + hilbertIdx = 0; + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); + + /* The variable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "odd" logic later. + */ + I1ForOddPrev3 = I1ForOddPrev2; + I1ForOddPrev2 = detrender; + } + else + { + /* Do the Hilbert Transforms for odd price bar */ + DO_HILBERT_ODD(detrender,smoothedValue); + DO_HILBERT_ODD(Q1,detrender); + DO_HILBERT_ODD(jI,I1ForOddPrev3); + DO_HILBERT_ODD(jQ,Q1); + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); + + /* The varaiable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "even" logic later. + */ + I1ForEvenPrev3 = I1ForEvenPrev2; + I1ForEvenPrev2 = detrender; + } + + /* Adjust the period for next price bar */ + Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); + Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); + prevQ2 = Q2; + prevI2 = I2; + tempReal = period; + if( (Im != 0.0) && (Re != 0.0) ) + period = 360.0 / (std_atan(Im/Re)*rad2Deg); + tempReal2 = 1.5*tempReal; + if( period > tempReal2) + period = tempReal2; + tempReal2 = 0.67*tempReal; + if( period < tempReal2 ) + period = tempReal2; + if( period < 6 ) + period = 6; + else if( period > 50 ) + period = 50; + period = (0.2*period) + (0.8 * tempReal); + + smoothPeriod = (0.33*period)+(0.67*smoothPeriod); + + if( today >= startIdx ) + { + outReal[outIdx++] = smoothPeriod; + } + + /* Ooof... let's do the next price bar now! */ + today++; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtDcPeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htDcPeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_HT_DCPERIOD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ int lookbackTotal, today; +/* Generated */ double tempReal, tempReal2; +/* Generated */ double adjustedPrevPeriod, period; +/* Generated */ int trailingWMAIdx; +/* Generated */ double periodWMASum, periodWMASub, trailingWMAValue; +/* Generated */ double smoothedValue; +/* Generated */ CONSTANT_DOUBLE(a) = 0.0962; +/* Generated */ CONSTANT_DOUBLE(b) = 0.5769; +/* Generated */ double hilbertTempReal; +/* Generated */ int hilbertIdx; +/* Generated */ HILBERT_VARIABLES( detrender ); +/* Generated */ HILBERT_VARIABLES( Q1 ); +/* Generated */ HILBERT_VARIABLES( jI ); +/* Generated */ HILBERT_VARIABLES( jQ ); +/* Generated */ double Q2, I2, prevQ2, prevI2, Re, Im; +/* Generated */ double I1ForOddPrev2, I1ForOddPrev3; +/* Generated */ double I1ForEvenPrev2, I1ForEvenPrev3; +/* Generated */ double rad2Deg; +/* Generated */ double todayValue, smoothPeriod; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ rad2Deg = 180.0 / (4.0 * std_atan(1)); +/* Generated */ lookbackTotal = 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_DCPERIOD,HtDcPeriod); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ trailingWMAIdx = startIdx - lookbackTotal; +/* Generated */ today = trailingWMAIdx; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub = tempReal; +/* Generated */ periodWMASum = tempReal; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*2.0; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*3.0; +/* Generated */ trailingWMAValue = 0.0; +/* Generated */ #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ +/* Generated */ periodWMASub += varNewPrice; \ +/* Generated */ periodWMASub -= trailingWMAValue; \ +/* Generated */ periodWMASum += varNewPrice*4.0; \ +/* Generated */ trailingWMAValue = inReal[trailingWMAIdx++]; \ +/* Generated */ varToStoreSmoothedValue = periodWMASum*0.1; \ +/* Generated */ periodWMASum -= periodWMASub; \ +/* Generated */ } +/* Generated */ i = 9; +/* Generated */ do +/* Generated */ { +/* Generated */ tempReal = inReal[today++]; +/* Generated */ DO_PRICE_WMA(tempReal,smoothedValue); +/* Generated */ } while( --i != 0); +/* Generated */ hilbertIdx = 0; +/* Generated */ INIT_HILBERT_VARIABLES(detrender); +/* Generated */ INIT_HILBERT_VARIABLES(Q1); +/* Generated */ INIT_HILBERT_VARIABLES(jI); +/* Generated */ INIT_HILBERT_VARIABLES(jQ); +/* Generated */ period = 0.0; +/* Generated */ outIdx = 0; +/* Generated */ prevI2 = prevQ2 = 0.0; +/* Generated */ Re = Im = 0.0; +/* Generated */ I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; +/* Generated */ I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; +/* Generated */ smoothPeriod = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ adjustedPrevPeriod = (0.075*period)+0.54; +/* Generated */ todayValue = inReal[today]; +/* Generated */ DO_PRICE_WMA(todayValue,smoothedValue); +/* Generated */ if( (today%2) == 0 ) +/* Generated */ { +/* Generated */ DO_HILBERT_EVEN(detrender,smoothedValue); +/* Generated */ DO_HILBERT_EVEN(Q1,detrender); +/* Generated */ DO_HILBERT_EVEN(jI,I1ForEvenPrev3); +/* Generated */ DO_HILBERT_EVEN(jQ,Q1); +/* Generated */ if( ++hilbertIdx == 3 ) +/* Generated */ hilbertIdx = 0; +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForOddPrev3 = I1ForOddPrev2; +/* Generated */ I1ForOddPrev2 = detrender; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ DO_HILBERT_ODD(detrender,smoothedValue); +/* Generated */ DO_HILBERT_ODD(Q1,detrender); +/* Generated */ DO_HILBERT_ODD(jI,I1ForOddPrev3); +/* Generated */ DO_HILBERT_ODD(jQ,Q1); +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForEvenPrev3 = I1ForEvenPrev2; +/* Generated */ I1ForEvenPrev2 = detrender; +/* Generated */ } +/* Generated */ Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); +/* Generated */ Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); +/* Generated */ prevQ2 = Q2; +/* Generated */ prevI2 = I2; +/* Generated */ tempReal = period; +/* Generated */ if( (Im != 0.0) && (Re != 0.0) ) +/* Generated */ period = 360.0 / (std_atan(Im/Re)*rad2Deg); +/* Generated */ tempReal2 = 1.5*tempReal; +/* Generated */ if( period > tempReal2) +/* Generated */ period = tempReal2; +/* Generated */ tempReal2 = 0.67*tempReal; +/* Generated */ if( period < tempReal2 ) +/* Generated */ period = tempReal2; +/* Generated */ if( period < 6 ) +/* Generated */ period = 6; +/* Generated */ else if( period > 50 ) +/* Generated */ period = 50; +/* Generated */ period = (0.2*period) + (0.8 * tempReal); +/* Generated */ smoothPeriod = (0.33*period)+(0.67*smoothPeriod); +/* Generated */ if( today >= startIdx ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = smoothPeriod; +/* Generated */ } +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_HT_DCPHASE.c b/src/ta_func/ta_HT_DCPHASE.c new file mode 100644 index 000000000..647833203 --- /dev/null +++ b/src/ta_func/ta_HT_DCPHASE.c @@ -0,0 +1,679 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::HtDcPhaseLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int htDcPhaseLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_HT_DCPHASE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* 31 input are skip + * +32 output are skip to account for misc lookback + * --- + * 63 Total Lookback + * + * 31 is for being compatible with Tradestation. + * See TA_MAMA_Lookback for an explanation of the "32". + */ + return 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_DCPHASE,HtDcPhase); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_HT_DCPHASE - Hilbert Transform - Dominant Cycle Phase + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::HtDcPhase( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtDcPhase( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htDcPhase( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_HT_DCPHASE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx, i; + int lookbackTotal, today; + double tempReal, tempReal2; + + double adjustedPrevPeriod, period; + + /* Variable used for the price smoother (a weighted moving average). */ + int trailingWMAIdx; + double periodWMASum, periodWMASub, trailingWMAValue; + double smoothedValue; + + /* Variables used for the Hilbert Transormation */ + CONSTANT_DOUBLE(a) = 0.0962; + CONSTANT_DOUBLE(b) = 0.5769; + double hilbertTempReal; + int hilbertIdx; + + HILBERT_VARIABLES( detrender ); + HILBERT_VARIABLES( Q1 ); + HILBERT_VARIABLES( jI ); + HILBERT_VARIABLES( jQ ); + + double Q2, I2, prevQ2, prevI2, Re, Im; + + double I1ForOddPrev2, I1ForOddPrev3; + double I1ForEvenPrev2, I1ForEvenPrev3; + + double rad2Deg, constDeg2RadBy360; + + double todayValue, smoothPeriod; + + /* Varaible used to keep track of the previous + * smooth price. In the case of this algorithm, + * we will never need more than 50 values. + */ + #define SMOOTH_PRICE_SIZE 50 + CIRCBUF_PROLOG(smoothPrice,double,SMOOTH_PRICE_SIZE); + int idx; + + /* Variable used to calculate the dominant cycle phase */ + int DCPeriodInt; + double DCPhase, DCPeriod, imagPart, realPart; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + CIRCBUF_INIT_LOCAL_ONLY(smoothPrice,double); + + /* Constant */ + tempReal = std_atan(1); + rad2Deg = 45.0/tempReal; + constDeg2RadBy360 = tempReal*8.0; + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_DCPHASE,HtDcPhase); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Initialize the price smoother, which is simply a weighted + * moving average of the price. + * To understand this algorithm, I strongly suggest to understand + * first how TA_WMA is done. + */ + trailingWMAIdx = startIdx - lookbackTotal; + today = trailingWMAIdx; + + /* Initialization is same as WMA, except loop is unrolled + * for speed optimization. + */ + tempReal = inReal[today++]; + periodWMASub = tempReal; + periodWMASum = tempReal; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*2.0; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*3.0; + + trailingWMAValue = 0.0; + + /* Subsequent WMA value are evaluated by using + * the DO_PRICE_WMA macro. + */ + #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ + periodWMASub += varNewPrice; \ + periodWMASub -= trailingWMAValue; \ + periodWMASum += varNewPrice*4.0; \ + trailingWMAValue = inReal[trailingWMAIdx++]; \ + varToStoreSmoothedValue = periodWMASum*0.1; \ + periodWMASum -= periodWMASub; \ + } + + i = 34; + do + { + tempReal = inReal[today++]; + DO_PRICE_WMA(tempReal,smoothedValue); + } while( --i != 0); + + /* Initialize the circular buffers used by the hilbert + * transform logic. + * A buffer is used for odd day and another for even days. + * This minimize the number of memory access and floating point + * operations needed (note also that by using static circular buffer, + * no large dynamic memory allocation is needed for storing + * intermediate calculation!). + */ + hilbertIdx = 0; + + INIT_HILBERT_VARIABLES(detrender); + INIT_HILBERT_VARIABLES(Q1); + INIT_HILBERT_VARIABLES(jI); + INIT_HILBERT_VARIABLES(jQ); + + period = 0.0; + outIdx = 0; + + prevI2 = prevQ2 = 0.0; + Re = Im = 0.0; + I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; + I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; + smoothPeriod = 0.0; + + for( i=0; i < SMOOTH_PRICE_SIZE; i++ ) + smoothPrice[i] = 0.0; + + /* The code is speed optimized and is most likely very + * hard to follow if you do not already know well the + * original algorithm. + * To understadn better, it is strongly suggested to look + * first at the Excel implementation in "test_MAMA.xls" included + * in this package. + */ + DCPhase = 0.0; + while( today <= endIdx ) + { + adjustedPrevPeriod = (0.075*period)+0.54; + + todayValue = inReal[today]; + DO_PRICE_WMA(todayValue,smoothedValue); + + /* Remember the smoothedValue into the smoothPrice + * circular buffer. + */ + smoothPrice[smoothPrice_Idx] = smoothedValue; + + if( (today%2) == 0 ) + { + /* Do the Hilbert Transforms for even price bar */ + DO_HILBERT_EVEN(detrender,smoothedValue); + DO_HILBERT_EVEN(Q1,detrender); + DO_HILBERT_EVEN(jI,I1ForEvenPrev3); + DO_HILBERT_EVEN(jQ,Q1); + if( ++hilbertIdx == 3 ) + hilbertIdx = 0; + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); + + /* The variable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "odd" logic later. + */ + I1ForOddPrev3 = I1ForOddPrev2; + I1ForOddPrev2 = detrender; + } + else + { + /* Do the Hilbert Transforms for odd price bar */ + DO_HILBERT_ODD(detrender,smoothedValue); + DO_HILBERT_ODD(Q1,detrender); + DO_HILBERT_ODD(jI,I1ForOddPrev3); + DO_HILBERT_ODD(jQ,Q1); + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); + + /* The varaiable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "even" logic later. + */ + I1ForEvenPrev3 = I1ForEvenPrev2; + I1ForEvenPrev2 = detrender; + } + + /* Adjust the period for next price bar */ + Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); + Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); + prevQ2 = Q2; + prevI2 = I2; + tempReal = period; + if( (Im != 0.0) && (Re != 0.0) ) + period = 360.0 / (std_atan(Im/Re)*rad2Deg); + tempReal2 = 1.5*tempReal; + if( period > tempReal2) + period = tempReal2; + tempReal2 = 0.67*tempReal; + if( period < tempReal2 ) + period = tempReal2; + if( period < 6 ) + period = 6; + else if( period > 50 ) + period = 50; + period = (0.2*period) + (0.8 * tempReal); + + smoothPeriod = (0.33*period)+(0.67*smoothPeriod); + + /* Compute Dominant Cycle Phase */ + DCPeriod = smoothPeriod+0.5; + DCPeriodInt = (int)DCPeriod; + realPart = 0.0; + imagPart = 0.0; + + /* idx is used to iterate for up to 50 of the last + * value of smoothPrice. + */ + idx = smoothPrice_Idx; + for( i=0; i < DCPeriodInt; i++ ) + { + tempReal = ((double)i*constDeg2RadBy360)/(double)DCPeriodInt; + tempReal2 = smoothPrice[idx]; + realPart += std_sin(tempReal)*tempReal2; + imagPart += std_cos(tempReal)*tempReal2; + if( idx == 0 ) + idx = SMOOTH_PRICE_SIZE-1; + else + idx--; + } + + tempReal = std_fabs(imagPart); + if( tempReal > 0.0 ) + DCPhase = std_atan(realPart/imagPart)*rad2Deg; + else if( tempReal <= 0.01 ) + { + if( realPart < 0.0 ) + DCPhase -= 90.0; + else if( realPart > 0.0 ) + DCPhase += 90.0; + } + DCPhase += 90.0; + + /* Compensate for one bar lag of the weighted moving average */ + DCPhase += 360.0 / smoothPeriod; + if( imagPart < 0.0 ) + DCPhase += 180.0; + if( DCPhase > 315.0 ) + DCPhase -= 360.0; + + if( today >= startIdx ) + { + outReal[outIdx++] = DCPhase; + } + + /* Ooof... let's do the next price bar now! */ + CIRCBUF_NEXT(smoothPrice); + today++; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtDcPhase( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htDcPhase( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_HT_DCPHASE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ int lookbackTotal, today; +/* Generated */ double tempReal, tempReal2; +/* Generated */ double adjustedPrevPeriod, period; +/* Generated */ int trailingWMAIdx; +/* Generated */ double periodWMASum, periodWMASub, trailingWMAValue; +/* Generated */ double smoothedValue; +/* Generated */ CONSTANT_DOUBLE(a) = 0.0962; +/* Generated */ CONSTANT_DOUBLE(b) = 0.5769; +/* Generated */ double hilbertTempReal; +/* Generated */ int hilbertIdx; +/* Generated */ HILBERT_VARIABLES( detrender ); +/* Generated */ HILBERT_VARIABLES( Q1 ); +/* Generated */ HILBERT_VARIABLES( jI ); +/* Generated */ HILBERT_VARIABLES( jQ ); +/* Generated */ double Q2, I2, prevQ2, prevI2, Re, Im; +/* Generated */ double I1ForOddPrev2, I1ForOddPrev3; +/* Generated */ double I1ForEvenPrev2, I1ForEvenPrev3; +/* Generated */ double rad2Deg, constDeg2RadBy360; +/* Generated */ double todayValue, smoothPeriod; +/* Generated */ #define SMOOTH_PRICE_SIZE 50 +/* Generated */ CIRCBUF_PROLOG(smoothPrice,double,SMOOTH_PRICE_SIZE); +/* Generated */ int idx; +/* Generated */ int DCPeriodInt; +/* Generated */ double DCPhase, DCPeriod, imagPart, realPart; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ CIRCBUF_INIT_LOCAL_ONLY(smoothPrice,double); +/* Generated */ tempReal = std_atan(1); +/* Generated */ rad2Deg = 45.0/tempReal; +/* Generated */ constDeg2RadBy360 = tempReal*8.0; +/* Generated */ lookbackTotal = 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_DCPHASE,HtDcPhase); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ trailingWMAIdx = startIdx - lookbackTotal; +/* Generated */ today = trailingWMAIdx; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub = tempReal; +/* Generated */ periodWMASum = tempReal; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*2.0; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*3.0; +/* Generated */ trailingWMAValue = 0.0; +/* Generated */ #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ +/* Generated */ periodWMASub += varNewPrice; \ +/* Generated */ periodWMASub -= trailingWMAValue; \ +/* Generated */ periodWMASum += varNewPrice*4.0; \ +/* Generated */ trailingWMAValue = inReal[trailingWMAIdx++]; \ +/* Generated */ varToStoreSmoothedValue = periodWMASum*0.1; \ +/* Generated */ periodWMASum -= periodWMASub; \ +/* Generated */ } +/* Generated */ i = 34; +/* Generated */ do +/* Generated */ { +/* Generated */ tempReal = inReal[today++]; +/* Generated */ DO_PRICE_WMA(tempReal,smoothedValue); +/* Generated */ } while( --i != 0); +/* Generated */ hilbertIdx = 0; +/* Generated */ INIT_HILBERT_VARIABLES(detrender); +/* Generated */ INIT_HILBERT_VARIABLES(Q1); +/* Generated */ INIT_HILBERT_VARIABLES(jI); +/* Generated */ INIT_HILBERT_VARIABLES(jQ); +/* Generated */ period = 0.0; +/* Generated */ outIdx = 0; +/* Generated */ prevI2 = prevQ2 = 0.0; +/* Generated */ Re = Im = 0.0; +/* Generated */ I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; +/* Generated */ I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; +/* Generated */ smoothPeriod = 0.0; +/* Generated */ for( i=0; i < SMOOTH_PRICE_SIZE; i++ ) +/* Generated */ smoothPrice[i] = 0.0; +/* Generated */ DCPhase = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ adjustedPrevPeriod = (0.075*period)+0.54; +/* Generated */ todayValue = inReal[today]; +/* Generated */ DO_PRICE_WMA(todayValue,smoothedValue); +/* Generated */ smoothPrice[smoothPrice_Idx] = smoothedValue; +/* Generated */ if( (today%2) == 0 ) +/* Generated */ { +/* Generated */ DO_HILBERT_EVEN(detrender,smoothedValue); +/* Generated */ DO_HILBERT_EVEN(Q1,detrender); +/* Generated */ DO_HILBERT_EVEN(jI,I1ForEvenPrev3); +/* Generated */ DO_HILBERT_EVEN(jQ,Q1); +/* Generated */ if( ++hilbertIdx == 3 ) +/* Generated */ hilbertIdx = 0; +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForOddPrev3 = I1ForOddPrev2; +/* Generated */ I1ForOddPrev2 = detrender; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ DO_HILBERT_ODD(detrender,smoothedValue); +/* Generated */ DO_HILBERT_ODD(Q1,detrender); +/* Generated */ DO_HILBERT_ODD(jI,I1ForOddPrev3); +/* Generated */ DO_HILBERT_ODD(jQ,Q1); +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForEvenPrev3 = I1ForEvenPrev2; +/* Generated */ I1ForEvenPrev2 = detrender; +/* Generated */ } +/* Generated */ Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); +/* Generated */ Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); +/* Generated */ prevQ2 = Q2; +/* Generated */ prevI2 = I2; +/* Generated */ tempReal = period; +/* Generated */ if( (Im != 0.0) && (Re != 0.0) ) +/* Generated */ period = 360.0 / (std_atan(Im/Re)*rad2Deg); +/* Generated */ tempReal2 = 1.5*tempReal; +/* Generated */ if( period > tempReal2) +/* Generated */ period = tempReal2; +/* Generated */ tempReal2 = 0.67*tempReal; +/* Generated */ if( period < tempReal2 ) +/* Generated */ period = tempReal2; +/* Generated */ if( period < 6 ) +/* Generated */ period = 6; +/* Generated */ else if( period > 50 ) +/* Generated */ period = 50; +/* Generated */ period = (0.2*period) + (0.8 * tempReal); +/* Generated */ smoothPeriod = (0.33*period)+(0.67*smoothPeriod); +/* Generated */ DCPeriod = smoothPeriod+0.5; +/* Generated */ DCPeriodInt = (int)DCPeriod; +/* Generated */ realPart = 0.0; +/* Generated */ imagPart = 0.0; +/* Generated */ idx = smoothPrice_Idx; +/* Generated */ for( i=0; i < DCPeriodInt; i++ ) +/* Generated */ { +/* Generated */ tempReal = ((double)i*constDeg2RadBy360)/(double)DCPeriodInt; +/* Generated */ tempReal2 = smoothPrice[idx]; +/* Generated */ realPart += std_sin(tempReal)*tempReal2; +/* Generated */ imagPart += std_cos(tempReal)*tempReal2; +/* Generated */ if( idx == 0 ) +/* Generated */ idx = SMOOTH_PRICE_SIZE-1; +/* Generated */ else +/* Generated */ idx--; +/* Generated */ } +/* Generated */ tempReal = std_fabs(imagPart); +/* Generated */ if( tempReal > 0.0 ) +/* Generated */ DCPhase = std_atan(realPart/imagPart)*rad2Deg; +/* Generated */ else if( tempReal <= 0.01 ) +/* Generated */ { +/* Generated */ if( realPart < 0.0 ) +/* Generated */ DCPhase -= 90.0; +/* Generated */ else if( realPart > 0.0 ) +/* Generated */ DCPhase += 90.0; +/* Generated */ } +/* Generated */ DCPhase += 90.0; +/* Generated */ DCPhase += 360.0 / smoothPeriod; +/* Generated */ if( imagPart < 0.0 ) +/* Generated */ DCPhase += 180.0; +/* Generated */ if( DCPhase > 315.0 ) +/* Generated */ DCPhase -= 360.0; +/* Generated */ if( today >= startIdx ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = DCPhase; +/* Generated */ } +/* Generated */ CIRCBUF_NEXT(smoothPrice); +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_HT_PHASOR.c b/src/ta_func/ta_HT_PHASOR.c new file mode 100644 index 000000000..ec56e824f --- /dev/null +++ b/src/ta_func/ta_HT_PHASOR.c @@ -0,0 +1,581 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::HtPhasorLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int htPhasorLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_HT_PHASOR_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* See TA_MAMA_Lookback for an explanation of these */ + return 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_PHASOR,HtPhasor); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_HT_PHASOR - Hilbert Transform - Phasor Components + * + * Input = double + * Output = double, double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::HtPhasor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInPhase, +/* Generated */ cli::array^ outQuadrature ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtPhasor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInPhase, +/* Generated */ cli::array^ outQuadrature ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htPhasor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outInPhase[], +/* Generated */ double outQuadrature[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_HT_PHASOR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outInPhase[], +/* Generated */ double outQuadrature[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int outIdx, i; + int lookbackTotal, today; + double tempReal, tempReal2; + + double adjustedPrevPeriod, period; + + /* Variable used for the price smoother (a weighted moving average). */ + int trailingWMAIdx; + double periodWMASum, periodWMASub, trailingWMAValue; + double smoothedValue; + + /* Variables used for the Hilbert Transormation */ + CONSTANT_DOUBLE(a) = 0.0962; + CONSTANT_DOUBLE(b) = 0.5769; + double hilbertTempReal; + int hilbertIdx; + + HILBERT_VARIABLES( detrender ); + HILBERT_VARIABLES( Q1 ); + HILBERT_VARIABLES( jI ); + HILBERT_VARIABLES( jQ ); + + double Q2, I2, prevQ2, prevI2, Re, Im; + + double I1ForOddPrev2, I1ForOddPrev3; + double I1ForEvenPrev2, I1ForEvenPrev3; + + double rad2Deg; + + double todayValue; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInPhase ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outQuadrature ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Constant */ + rad2Deg = 180.0 / (4.0 * std_atan(1)); + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_PHASOR,HtPhasor); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Initialize the price smoother, which is simply a weighted + * moving average of the price. + * To understand this algorithm, I strongly suggest to understand + * first how TA_WMA is done. + */ + trailingWMAIdx = startIdx - lookbackTotal; + today = trailingWMAIdx; + + /* Initialization is same as WMA, except loop is unrolled + * for speed optimization. + */ + tempReal = inReal[today++]; + periodWMASub = tempReal; + periodWMASum = tempReal; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*2.0; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*3.0; + + trailingWMAValue = 0.0; + + /* Subsequent WMA value are evaluated by using + * the DO_PRICE_WMA macro. + */ + #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ + periodWMASub += varNewPrice; \ + periodWMASub -= trailingWMAValue; \ + periodWMASum += varNewPrice*4.0; \ + trailingWMAValue = inReal[trailingWMAIdx++]; \ + varToStoreSmoothedValue = periodWMASum*0.1; \ + periodWMASum -= periodWMASub; \ + } + + i = 9; + do + { + tempReal = inReal[today++]; + DO_PRICE_WMA(tempReal,smoothedValue); + } while( --i != 0); + + /* Initialize the circular buffers used by the hilbert + * transform logic. + * A buffer is used for odd day and another for even days. + * This minimize the number of memory access and floating point + * operations needed (note also that by using static circular buffer, + * no large dynamic memory allocation is needed for storing + * intermediate calculation!). + */ + hilbertIdx = 0; + + INIT_HILBERT_VARIABLES(detrender); + INIT_HILBERT_VARIABLES(Q1); + INIT_HILBERT_VARIABLES(jI); + INIT_HILBERT_VARIABLES(jQ); + + period = 0.0; + outIdx = 0; + + prevI2 = prevQ2 = 0.0; + Re = Im = 0.0; + I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; + I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; + + /* The code is speed optimized and is most likely very + * hard to follow if you do not already know well the + * original algorithm. + * To understadn better, it is strongly suggested to look + * first at the Excel implementation in "test_MAMA.xls" included + * in this package. + */ + while( today <= endIdx ) + { + adjustedPrevPeriod = (0.075*period)+0.54; + + todayValue = inReal[today]; + DO_PRICE_WMA(todayValue,smoothedValue); + + if( (today%2) == 0 ) + { + /* Do the Hilbert Transforms for even price bar */ + DO_HILBERT_EVEN(detrender,smoothedValue); + DO_HILBERT_EVEN(Q1,detrender); + if( today >= startIdx ) + { + outQuadrature[outIdx] = Q1; + outInPhase[outIdx++] = I1ForEvenPrev3; + } + DO_HILBERT_EVEN(jI,I1ForEvenPrev3); + DO_HILBERT_EVEN(jQ,Q1); + if( ++hilbertIdx == 3 ) + hilbertIdx = 0; + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); + + /* The variable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "odd" logic later. + */ + I1ForOddPrev3 = I1ForOddPrev2; + I1ForOddPrev2 = detrender; + + } + else + { + /* Do the Hilbert Transforms for odd price bar */ + DO_HILBERT_ODD(detrender,smoothedValue); + DO_HILBERT_ODD(Q1,detrender); + if( today >= startIdx ) + { + outQuadrature[outIdx] = Q1; + outInPhase[outIdx++] = I1ForOddPrev3; + } + DO_HILBERT_ODD(jI,I1ForOddPrev3); + DO_HILBERT_ODD(jQ,Q1); + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); + + /* The varaiable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "even" logic later. + */ + I1ForEvenPrev3 = I1ForEvenPrev2; + I1ForEvenPrev2 = detrender; + } + + /* Adjust the period for next price bar */ + Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); + Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); + prevQ2 = Q2; + prevI2 = I2; + tempReal = period; + if( (Im != 0.0) && (Re != 0.0) ) + period = 360.0 / (std_atan(Im/Re)*rad2Deg); + tempReal2 = 1.5*tempReal; + if( period > tempReal2) + period = tempReal2; + tempReal2 = 0.67*tempReal; + if( period < tempReal2 ) + period = tempReal2; + if( period < 6 ) + period = 6; + else if( period > 50 ) + period = 50; + period = (0.2*period) + (0.8 * tempReal); + + /* Ooof... let's do the next price bar now! */ + today++; + } + + /* Default return values */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtPhasor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInPhase, +/* Generated */ cli::array^ outQuadrature ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htPhasor( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outInPhase[], +/* Generated */ double outQuadrature[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_HT_PHASOR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outInPhase[], +/* Generated */ double outQuadrature[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ int lookbackTotal, today; +/* Generated */ double tempReal, tempReal2; +/* Generated */ double adjustedPrevPeriod, period; +/* Generated */ int trailingWMAIdx; +/* Generated */ double periodWMASum, periodWMASub, trailingWMAValue; +/* Generated */ double smoothedValue; +/* Generated */ CONSTANT_DOUBLE(a) = 0.0962; +/* Generated */ CONSTANT_DOUBLE(b) = 0.5769; +/* Generated */ double hilbertTempReal; +/* Generated */ int hilbertIdx; +/* Generated */ HILBERT_VARIABLES( detrender ); +/* Generated */ HILBERT_VARIABLES( Q1 ); +/* Generated */ HILBERT_VARIABLES( jI ); +/* Generated */ HILBERT_VARIABLES( jQ ); +/* Generated */ double Q2, I2, prevQ2, prevI2, Re, Im; +/* Generated */ double I1ForOddPrev2, I1ForOddPrev3; +/* Generated */ double I1ForEvenPrev2, I1ForEvenPrev3; +/* Generated */ double rad2Deg; +/* Generated */ double todayValue; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInPhase ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outQuadrature ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ rad2Deg = 180.0 / (4.0 * std_atan(1)); +/* Generated */ lookbackTotal = 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_PHASOR,HtPhasor); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ trailingWMAIdx = startIdx - lookbackTotal; +/* Generated */ today = trailingWMAIdx; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub = tempReal; +/* Generated */ periodWMASum = tempReal; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*2.0; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*3.0; +/* Generated */ trailingWMAValue = 0.0; +/* Generated */ #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ +/* Generated */ periodWMASub += varNewPrice; \ +/* Generated */ periodWMASub -= trailingWMAValue; \ +/* Generated */ periodWMASum += varNewPrice*4.0; \ +/* Generated */ trailingWMAValue = inReal[trailingWMAIdx++]; \ +/* Generated */ varToStoreSmoothedValue = periodWMASum*0.1; \ +/* Generated */ periodWMASum -= periodWMASub; \ +/* Generated */ } +/* Generated */ i = 9; +/* Generated */ do +/* Generated */ { +/* Generated */ tempReal = inReal[today++]; +/* Generated */ DO_PRICE_WMA(tempReal,smoothedValue); +/* Generated */ } while( --i != 0); +/* Generated */ hilbertIdx = 0; +/* Generated */ INIT_HILBERT_VARIABLES(detrender); +/* Generated */ INIT_HILBERT_VARIABLES(Q1); +/* Generated */ INIT_HILBERT_VARIABLES(jI); +/* Generated */ INIT_HILBERT_VARIABLES(jQ); +/* Generated */ period = 0.0; +/* Generated */ outIdx = 0; +/* Generated */ prevI2 = prevQ2 = 0.0; +/* Generated */ Re = Im = 0.0; +/* Generated */ I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; +/* Generated */ I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ adjustedPrevPeriod = (0.075*period)+0.54; +/* Generated */ todayValue = inReal[today]; +/* Generated */ DO_PRICE_WMA(todayValue,smoothedValue); +/* Generated */ if( (today%2) == 0 ) +/* Generated */ { +/* Generated */ DO_HILBERT_EVEN(detrender,smoothedValue); +/* Generated */ DO_HILBERT_EVEN(Q1,detrender); +/* Generated */ if( today >= startIdx ) +/* Generated */ { +/* Generated */ outQuadrature[outIdx] = Q1; +/* Generated */ outInPhase[outIdx++] = I1ForEvenPrev3; +/* Generated */ } +/* Generated */ DO_HILBERT_EVEN(jI,I1ForEvenPrev3); +/* Generated */ DO_HILBERT_EVEN(jQ,Q1); +/* Generated */ if( ++hilbertIdx == 3 ) +/* Generated */ hilbertIdx = 0; +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForOddPrev3 = I1ForOddPrev2; +/* Generated */ I1ForOddPrev2 = detrender; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ DO_HILBERT_ODD(detrender,smoothedValue); +/* Generated */ DO_HILBERT_ODD(Q1,detrender); +/* Generated */ if( today >= startIdx ) +/* Generated */ { +/* Generated */ outQuadrature[outIdx] = Q1; +/* Generated */ outInPhase[outIdx++] = I1ForOddPrev3; +/* Generated */ } +/* Generated */ DO_HILBERT_ODD(jI,I1ForOddPrev3); +/* Generated */ DO_HILBERT_ODD(jQ,Q1); +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForEvenPrev3 = I1ForEvenPrev2; +/* Generated */ I1ForEvenPrev2 = detrender; +/* Generated */ } +/* Generated */ Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); +/* Generated */ Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); +/* Generated */ prevQ2 = Q2; +/* Generated */ prevI2 = I2; +/* Generated */ tempReal = period; +/* Generated */ if( (Im != 0.0) && (Re != 0.0) ) +/* Generated */ period = 360.0 / (std_atan(Im/Re)*rad2Deg); +/* Generated */ tempReal2 = 1.5*tempReal; +/* Generated */ if( period > tempReal2) +/* Generated */ period = tempReal2; +/* Generated */ tempReal2 = 0.67*tempReal; +/* Generated */ if( period < tempReal2 ) +/* Generated */ period = tempReal2; +/* Generated */ if( period < 6 ) +/* Generated */ period = 6; +/* Generated */ else if( period > 50 ) +/* Generated */ period = 50; +/* Generated */ period = (0.2*period) + (0.8 * tempReal); +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_HT_SINE.c b/src/ta_func/ta_HT_SINE.c new file mode 100644 index 000000000..109143ec4 --- /dev/null +++ b/src/ta_func/ta_HT_SINE.c @@ -0,0 +1,695 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::HtSineLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int htSineLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_HT_SINE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* 31 input are skip + * +32 output are skip to account for misc lookback + * --- + * 63 Total Lookback + * + * 31 is for being compatible with Tradestation. + * See TA_MAMA_Lookback for an explanation of the "32". + */ + return 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_SINE,HtSine); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_HT_SINE - Hilbert Transform - SineWave + * + * Input = double + * Output = double, double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::HtSine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outSine, +/* Generated */ cli::array^ outLeadSine ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtSine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outSine, +/* Generated */ cli::array^ outLeadSine ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htSine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outSine[], +/* Generated */ double outLeadSine[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_HT_SINE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outSine[], +/* Generated */ double outLeadSine[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx, i; + int lookbackTotal, today; + double tempReal, tempReal2; + + double adjustedPrevPeriod, period; + + /* Variable used for the price smoother (a weighted moving average). */ + int trailingWMAIdx; + double periodWMASum, periodWMASub, trailingWMAValue; + double smoothedValue; + + /* Variables used for the Hilbert Transormation */ + CONSTANT_DOUBLE(a) = 0.0962; + CONSTANT_DOUBLE(b) = 0.5769; + double hilbertTempReal; + int hilbertIdx; + + HILBERT_VARIABLES( detrender ); + HILBERT_VARIABLES( Q1 ); + HILBERT_VARIABLES( jI ); + HILBERT_VARIABLES( jQ ); + + double Q2, I2, prevQ2, prevI2, Re, Im; + + double I1ForOddPrev2, I1ForOddPrev3; + double I1ForEvenPrev2, I1ForEvenPrev3; + + double rad2Deg, deg2Rad, constDeg2RadBy360; + + double todayValue, smoothPeriod; + + /* Varaible used to keep track of the previous + * smooth price. In the case of this algorithm, + * we will never need more than 50 values. + */ + #define SMOOTH_PRICE_SIZE 50 + CIRCBUF_PROLOG(smoothPrice,double,SMOOTH_PRICE_SIZE); + int idx; + + /* Variable used to calculate the dominant cycle phase */ + int DCPeriodInt; + double DCPhase, DCPeriod, imagPart, realPart; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outSine ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outLeadSine ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + CIRCBUF_INIT_LOCAL_ONLY(smoothPrice,double); + + /* The following could be replaced by constant eventually. */ + tempReal = std_atan(1); + rad2Deg = 45.0/tempReal; + deg2Rad = 1.0/rad2Deg; + constDeg2RadBy360 = tempReal*8.0; + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_SINE,HtSine); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Initialize the price smoother, which is simply a weighted + * moving average of the price. + * To understand this algorithm, I strongly suggest to understand + * first how TA_WMA is done. + */ + trailingWMAIdx = startIdx - lookbackTotal; + today = trailingWMAIdx; + + /* Initialization is same as WMA, except loop is unrolled + * for speed optimization. + */ + tempReal = inReal[today++]; + periodWMASub = tempReal; + periodWMASum = tempReal; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*2.0; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*3.0; + + trailingWMAValue = 0.0; + + /* Subsequent WMA value are evaluated by using + * the DO_PRICE_WMA macro. + */ + #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ + periodWMASub += varNewPrice; \ + periodWMASub -= trailingWMAValue; \ + periodWMASum += varNewPrice*4.0; \ + trailingWMAValue = inReal[trailingWMAIdx++]; \ + varToStoreSmoothedValue = periodWMASum*0.1; \ + periodWMASum -= periodWMASub; \ + } + + i = 34; + do + { + tempReal = inReal[today++]; + DO_PRICE_WMA(tempReal,smoothedValue); + } while( --i != 0); + + /* Initialize the circular buffers used by the hilbert + * transform logic. + * A buffer is used for odd day and another for even days. + * This minimize the number of memory access and floating point + * operations needed (note also that by using static circular buffer, + * no large dynamic memory allocation is needed for storing + * intermediate calculation!). + */ + hilbertIdx = 0; + + INIT_HILBERT_VARIABLES(detrender); + INIT_HILBERT_VARIABLES(Q1); + INIT_HILBERT_VARIABLES(jI); + INIT_HILBERT_VARIABLES(jQ); + + period = 0.0; + outIdx = 0; + + prevI2 = prevQ2 = 0.0; + Re = Im = 0.0; + I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; + I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; + smoothPeriod = 0.0; + + for( i=0; i < SMOOTH_PRICE_SIZE; i++ ) + smoothPrice[i] = 0.0; + + /* The code is speed optimized and is most likely very + * hard to follow if you do not already know well the + * original algorithm. + * To understadn better, it is strongly suggested to look + * first at the Excel implementation in "test_MAMA.xls" included + * in this package. + */ + DCPhase = 0.0; + while( today <= endIdx ) + { + adjustedPrevPeriod = (0.075*period)+0.54; + + todayValue = inReal[today]; + DO_PRICE_WMA(todayValue,smoothedValue); + + /* Remember the smoothedValue into the smoothPrice + * circular buffer. + */ + smoothPrice[smoothPrice_Idx] = smoothedValue; + + if( (today%2) == 0 ) + { + /* Do the Hilbert Transforms for even price bar */ + DO_HILBERT_EVEN(detrender,smoothedValue); + DO_HILBERT_EVEN(Q1,detrender); + DO_HILBERT_EVEN(jI,I1ForEvenPrev3); + DO_HILBERT_EVEN(jQ,Q1); + if( ++hilbertIdx == 3 ) + hilbertIdx = 0; + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); + + /* The variable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "odd" logic later. + */ + I1ForOddPrev3 = I1ForOddPrev2; + I1ForOddPrev2 = detrender; + } + else + { + /* Do the Hilbert Transforms for odd price bar */ + DO_HILBERT_ODD(detrender,smoothedValue); + DO_HILBERT_ODD(Q1,detrender); + DO_HILBERT_ODD(jI,I1ForOddPrev3); + DO_HILBERT_ODD(jQ,Q1); + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); + + /* The varaiable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "even" logic later. + */ + I1ForEvenPrev3 = I1ForEvenPrev2; + I1ForEvenPrev2 = detrender; + } + + /* Adjust the period for next price bar */ + Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); + Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); + prevQ2 = Q2; + prevI2 = I2; + tempReal = period; + if( (Im != 0.0) && (Re != 0.0) ) + period = 360.0 / (std_atan(Im/Re)*rad2Deg); + tempReal2 = 1.5*tempReal; + if( period > tempReal2) + period = tempReal2; + tempReal2 = 0.67*tempReal; + if( period < tempReal2 ) + period = tempReal2; + if( period < 6 ) + period = 6; + else if( period > 50 ) + period = 50; + period = (0.2*period) + (0.8 * tempReal); + + smoothPeriod = (0.33*period)+(0.67*smoothPeriod); + + /* Compute Dominant Cycle Phase */ + DCPeriod = smoothPeriod+0.5; + DCPeriodInt = (int)DCPeriod; + realPart = 0.0; + imagPart = 0.0; + + /* idx is used to iterate for up to 50 of the last + * value of smoothPrice. + */ + idx = smoothPrice_Idx; + for( i=0; i < DCPeriodInt; i++ ) + { + tempReal = ((double)i*constDeg2RadBy360)/(double)DCPeriodInt; + tempReal2 = smoothPrice[idx]; + realPart += std_sin(tempReal)*tempReal2; + imagPart += std_cos(tempReal)*tempReal2; + if( idx == 0 ) + idx = SMOOTH_PRICE_SIZE-1; + else + idx--; + } + + tempReal = std_fabs(imagPart); + if( tempReal > 0.0 ) + DCPhase = std_atan(realPart/imagPart)*rad2Deg; + else if( tempReal <= 0.01 ) + { + if( realPart < 0.0 ) + DCPhase -= 90.0; + else if( realPart > 0.0 ) + DCPhase += 90.0; + } + DCPhase += 90.0; + + /* Compensate for one bar lag of the weighted moving average */ + DCPhase += 360.0 / smoothPeriod; + if( imagPart < 0.0 ) + DCPhase += 180.0; + if( DCPhase > 315.0 ) + DCPhase -= 360.0; + + if( today >= startIdx ) + { + outSine[outIdx] = std_sin(DCPhase*deg2Rad); + outLeadSine[outIdx++] = std_sin((DCPhase+45)*deg2Rad); + } + + /* Ooof... let's do the next price bar now! */ + CIRCBUF_NEXT(smoothPrice); + today++; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtSine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outSine, +/* Generated */ cli::array^ outLeadSine ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htSine( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outSine[], +/* Generated */ double outLeadSine[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_HT_SINE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outSine[], +/* Generated */ double outLeadSine[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ int lookbackTotal, today; +/* Generated */ double tempReal, tempReal2; +/* Generated */ double adjustedPrevPeriod, period; +/* Generated */ int trailingWMAIdx; +/* Generated */ double periodWMASum, periodWMASub, trailingWMAValue; +/* Generated */ double smoothedValue; +/* Generated */ CONSTANT_DOUBLE(a) = 0.0962; +/* Generated */ CONSTANT_DOUBLE(b) = 0.5769; +/* Generated */ double hilbertTempReal; +/* Generated */ int hilbertIdx; +/* Generated */ HILBERT_VARIABLES( detrender ); +/* Generated */ HILBERT_VARIABLES( Q1 ); +/* Generated */ HILBERT_VARIABLES( jI ); +/* Generated */ HILBERT_VARIABLES( jQ ); +/* Generated */ double Q2, I2, prevQ2, prevI2, Re, Im; +/* Generated */ double I1ForOddPrev2, I1ForOddPrev3; +/* Generated */ double I1ForEvenPrev2, I1ForEvenPrev3; +/* Generated */ double rad2Deg, deg2Rad, constDeg2RadBy360; +/* Generated */ double todayValue, smoothPeriod; +/* Generated */ #define SMOOTH_PRICE_SIZE 50 +/* Generated */ CIRCBUF_PROLOG(smoothPrice,double,SMOOTH_PRICE_SIZE); +/* Generated */ int idx; +/* Generated */ int DCPeriodInt; +/* Generated */ double DCPhase, DCPeriod, imagPart, realPart; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outSine ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outLeadSine ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ CIRCBUF_INIT_LOCAL_ONLY(smoothPrice,double); +/* Generated */ tempReal = std_atan(1); +/* Generated */ rad2Deg = 45.0/tempReal; +/* Generated */ deg2Rad = 1.0/rad2Deg; +/* Generated */ constDeg2RadBy360 = tempReal*8.0; +/* Generated */ lookbackTotal = 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_SINE,HtSine); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ trailingWMAIdx = startIdx - lookbackTotal; +/* Generated */ today = trailingWMAIdx; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub = tempReal; +/* Generated */ periodWMASum = tempReal; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*2.0; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*3.0; +/* Generated */ trailingWMAValue = 0.0; +/* Generated */ #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ +/* Generated */ periodWMASub += varNewPrice; \ +/* Generated */ periodWMASub -= trailingWMAValue; \ +/* Generated */ periodWMASum += varNewPrice*4.0; \ +/* Generated */ trailingWMAValue = inReal[trailingWMAIdx++]; \ +/* Generated */ varToStoreSmoothedValue = periodWMASum*0.1; \ +/* Generated */ periodWMASum -= periodWMASub; \ +/* Generated */ } +/* Generated */ i = 34; +/* Generated */ do +/* Generated */ { +/* Generated */ tempReal = inReal[today++]; +/* Generated */ DO_PRICE_WMA(tempReal,smoothedValue); +/* Generated */ } while( --i != 0); +/* Generated */ hilbertIdx = 0; +/* Generated */ INIT_HILBERT_VARIABLES(detrender); +/* Generated */ INIT_HILBERT_VARIABLES(Q1); +/* Generated */ INIT_HILBERT_VARIABLES(jI); +/* Generated */ INIT_HILBERT_VARIABLES(jQ); +/* Generated */ period = 0.0; +/* Generated */ outIdx = 0; +/* Generated */ prevI2 = prevQ2 = 0.0; +/* Generated */ Re = Im = 0.0; +/* Generated */ I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; +/* Generated */ I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; +/* Generated */ smoothPeriod = 0.0; +/* Generated */ for( i=0; i < SMOOTH_PRICE_SIZE; i++ ) +/* Generated */ smoothPrice[i] = 0.0; +/* Generated */ DCPhase = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ adjustedPrevPeriod = (0.075*period)+0.54; +/* Generated */ todayValue = inReal[today]; +/* Generated */ DO_PRICE_WMA(todayValue,smoothedValue); +/* Generated */ smoothPrice[smoothPrice_Idx] = smoothedValue; +/* Generated */ if( (today%2) == 0 ) +/* Generated */ { +/* Generated */ DO_HILBERT_EVEN(detrender,smoothedValue); +/* Generated */ DO_HILBERT_EVEN(Q1,detrender); +/* Generated */ DO_HILBERT_EVEN(jI,I1ForEvenPrev3); +/* Generated */ DO_HILBERT_EVEN(jQ,Q1); +/* Generated */ if( ++hilbertIdx == 3 ) +/* Generated */ hilbertIdx = 0; +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForOddPrev3 = I1ForOddPrev2; +/* Generated */ I1ForOddPrev2 = detrender; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ DO_HILBERT_ODD(detrender,smoothedValue); +/* Generated */ DO_HILBERT_ODD(Q1,detrender); +/* Generated */ DO_HILBERT_ODD(jI,I1ForOddPrev3); +/* Generated */ DO_HILBERT_ODD(jQ,Q1); +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForEvenPrev3 = I1ForEvenPrev2; +/* Generated */ I1ForEvenPrev2 = detrender; +/* Generated */ } +/* Generated */ Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); +/* Generated */ Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); +/* Generated */ prevQ2 = Q2; +/* Generated */ prevI2 = I2; +/* Generated */ tempReal = period; +/* Generated */ if( (Im != 0.0) && (Re != 0.0) ) +/* Generated */ period = 360.0 / (std_atan(Im/Re)*rad2Deg); +/* Generated */ tempReal2 = 1.5*tempReal; +/* Generated */ if( period > tempReal2) +/* Generated */ period = tempReal2; +/* Generated */ tempReal2 = 0.67*tempReal; +/* Generated */ if( period < tempReal2 ) +/* Generated */ period = tempReal2; +/* Generated */ if( period < 6 ) +/* Generated */ period = 6; +/* Generated */ else if( period > 50 ) +/* Generated */ period = 50; +/* Generated */ period = (0.2*period) + (0.8 * tempReal); +/* Generated */ smoothPeriod = (0.33*period)+(0.67*smoothPeriod); +/* Generated */ DCPeriod = smoothPeriod+0.5; +/* Generated */ DCPeriodInt = (int)DCPeriod; +/* Generated */ realPart = 0.0; +/* Generated */ imagPart = 0.0; +/* Generated */ idx = smoothPrice_Idx; +/* Generated */ for( i=0; i < DCPeriodInt; i++ ) +/* Generated */ { +/* Generated */ tempReal = ((double)i*constDeg2RadBy360)/(double)DCPeriodInt; +/* Generated */ tempReal2 = smoothPrice[idx]; +/* Generated */ realPart += std_sin(tempReal)*tempReal2; +/* Generated */ imagPart += std_cos(tempReal)*tempReal2; +/* Generated */ if( idx == 0 ) +/* Generated */ idx = SMOOTH_PRICE_SIZE-1; +/* Generated */ else +/* Generated */ idx--; +/* Generated */ } +/* Generated */ tempReal = std_fabs(imagPart); +/* Generated */ if( tempReal > 0.0 ) +/* Generated */ DCPhase = std_atan(realPart/imagPart)*rad2Deg; +/* Generated */ else if( tempReal <= 0.01 ) +/* Generated */ { +/* Generated */ if( realPart < 0.0 ) +/* Generated */ DCPhase -= 90.0; +/* Generated */ else if( realPart > 0.0 ) +/* Generated */ DCPhase += 90.0; +/* Generated */ } +/* Generated */ DCPhase += 90.0; +/* Generated */ DCPhase += 360.0 / smoothPeriod; +/* Generated */ if( imagPart < 0.0 ) +/* Generated */ DCPhase += 180.0; +/* Generated */ if( DCPhase > 315.0 ) +/* Generated */ DCPhase -= 360.0; +/* Generated */ if( today >= startIdx ) +/* Generated */ { +/* Generated */ outSine[outIdx] = std_sin(DCPhase*deg2Rad); +/* Generated */ outLeadSine[outIdx++] = std_sin((DCPhase+45)*deg2Rad); +/* Generated */ } +/* Generated */ CIRCBUF_NEXT(smoothPrice); +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_HT_TRENDLINE.c b/src/ta_func/ta_HT_TRENDLINE.c new file mode 100644 index 000000000..a70903f68 --- /dev/null +++ b/src/ta_func/ta_HT_TRENDLINE.c @@ -0,0 +1,641 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::HtTrendlineLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int htTrendlineLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_HT_TRENDLINE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* 31 input are skip + * +32 output are skip to account for misc lookback + * --- + * 63 Total Lookback + * + * 31 is for being compatible with Tradestation. + * See TA_MAMA_Lookback for an explanation of the "32". + */ + return 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_TRENDLINE,HtTrendline); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_HT_TRENDLINE - Hilbert Transform - Instantaneous Trendline + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::HtTrendline( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtTrendline( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htTrendline( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_HT_TRENDLINE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx, i; + int lookbackTotal, today; + double tempReal, tempReal2; + + double adjustedPrevPeriod, period; + + /* Variable used for the price smoother (a weighted moving average). */ + int trailingWMAIdx; + double periodWMASum, periodWMASub, trailingWMAValue; + double smoothedValue; + + /* Variable to keep track of the last 3 ITrend */ + double iTrend1, iTrend2, iTrend3; + + /* Variables used for the Hilbert Transormation */ + CONSTANT_DOUBLE(a) = 0.0962; + CONSTANT_DOUBLE(b) = 0.5769; + double hilbertTempReal; + int hilbertIdx; + + HILBERT_VARIABLES( detrender ); + HILBERT_VARIABLES( Q1 ); + HILBERT_VARIABLES( jI ); + HILBERT_VARIABLES( jQ ); + + double Q2, I2, prevQ2, prevI2, Re, Im; + + double I1ForOddPrev2, I1ForOddPrev3; + double I1ForEvenPrev2, I1ForEvenPrev3; + + double rad2Deg; + + double todayValue, smoothPeriod; + + /* Variable used to keep track of the previous + * smooth price. In the case of this algorithm, + * we will never need more than 50 values. + */ + #define SMOOTH_PRICE_SIZE 50 + CIRCBUF_PROLOG(smoothPrice,double,SMOOTH_PRICE_SIZE); + int idx; + + /* Variable used to calculate the dominant cycle phase */ + int DCPeriodInt; + double DCPeriod; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + CIRCBUF_INIT_LOCAL_ONLY(smoothPrice,double); + + iTrend1 = iTrend2 = iTrend3 = 0.0; + + /* Constant */ + tempReal = std_atan(1); + rad2Deg = 45.0/tempReal; + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_TRENDLINE,HtTrendline); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Initialize the price smoother, which is simply a weighted + * moving average of the price. + * To understand this algorithm, I strongly suggest to understand + * first how TA_WMA is done. + */ + trailingWMAIdx = startIdx - lookbackTotal; + today = trailingWMAIdx; + + /* Initialization is same as WMA, except loop is unrolled + * for speed optimization. + */ + tempReal = inReal[today++]; + periodWMASub = tempReal; + periodWMASum = tempReal; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*2.0; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*3.0; + + trailingWMAValue = 0.0; + + /* Subsequent WMA value are evaluated by using + * the DO_PRICE_WMA macro. + */ + #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ + periodWMASub += varNewPrice; \ + periodWMASub -= trailingWMAValue; \ + periodWMASum += varNewPrice*4.0; \ + trailingWMAValue = inReal[trailingWMAIdx++]; \ + varToStoreSmoothedValue = periodWMASum*0.1; \ + periodWMASum -= periodWMASub; \ + } + + i = 34; + do + { + tempReal = inReal[today++]; + DO_PRICE_WMA(tempReal,smoothedValue); + } while( --i != 0); + + /* Initialize the circular buffers used by the hilbert + * transform logic. + * A buffer is used for odd day and another for even days. + * This minimize the number of memory access and floating point + * operations needed (note also that by using static circular buffer, + * no large dynamic memory allocation is needed for storing + * intermediate calculation!). + */ + hilbertIdx = 0; + + INIT_HILBERT_VARIABLES(detrender); + INIT_HILBERT_VARIABLES(Q1); + INIT_HILBERT_VARIABLES(jI); + INIT_HILBERT_VARIABLES(jQ); + + period = 0.0; + outIdx = 0; + + prevI2 = prevQ2 = 0.0; + Re = Im = 0.0; + I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; + I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; + smoothPeriod = 0.0; + + for( i=0; i < SMOOTH_PRICE_SIZE; i++ ) + smoothPrice[i] = 0.0; + + /* The code is speed optimized and is most likely very + * hard to follow if you do not already know well the + * original algorithm. + * To understadn better, it is strongly suggested to look + * first at the Excel implementation in "test_MAMA.xls" included + * in this package. + */ + while( today <= endIdx ) + { + adjustedPrevPeriod = (0.075*period)+0.54; + + todayValue = inReal[today]; + DO_PRICE_WMA(todayValue,smoothedValue); + + /* Remember the smoothedValue into the smoothPrice + * circular buffer. + */ + smoothPrice[smoothPrice_Idx] = smoothedValue; + + if( (today%2) == 0 ) + { + /* Do the Hilbert Transforms for even price bar */ + DO_HILBERT_EVEN(detrender,smoothedValue); + DO_HILBERT_EVEN(Q1,detrender); + DO_HILBERT_EVEN(jI,I1ForEvenPrev3); + DO_HILBERT_EVEN(jQ,Q1); + if( ++hilbertIdx == 3 ) + hilbertIdx = 0; + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); + + /* The variable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "odd" logic later. + */ + I1ForOddPrev3 = I1ForOddPrev2; + I1ForOddPrev2 = detrender; + } + else + { + /* Do the Hilbert Transforms for odd price bar */ + DO_HILBERT_ODD(detrender,smoothedValue); + DO_HILBERT_ODD(Q1,detrender); + DO_HILBERT_ODD(jI,I1ForOddPrev3); + DO_HILBERT_ODD(jQ,Q1); + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); + + /* The varaiable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "even" logic later. + */ + I1ForEvenPrev3 = I1ForEvenPrev2; + I1ForEvenPrev2 = detrender; + } + + /* Adjust the period for next price bar */ + Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); + Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); + prevQ2 = Q2; + prevI2 = I2; + tempReal = period; + if( (Im != 0.0) && (Re != 0.0) ) + period = 360.0 / (std_atan(Im/Re)*rad2Deg); + tempReal2 = 1.5*tempReal; + if( period > tempReal2) + period = tempReal2; + tempReal2 = 0.67*tempReal; + if( period < tempReal2 ) + period = tempReal2; + if( period < 6 ) + period = 6; + else if( period > 50 ) + period = 50; + period = (0.2*period) + (0.8 * tempReal); + + smoothPeriod = (0.33*period)+(0.67*smoothPeriod); + + /* Compute Trendline */ + DCPeriod = smoothPeriod+0.5; + DCPeriodInt = (int)DCPeriod; + + /* idx is used to iterate for up to 50 of the last + * value of smoothPrice. + */ + idx = today; + tempReal = 0.0; + for( i=0; i < DCPeriodInt; i++ ) + tempReal += inReal[idx--]; + + if( DCPeriodInt > 0 ) + tempReal = tempReal/(double)DCPeriodInt; + + tempReal2 = (4.0*tempReal + 3.0*iTrend1 + 2.0*iTrend2 + iTrend3) / 10.0; + iTrend3 = iTrend2; + iTrend2 = iTrend1; + iTrend1 = tempReal; + + if( today >= startIdx ) + { + outReal[outIdx++] = tempReal2; + } + + /* Ooof... let's do the next price bar now! */ + CIRCBUF_NEXT(smoothPrice); + today++; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtTrendline( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htTrendline( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_HT_TRENDLINE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ int lookbackTotal, today; +/* Generated */ double tempReal, tempReal2; +/* Generated */ double adjustedPrevPeriod, period; +/* Generated */ int trailingWMAIdx; +/* Generated */ double periodWMASum, periodWMASub, trailingWMAValue; +/* Generated */ double smoothedValue; +/* Generated */ double iTrend1, iTrend2, iTrend3; +/* Generated */ CONSTANT_DOUBLE(a) = 0.0962; +/* Generated */ CONSTANT_DOUBLE(b) = 0.5769; +/* Generated */ double hilbertTempReal; +/* Generated */ int hilbertIdx; +/* Generated */ HILBERT_VARIABLES( detrender ); +/* Generated */ HILBERT_VARIABLES( Q1 ); +/* Generated */ HILBERT_VARIABLES( jI ); +/* Generated */ HILBERT_VARIABLES( jQ ); +/* Generated */ double Q2, I2, prevQ2, prevI2, Re, Im; +/* Generated */ double I1ForOddPrev2, I1ForOddPrev3; +/* Generated */ double I1ForEvenPrev2, I1ForEvenPrev3; +/* Generated */ double rad2Deg; +/* Generated */ double todayValue, smoothPeriod; +/* Generated */ #define SMOOTH_PRICE_SIZE 50 +/* Generated */ CIRCBUF_PROLOG(smoothPrice,double,SMOOTH_PRICE_SIZE); +/* Generated */ int idx; +/* Generated */ int DCPeriodInt; +/* Generated */ double DCPeriod; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ CIRCBUF_INIT_LOCAL_ONLY(smoothPrice,double); +/* Generated */ iTrend1 = iTrend2 = iTrend3 = 0.0; +/* Generated */ tempReal = std_atan(1); +/* Generated */ rad2Deg = 45.0/tempReal; +/* Generated */ lookbackTotal = 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_TRENDLINE,HtTrendline); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ trailingWMAIdx = startIdx - lookbackTotal; +/* Generated */ today = trailingWMAIdx; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub = tempReal; +/* Generated */ periodWMASum = tempReal; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*2.0; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*3.0; +/* Generated */ trailingWMAValue = 0.0; +/* Generated */ #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ +/* Generated */ periodWMASub += varNewPrice; \ +/* Generated */ periodWMASub -= trailingWMAValue; \ +/* Generated */ periodWMASum += varNewPrice*4.0; \ +/* Generated */ trailingWMAValue = inReal[trailingWMAIdx++]; \ +/* Generated */ varToStoreSmoothedValue = periodWMASum*0.1; \ +/* Generated */ periodWMASum -= periodWMASub; \ +/* Generated */ } +/* Generated */ i = 34; +/* Generated */ do +/* Generated */ { +/* Generated */ tempReal = inReal[today++]; +/* Generated */ DO_PRICE_WMA(tempReal,smoothedValue); +/* Generated */ } while( --i != 0); +/* Generated */ hilbertIdx = 0; +/* Generated */ INIT_HILBERT_VARIABLES(detrender); +/* Generated */ INIT_HILBERT_VARIABLES(Q1); +/* Generated */ INIT_HILBERT_VARIABLES(jI); +/* Generated */ INIT_HILBERT_VARIABLES(jQ); +/* Generated */ period = 0.0; +/* Generated */ outIdx = 0; +/* Generated */ prevI2 = prevQ2 = 0.0; +/* Generated */ Re = Im = 0.0; +/* Generated */ I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; +/* Generated */ I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; +/* Generated */ smoothPeriod = 0.0; +/* Generated */ for( i=0; i < SMOOTH_PRICE_SIZE; i++ ) +/* Generated */ smoothPrice[i] = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ adjustedPrevPeriod = (0.075*period)+0.54; +/* Generated */ todayValue = inReal[today]; +/* Generated */ DO_PRICE_WMA(todayValue,smoothedValue); +/* Generated */ smoothPrice[smoothPrice_Idx] = smoothedValue; +/* Generated */ if( (today%2) == 0 ) +/* Generated */ { +/* Generated */ DO_HILBERT_EVEN(detrender,smoothedValue); +/* Generated */ DO_HILBERT_EVEN(Q1,detrender); +/* Generated */ DO_HILBERT_EVEN(jI,I1ForEvenPrev3); +/* Generated */ DO_HILBERT_EVEN(jQ,Q1); +/* Generated */ if( ++hilbertIdx == 3 ) +/* Generated */ hilbertIdx = 0; +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForOddPrev3 = I1ForOddPrev2; +/* Generated */ I1ForOddPrev2 = detrender; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ DO_HILBERT_ODD(detrender,smoothedValue); +/* Generated */ DO_HILBERT_ODD(Q1,detrender); +/* Generated */ DO_HILBERT_ODD(jI,I1ForOddPrev3); +/* Generated */ DO_HILBERT_ODD(jQ,Q1); +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForEvenPrev3 = I1ForEvenPrev2; +/* Generated */ I1ForEvenPrev2 = detrender; +/* Generated */ } +/* Generated */ Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); +/* Generated */ Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); +/* Generated */ prevQ2 = Q2; +/* Generated */ prevI2 = I2; +/* Generated */ tempReal = period; +/* Generated */ if( (Im != 0.0) && (Re != 0.0) ) +/* Generated */ period = 360.0 / (std_atan(Im/Re)*rad2Deg); +/* Generated */ tempReal2 = 1.5*tempReal; +/* Generated */ if( period > tempReal2) +/* Generated */ period = tempReal2; +/* Generated */ tempReal2 = 0.67*tempReal; +/* Generated */ if( period < tempReal2 ) +/* Generated */ period = tempReal2; +/* Generated */ if( period < 6 ) +/* Generated */ period = 6; +/* Generated */ else if( period > 50 ) +/* Generated */ period = 50; +/* Generated */ period = (0.2*period) + (0.8 * tempReal); +/* Generated */ smoothPeriod = (0.33*period)+(0.67*smoothPeriod); +/* Generated */ DCPeriod = smoothPeriod+0.5; +/* Generated */ DCPeriodInt = (int)DCPeriod; +/* Generated */ idx = today; +/* Generated */ tempReal = 0.0; +/* Generated */ for( i=0; i < DCPeriodInt; i++ ) +/* Generated */ tempReal += inReal[idx--]; +/* Generated */ if( DCPeriodInt > 0 ) +/* Generated */ tempReal = tempReal/(double)DCPeriodInt; +/* Generated */ tempReal2 = (4.0*tempReal + 3.0*iTrend1 + 2.0*iTrend2 + iTrend3) / 10.0; +/* Generated */ iTrend3 = iTrend2; +/* Generated */ iTrend2 = iTrend1; +/* Generated */ iTrend1 = tempReal; +/* Generated */ if( today >= startIdx ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = tempReal2; +/* Generated */ } +/* Generated */ CIRCBUF_NEXT(smoothPrice); +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_HT_TRENDMODE.c b/src/ta_func/ta_HT_TRENDMODE.c new file mode 100644 index 000000000..cbceb127b --- /dev/null +++ b/src/ta_func/ta_HT_TRENDMODE.c @@ -0,0 +1,794 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::HtTrendModeLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int htTrendModeLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_HT_TRENDMODE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* 31 input are skip + * +32 output are skip to account for misc lookback + * --- + * 63 Total Lookback + * + * 31 is for being compatible with Tradestation. + * See TA_MAMA_Lookback for an explanation of the "32". + */ + return 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_TRENDMODE,HtTrendMode); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_HT_TRENDMODE - Hilbert Transform - Trend vs Cycle Mode + * + * Input = double + * Output = int + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::HtTrendMode( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtTrendMode( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htTrendMode( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_HT_TRENDMODE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx, i; + int lookbackTotal, today; + double tempReal, tempReal2; + + double adjustedPrevPeriod, period; + + /* Variable used for the price smoother (a weighted moving average). */ + int trailingWMAIdx; + double periodWMASum, periodWMASub, trailingWMAValue; + double smoothedValue; + + /* Variable to keep track of the last 3 ITrend */ + double iTrend1, iTrend2, iTrend3; + + /* Variables used for the Hilbert Transormation */ + CONSTANT_DOUBLE(a) = 0.0962; + CONSTANT_DOUBLE(b) = 0.5769; + double hilbertTempReal; + int hilbertIdx; + + HILBERT_VARIABLES( detrender ); + HILBERT_VARIABLES( Q1 ); + HILBERT_VARIABLES( jI ); + HILBERT_VARIABLES( jQ ); + + double Q2, I2, prevQ2, prevI2, Re, Im; + + double I1ForOddPrev2, I1ForOddPrev3; + double I1ForEvenPrev2, I1ForEvenPrev3; + + double rad2Deg, deg2Rad, constDeg2RadBy360; + + double todayValue, smoothPeriod; + + /* Variable used to keep track of the previous + * smooth price. In the case of this algorithm, + * we will never need more than 50 values. + */ + #define SMOOTH_PRICE_SIZE 50 + CIRCBUF_PROLOG(smoothPrice,double,SMOOTH_PRICE_SIZE); + int idx; + + /* Variable used to calculate the dominant cycle phase */ + int DCPeriodInt; + double DCPhase, DCPeriod, imagPart, realPart; + + /* Variable used to calculate the trend mode */ + int daysInTrend, trend; + double prevDCPhase, trendline; + double prevSine, prevLeadSine, sine, leadSine; + + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + CIRCBUF_INIT_LOCAL_ONLY(smoothPrice,double); + + iTrend1 = iTrend2 = iTrend3 = 0.0; + daysInTrend = 0; + prevDCPhase = DCPhase = 0.0; + prevSine = sine = 0.0; + prevLeadSine = leadSine = 0.0; + + /* The following could be replaced by constant eventually. */ + tempReal = std_atan(1); + rad2Deg = 45.0/tempReal; + deg2Rad = 1.0/rad2Deg; + constDeg2RadBy360 = tempReal*8.0; + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_TRENDMODE,HtTrendMode); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Initialize the price smoother, which is simply a weighted + * moving average of the price. + * To understand this algorithm, I strongly suggest to understand + * first how TA_WMA is done. + */ + trailingWMAIdx = startIdx - lookbackTotal; + today = trailingWMAIdx; + + /* Initialization is same as WMA, except loop is unrolled + * for speed optimization. + */ + tempReal = inReal[today++]; + periodWMASub = tempReal; + periodWMASum = tempReal; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*2.0; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*3.0; + + trailingWMAValue = 0.0; + + /* Subsequent WMA value are evaluated by using + * the DO_PRICE_WMA macro. + */ + #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ + periodWMASub += varNewPrice; \ + periodWMASub -= trailingWMAValue; \ + periodWMASum += varNewPrice*4.0; \ + trailingWMAValue = inReal[trailingWMAIdx++]; \ + varToStoreSmoothedValue = periodWMASum*0.1; \ + periodWMASum -= periodWMASub; \ + } + + i = 34; + do + { + tempReal = inReal[today++]; + DO_PRICE_WMA(tempReal,smoothedValue); + } while( --i != 0); + + /* Initialize the circular buffers used by the hilbert + * transform logic. + * A buffer is used for odd day and another for even days. + * This minimize the number of memory access and floating point + * operations needed (note also that by using static circular buffer, + * no large dynamic memory allocation is needed for storing + * intermediate calculation!). + */ + hilbertIdx = 0; + + INIT_HILBERT_VARIABLES(detrender); + INIT_HILBERT_VARIABLES(Q1); + INIT_HILBERT_VARIABLES(jI); + INIT_HILBERT_VARIABLES(jQ); + + period = 0.0; + outIdx = 0; + + prevI2 = prevQ2 = 0.0; + Re = Im = 0.0; + I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; + I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; + smoothPeriod = 0.0; + + for( i=0; i < SMOOTH_PRICE_SIZE; i++ ) + smoothPrice[i] = 0.0; + + /* The code is speed optimized and is most likely very + * hard to follow if you do not already know well the + * original algorithm. + * To understadn better, it is strongly suggested to look + * first at the Excel implementation in "test_MAMA.xls" included + * in this package. + */ + DCPhase = 0.0; + while( today <= endIdx ) + { + adjustedPrevPeriod = (0.075*period)+0.54; + + todayValue = inReal[today]; + DO_PRICE_WMA(todayValue,smoothedValue); + + /* Remember the smoothedValue into the smoothPrice + * circular buffer. + */ + smoothPrice[smoothPrice_Idx] = smoothedValue; + + if( (today%2) == 0 ) + { + /* Do the Hilbert Transforms for even price bar */ + DO_HILBERT_EVEN(detrender,smoothedValue); + DO_HILBERT_EVEN(Q1,detrender); + DO_HILBERT_EVEN(jI,I1ForEvenPrev3); + DO_HILBERT_EVEN(jQ,Q1); + if( ++hilbertIdx == 3 ) + hilbertIdx = 0; + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); + + /* The variable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "odd" logic later. + */ + I1ForOddPrev3 = I1ForOddPrev2; + I1ForOddPrev2 = detrender; + } + else + { + /* Do the Hilbert Transforms for odd price bar */ + DO_HILBERT_ODD(detrender,smoothedValue); + DO_HILBERT_ODD(Q1,detrender); + DO_HILBERT_ODD(jI,I1ForOddPrev3); + DO_HILBERT_ODD(jQ,Q1); + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); + + /* The varaiable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "even" logic later. + */ + I1ForEvenPrev3 = I1ForEvenPrev2; + I1ForEvenPrev2 = detrender; + } + + /* Adjust the period for next price bar */ + Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); + Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); + prevQ2 = Q2; + prevI2 = I2; + tempReal = period; + if( (Im != 0.0) && (Re != 0.0) ) + period = 360.0 / (std_atan(Im/Re)*rad2Deg); + tempReal2 = 1.5*tempReal; + if( period > tempReal2) + period = tempReal2; + tempReal2 = 0.67*tempReal; + if( period < tempReal2 ) + period = tempReal2; + if( period < 6 ) + period = 6; + else if( period > 50 ) + period = 50; + period = (0.2*period) + (0.8 * tempReal); + + smoothPeriod = (0.33*period)+(0.67*smoothPeriod); + + /* Compute Dominant Cycle Phase */ + prevDCPhase = DCPhase; + DCPeriod = smoothPeriod+0.5; + DCPeriodInt = (int)DCPeriod; + realPart = 0.0; + imagPart = 0.0; + + /* idx is used to iterate for up to 50 of the last + * value of smoothPrice. + */ + idx = smoothPrice_Idx; + for( i=0; i < DCPeriodInt; i++ ) + { + tempReal = ((double)i*constDeg2RadBy360)/(double)DCPeriodInt; + tempReal2 = smoothPrice[idx]; + realPart += std_sin(tempReal)*tempReal2; + imagPart += std_cos(tempReal)*tempReal2; + if( idx == 0 ) + idx = SMOOTH_PRICE_SIZE-1; + else + idx--; + } + + tempReal = std_fabs(imagPart); + if( tempReal > 0.0 ) + DCPhase = std_atan(realPart/imagPart)*rad2Deg; + else if( tempReal <= 0.01 ) + { + if( realPart < 0.0 ) + DCPhase -= 90.0; + else if( realPart > 0.0 ) + DCPhase += 90.0; + } + DCPhase += 90.0; + + /* Compensate for one bar lag of the weighted moving average */ + DCPhase += 360.0 / smoothPeriod; + if( imagPart < 0.0 ) + DCPhase += 180.0; + if( DCPhase > 315.0 ) + DCPhase -= 360.0; + + prevSine = sine; + prevLeadSine = leadSine; + sine = std_sin(DCPhase*deg2Rad); + leadSine = std_sin((DCPhase+45)*deg2Rad); + + /* Compute Trendline */ + DCPeriod = smoothPeriod+0.5; + DCPeriodInt = (int)DCPeriod; + + /* idx is used to iterate for up to 50 of the last + * value of smoothPrice. + */ + idx = today; + tempReal = 0.0; + for( i=0; i < DCPeriodInt; i++ ) + tempReal += inReal[idx--]; + + if( DCPeriodInt > 0 ) + tempReal = tempReal/(double)DCPeriodInt; + + trendline = (4.0*tempReal + 3.0*iTrend1 + 2.0*iTrend2 + iTrend3) / 10.0; + iTrend3 = iTrend2; + iTrend2 = iTrend1; + iTrend1 = tempReal; + + /* Compute the trend Mode , and assume trend by default */ + trend = 1; + + /* Measure days in trend from last crossing of the SineWave Indicator lines */ + if( ((sine > leadSine) && (prevSine <= prevLeadSine)) || + ((sine < leadSine) && (prevSine >= prevLeadSine)) ) + { + daysInTrend = 0; + trend = 0; + } + + daysInTrend++; + + if( daysInTrend < (0.5*smoothPeriod) ) + trend = 0; + + tempReal = DCPhase - prevDCPhase; + if( (smoothPeriod != 0.0) && + ((tempReal > (0.67*360.0/smoothPeriod)) && (tempReal < (1.5*360.0/smoothPeriod))) ) + { + trend = 0; + } + + tempReal = smoothPrice[smoothPrice_Idx]; + if( (trendline != 0.0) && (std_fabs( (tempReal - trendline)/trendline ) >= 0.015) ) + trend = 1; + + if( today >= startIdx ) + { + outInteger[outIdx++] = trend; + } + + /* Ooof... let's do the next price bar now! */ + CIRCBUF_NEXT(smoothPrice); + today++; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::HtTrendMode( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode htTrendMode( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_HT_TRENDMODE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ int lookbackTotal, today; +/* Generated */ double tempReal, tempReal2; +/* Generated */ double adjustedPrevPeriod, period; +/* Generated */ int trailingWMAIdx; +/* Generated */ double periodWMASum, periodWMASub, trailingWMAValue; +/* Generated */ double smoothedValue; +/* Generated */ double iTrend1, iTrend2, iTrend3; +/* Generated */ CONSTANT_DOUBLE(a) = 0.0962; +/* Generated */ CONSTANT_DOUBLE(b) = 0.5769; +/* Generated */ double hilbertTempReal; +/* Generated */ int hilbertIdx; +/* Generated */ HILBERT_VARIABLES( detrender ); +/* Generated */ HILBERT_VARIABLES( Q1 ); +/* Generated */ HILBERT_VARIABLES( jI ); +/* Generated */ HILBERT_VARIABLES( jQ ); +/* Generated */ double Q2, I2, prevQ2, prevI2, Re, Im; +/* Generated */ double I1ForOddPrev2, I1ForOddPrev3; +/* Generated */ double I1ForEvenPrev2, I1ForEvenPrev3; +/* Generated */ double rad2Deg, deg2Rad, constDeg2RadBy360; +/* Generated */ double todayValue, smoothPeriod; +/* Generated */ #define SMOOTH_PRICE_SIZE 50 +/* Generated */ CIRCBUF_PROLOG(smoothPrice,double,SMOOTH_PRICE_SIZE); +/* Generated */ int idx; +/* Generated */ int DCPeriodInt; +/* Generated */ double DCPhase, DCPeriod, imagPart, realPart; +/* Generated */ int daysInTrend, trend; +/* Generated */ double prevDCPhase, trendline; +/* Generated */ double prevSine, prevLeadSine, sine, leadSine; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ CIRCBUF_INIT_LOCAL_ONLY(smoothPrice,double); +/* Generated */ iTrend1 = iTrend2 = iTrend3 = 0.0; +/* Generated */ daysInTrend = 0; +/* Generated */ prevDCPhase = DCPhase = 0.0; +/* Generated */ prevSine = sine = 0.0; +/* Generated */ prevLeadSine = leadSine = 0.0; +/* Generated */ tempReal = std_atan(1); +/* Generated */ rad2Deg = 45.0/tempReal; +/* Generated */ deg2Rad = 1.0/rad2Deg; +/* Generated */ constDeg2RadBy360 = tempReal*8.0; +/* Generated */ lookbackTotal = 63 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_HT_TRENDMODE,HtTrendMode); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ trailingWMAIdx = startIdx - lookbackTotal; +/* Generated */ today = trailingWMAIdx; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub = tempReal; +/* Generated */ periodWMASum = tempReal; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*2.0; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*3.0; +/* Generated */ trailingWMAValue = 0.0; +/* Generated */ #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ +/* Generated */ periodWMASub += varNewPrice; \ +/* Generated */ periodWMASub -= trailingWMAValue; \ +/* Generated */ periodWMASum += varNewPrice*4.0; \ +/* Generated */ trailingWMAValue = inReal[trailingWMAIdx++]; \ +/* Generated */ varToStoreSmoothedValue = periodWMASum*0.1; \ +/* Generated */ periodWMASum -= periodWMASub; \ +/* Generated */ } +/* Generated */ i = 34; +/* Generated */ do +/* Generated */ { +/* Generated */ tempReal = inReal[today++]; +/* Generated */ DO_PRICE_WMA(tempReal,smoothedValue); +/* Generated */ } while( --i != 0); +/* Generated */ hilbertIdx = 0; +/* Generated */ INIT_HILBERT_VARIABLES(detrender); +/* Generated */ INIT_HILBERT_VARIABLES(Q1); +/* Generated */ INIT_HILBERT_VARIABLES(jI); +/* Generated */ INIT_HILBERT_VARIABLES(jQ); +/* Generated */ period = 0.0; +/* Generated */ outIdx = 0; +/* Generated */ prevI2 = prevQ2 = 0.0; +/* Generated */ Re = Im = 0.0; +/* Generated */ I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; +/* Generated */ I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; +/* Generated */ smoothPeriod = 0.0; +/* Generated */ for( i=0; i < SMOOTH_PRICE_SIZE; i++ ) +/* Generated */ smoothPrice[i] = 0.0; +/* Generated */ DCPhase = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ adjustedPrevPeriod = (0.075*period)+0.54; +/* Generated */ todayValue = inReal[today]; +/* Generated */ DO_PRICE_WMA(todayValue,smoothedValue); +/* Generated */ smoothPrice[smoothPrice_Idx] = smoothedValue; +/* Generated */ if( (today%2) == 0 ) +/* Generated */ { +/* Generated */ DO_HILBERT_EVEN(detrender,smoothedValue); +/* Generated */ DO_HILBERT_EVEN(Q1,detrender); +/* Generated */ DO_HILBERT_EVEN(jI,I1ForEvenPrev3); +/* Generated */ DO_HILBERT_EVEN(jQ,Q1); +/* Generated */ if( ++hilbertIdx == 3 ) +/* Generated */ hilbertIdx = 0; +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForOddPrev3 = I1ForOddPrev2; +/* Generated */ I1ForOddPrev2 = detrender; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ DO_HILBERT_ODD(detrender,smoothedValue); +/* Generated */ DO_HILBERT_ODD(Q1,detrender); +/* Generated */ DO_HILBERT_ODD(jI,I1ForOddPrev3); +/* Generated */ DO_HILBERT_ODD(jQ,Q1); +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForEvenPrev3 = I1ForEvenPrev2; +/* Generated */ I1ForEvenPrev2 = detrender; +/* Generated */ } +/* Generated */ Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); +/* Generated */ Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); +/* Generated */ prevQ2 = Q2; +/* Generated */ prevI2 = I2; +/* Generated */ tempReal = period; +/* Generated */ if( (Im != 0.0) && (Re != 0.0) ) +/* Generated */ period = 360.0 / (std_atan(Im/Re)*rad2Deg); +/* Generated */ tempReal2 = 1.5*tempReal; +/* Generated */ if( period > tempReal2) +/* Generated */ period = tempReal2; +/* Generated */ tempReal2 = 0.67*tempReal; +/* Generated */ if( period < tempReal2 ) +/* Generated */ period = tempReal2; +/* Generated */ if( period < 6 ) +/* Generated */ period = 6; +/* Generated */ else if( period > 50 ) +/* Generated */ period = 50; +/* Generated */ period = (0.2*period) + (0.8 * tempReal); +/* Generated */ smoothPeriod = (0.33*period)+(0.67*smoothPeriod); +/* Generated */ prevDCPhase = DCPhase; +/* Generated */ DCPeriod = smoothPeriod+0.5; +/* Generated */ DCPeriodInt = (int)DCPeriod; +/* Generated */ realPart = 0.0; +/* Generated */ imagPart = 0.0; +/* Generated */ idx = smoothPrice_Idx; +/* Generated */ for( i=0; i < DCPeriodInt; i++ ) +/* Generated */ { +/* Generated */ tempReal = ((double)i*constDeg2RadBy360)/(double)DCPeriodInt; +/* Generated */ tempReal2 = smoothPrice[idx]; +/* Generated */ realPart += std_sin(tempReal)*tempReal2; +/* Generated */ imagPart += std_cos(tempReal)*tempReal2; +/* Generated */ if( idx == 0 ) +/* Generated */ idx = SMOOTH_PRICE_SIZE-1; +/* Generated */ else +/* Generated */ idx--; +/* Generated */ } +/* Generated */ tempReal = std_fabs(imagPart); +/* Generated */ if( tempReal > 0.0 ) +/* Generated */ DCPhase = std_atan(realPart/imagPart)*rad2Deg; +/* Generated */ else if( tempReal <= 0.01 ) +/* Generated */ { +/* Generated */ if( realPart < 0.0 ) +/* Generated */ DCPhase -= 90.0; +/* Generated */ else if( realPart > 0.0 ) +/* Generated */ DCPhase += 90.0; +/* Generated */ } +/* Generated */ DCPhase += 90.0; +/* Generated */ DCPhase += 360.0 / smoothPeriod; +/* Generated */ if( imagPart < 0.0 ) +/* Generated */ DCPhase += 180.0; +/* Generated */ if( DCPhase > 315.0 ) +/* Generated */ DCPhase -= 360.0; +/* Generated */ prevSine = sine; +/* Generated */ prevLeadSine = leadSine; +/* Generated */ sine = std_sin(DCPhase*deg2Rad); +/* Generated */ leadSine = std_sin((DCPhase+45)*deg2Rad); +/* Generated */ DCPeriod = smoothPeriod+0.5; +/* Generated */ DCPeriodInt = (int)DCPeriod; +/* Generated */ idx = today; +/* Generated */ tempReal = 0.0; +/* Generated */ for( i=0; i < DCPeriodInt; i++ ) +/* Generated */ tempReal += inReal[idx--]; +/* Generated */ if( DCPeriodInt > 0 ) +/* Generated */ tempReal = tempReal/(double)DCPeriodInt; +/* Generated */ trendline = (4.0*tempReal + 3.0*iTrend1 + 2.0*iTrend2 + iTrend3) / 10.0; +/* Generated */ iTrend3 = iTrend2; +/* Generated */ iTrend2 = iTrend1; +/* Generated */ iTrend1 = tempReal; +/* Generated */ trend = 1; +/* Generated */ if( ((sine > leadSine) && (prevSine <= prevLeadSine)) || +/* Generated */ ((sine < leadSine) && (prevSine >= prevLeadSine)) ) +/* Generated */ { +/* Generated */ daysInTrend = 0; +/* Generated */ trend = 0; +/* Generated */ } +/* Generated */ daysInTrend++; +/* Generated */ if( daysInTrend < (0.5*smoothPeriod) ) +/* Generated */ trend = 0; +/* Generated */ tempReal = DCPhase - prevDCPhase; +/* Generated */ if( (smoothPeriod != 0.0) && +/* Generated */ ((tempReal > (0.67*360.0/smoothPeriod)) && (tempReal < (1.5*360.0/smoothPeriod))) ) +/* Generated */ { +/* Generated */ trend = 0; +/* Generated */ } +/* Generated */ tempReal = smoothPrice[smoothPrice_Idx]; +/* Generated */ if( (trendline != 0.0) && (std_fabs( (tempReal - trendline)/trendline ) >= 0.015) ) +/* Generated */ trend = 1; +/* Generated */ if( today >= startIdx ) +/* Generated */ { +/* Generated */ outInteger[outIdx++] = trend; +/* Generated */ } +/* Generated */ CIRCBUF_NEXT(smoothPrice); +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_KAMA.c b/src/ta_func/ta_KAMA.c new file mode 100644 index 000000000..eb1884289 --- /dev/null +++ b/src/ta_func/ta_KAMA.c @@ -0,0 +1,497 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 062704 MF Fix limit case to avoid divid by zero (or by + * a value close to zero induce by the imprecision + * of floating points). + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::KamaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int kamaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_KAMA_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_KAMA,Kama); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_KAMA - Kaufman Adaptive Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Kama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Kama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode kama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_KAMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + CONSTANT_DOUBLE(constMax) = 2.0/(30.0+1.0); + CONSTANT_DOUBLE(constDiff) = 2.0/(2.0+1.0) - constMax; + + double tempReal, tempReal2; + double sumROC1, periodROC, prevKAMA; + int i, today, outIdx, lookbackTotal; + int trailingIdx; + double trailingValue; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_KAMA,Kama); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Initialize the variables by going through + * the lookback period. + */ + sumROC1 = 0.0; + today = startIdx-lookbackTotal; + trailingIdx = today; + i = optInTimePeriod; + while( i-- > 0 ) + { + tempReal = inReal[today++]; + tempReal -= inReal[today]; + sumROC1 += std_fabs(tempReal); + } + + /* At this point sumROC1 represent the + * summation of the 1-day price difference + * over the (optInTimePeriod-1) + */ + + /* Calculate the first KAMA */ + + /* The yesterday price is used here as the previous KAMA. */ + prevKAMA = inReal[today-1]; + + tempReal = inReal[today]; + tempReal2 = inReal[trailingIdx++]; + periodROC = tempReal-tempReal2; + + /* Save the trailing value. Do this because inReal + * and outReal can be pointers to the same buffer. + */ + trailingValue = tempReal2; + + /* Calculate the efficiency ratio */ + if( (sumROC1 <= periodROC) || TA_IS_ZERO(sumROC1)) + tempReal = 1.0; + else + tempReal = std_fabs(periodROC/sumROC1); + + /* Calculate the smoothing constant */ + tempReal = (tempReal*constDiff)+constMax; + tempReal *= tempReal; + + /* Calculate the KAMA like an EMA, using the + * smoothing constant as the adaptive factor. + */ + prevKAMA = ((inReal[today++]-prevKAMA)*tempReal) + prevKAMA; + + /* 'today' keep track of where the processing is within the + * input. + */ + + /* Skip the unstable period. Do the whole processing + * needed for KAMA, but do not write it in the output. + */ + while( today <= startIdx ) + { + tempReal = inReal[today]; + tempReal2 = inReal[trailingIdx++]; + periodROC = tempReal-tempReal2; + + /* Adjust sumROC1: + * - Remove trailing ROC1 + * - Add new ROC1 + */ + sumROC1 -= std_fabs(trailingValue-tempReal2); + sumROC1 += std_fabs(tempReal-inReal[today-1]); + + /* Save the trailing value. Do this because inReal + * and outReal can be pointers to the same buffer. + */ + trailingValue = tempReal2; + + /* Calculate the efficiency ratio */ + if( (sumROC1 <= periodROC) || TA_IS_ZERO(sumROC1) ) + tempReal = 1.0; + else + tempReal = std_fabs(periodROC/sumROC1); + + /* Calculate the smoothing constant */ + tempReal = (tempReal*constDiff)+constMax; + tempReal *= tempReal; + + /* Calculate the KAMA like an EMA, using the + * smoothing constant as the adaptive factor. + */ + prevKAMA = ((inReal[today++]-prevKAMA)*tempReal) + prevKAMA; + } + + /* Write the first value. */ + outReal[0] = prevKAMA; + outIdx = 1; + VALUE_HANDLE_DEREF(outBegIdx) = today-1; + + /* Do the KAMA calculation for the requested range. */ + while( today <= endIdx ) + { + tempReal = inReal[today]; + tempReal2 = inReal[trailingIdx++]; + periodROC = tempReal-tempReal2; + + /* Adjust sumROC1: + * - Remove trailing ROC1 + * - Add new ROC1 + */ + sumROC1 -= std_fabs(trailingValue-tempReal2); + sumROC1 += std_fabs(tempReal-inReal[today-1]); + + /* Save the trailing value. Do this because inReal + * and outReal can be pointers to the same buffer. + */ + trailingValue = tempReal2; + + /* Calculate the efficiency ratio */ + if( (sumROC1 <= periodROC) || TA_IS_ZERO(sumROC1) ) + tempReal = 1.0; + else + tempReal = std_fabs(periodROC / sumROC1); + + /* Calculate the smoothing constant */ + tempReal = (tempReal*constDiff)+constMax; + tempReal *= tempReal; + + /* Calculate the KAMA like an EMA, using the + * smoothing constant as the adaptive factor. + */ + prevKAMA = ((inReal[today++]-prevKAMA)*tempReal) + prevKAMA; + outReal[outIdx++] = prevKAMA; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Kama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode kama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_KAMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ CONSTANT_DOUBLE(constMax) = 2.0/(30.0+1.0); +/* Generated */ CONSTANT_DOUBLE(constDiff) = 2.0/(2.0+1.0) - constMax; +/* Generated */ double tempReal, tempReal2; +/* Generated */ double sumROC1, periodROC, prevKAMA; +/* Generated */ int i, today, outIdx, lookbackTotal; +/* Generated */ int trailingIdx; +/* Generated */ double trailingValue; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_KAMA,Kama); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ sumROC1 = 0.0; +/* Generated */ today = startIdx-lookbackTotal; +/* Generated */ trailingIdx = today; +/* Generated */ i = optInTimePeriod; +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ tempReal = inReal[today++]; +/* Generated */ tempReal -= inReal[today]; +/* Generated */ sumROC1 += std_fabs(tempReal); +/* Generated */ } +/* Generated */ prevKAMA = inReal[today-1]; +/* Generated */ tempReal = inReal[today]; +/* Generated */ tempReal2 = inReal[trailingIdx++]; +/* Generated */ periodROC = tempReal-tempReal2; +/* Generated */ trailingValue = tempReal2; +/* Generated */ if( (sumROC1 <= periodROC) || TA_IS_ZERO(sumROC1)) +/* Generated */ tempReal = 1.0; +/* Generated */ else +/* Generated */ tempReal = std_fabs(periodROC/sumROC1); +/* Generated */ tempReal = (tempReal*constDiff)+constMax; +/* Generated */ tempReal *= tempReal; +/* Generated */ prevKAMA = ((inReal[today++]-prevKAMA)*tempReal) + prevKAMA; +/* Generated */ while( today <= startIdx ) +/* Generated */ { +/* Generated */ tempReal = inReal[today]; +/* Generated */ tempReal2 = inReal[trailingIdx++]; +/* Generated */ periodROC = tempReal-tempReal2; +/* Generated */ sumROC1 -= std_fabs(trailingValue-tempReal2); +/* Generated */ sumROC1 += std_fabs(tempReal-inReal[today-1]); +/* Generated */ trailingValue = tempReal2; +/* Generated */ if( (sumROC1 <= periodROC) || TA_IS_ZERO(sumROC1) ) +/* Generated */ tempReal = 1.0; +/* Generated */ else +/* Generated */ tempReal = std_fabs(periodROC/sumROC1); +/* Generated */ tempReal = (tempReal*constDiff)+constMax; +/* Generated */ tempReal *= tempReal; +/* Generated */ prevKAMA = ((inReal[today++]-prevKAMA)*tempReal) + prevKAMA; +/* Generated */ } +/* Generated */ outReal[0] = prevKAMA; +/* Generated */ outIdx = 1; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = today-1; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tempReal = inReal[today]; +/* Generated */ tempReal2 = inReal[trailingIdx++]; +/* Generated */ periodROC = tempReal-tempReal2; +/* Generated */ sumROC1 -= std_fabs(trailingValue-tempReal2); +/* Generated */ sumROC1 += std_fabs(tempReal-inReal[today-1]); +/* Generated */ trailingValue = tempReal2; +/* Generated */ if( (sumROC1 <= periodROC) || TA_IS_ZERO(sumROC1) ) +/* Generated */ tempReal = 1.0; +/* Generated */ else +/* Generated */ tempReal = std_fabs(periodROC / sumROC1); +/* Generated */ tempReal = (tempReal*constDiff)+constMax; +/* Generated */ tempReal *= tempReal; +/* Generated */ prevKAMA = ((inReal[today++]-prevKAMA)*tempReal) + prevKAMA; +/* Generated */ outReal[outIdx++] = prevKAMA; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_LINEARREG.c b/src/ta_func/ta_LINEARREG.c new file mode 100644 index 000000000..579186784 --- /dev/null +++ b/src/ta_func/ta_LINEARREG.c @@ -0,0 +1,354 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * JP John Price + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 070203 JP Initial. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::LinearRegLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int linearRegLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_LINEARREG_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_LINEARREG - Linear Regression + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::LinearReg( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::LinearReg( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode linearReg( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_LINEARREG( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + + int today, lookbackTotal; + double SumX, SumXY, SumY, SumXSqr, Divisor; + + double m, b; + int i; + + double tempValue1; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Linear Regression is a concept also known as the + * "least squares method" or "best fit." Linear + * Regression attempts to fit a straight line between + * several data points in such a way that distance + * between each data point and the line is minimized. + * + * For each point, a straight line over the specified + * previous bar period is determined in terms + * of y = b + m*x: + * + * TA_LINEARREG : Returns b+m*(period-1) + * TA_LINEARREG_SLOPE : Returns 'm' + * TA_LINEARREG_ANGLE : Returns 'm' in degree. + * TA_LINEARREG_INTERCEPT: Returns 'b' + * TA_TSF : Returns b+m*(period) + */ + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(LINEARREG)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + outIdx = 0; /* Index into the output. */ + today = startIdx; + + SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; + SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; + Divisor = SumX * SumX - optInTimePeriod * SumXSqr; + + while( today <= endIdx ) + { + SumXY = 0; + SumY = 0; + for( i = optInTimePeriod; i-- != 0; ) + { + SumY += tempValue1 = inReal[today - i]; + SumXY += (double)i * tempValue1; + } + m = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; + b = ( SumY - m * SumX ) / (double)optInTimePeriod; + outReal[outIdx++] = b + m * (double)(optInTimePeriod-1); + today++; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::LinearReg( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode linearReg( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_LINEARREG( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int today, lookbackTotal; +/* Generated */ double SumX, SumXY, SumY, SumXSqr, Divisor; +/* Generated */ double m, b; +/* Generated */ int i; +/* Generated */ double tempValue1; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(LINEARREG)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; +/* Generated */ SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; +/* Generated */ Divisor = SumX * SumX - optInTimePeriod * SumXSqr; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ SumXY = 0; +/* Generated */ SumY = 0; +/* Generated */ for( i = optInTimePeriod; i-- != 0; ) +/* Generated */ { +/* Generated */ SumY += tempValue1 = inReal[today - i]; +/* Generated */ SumXY += (double)i * tempValue1; +/* Generated */ } +/* Generated */ m = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; +/* Generated */ b = ( SumY - m * SumX ) / (double)optInTimePeriod; +/* Generated */ outReal[outIdx++] = b + m * (double)(optInTimePeriod-1); +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_LINEARREG_ANGLE.c b/src/ta_func/ta_LINEARREG_ANGLE.c new file mode 100644 index 000000000..0f72e1923 --- /dev/null +++ b/src/ta_func/ta_LINEARREG_ANGLE.c @@ -0,0 +1,354 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * JP John Price + * MF Mario Fortier + * AM Adrian Michel + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 070203 JP Initial. + * 072106 MF,AM Fix #1526632. Add missing atan(). + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::LinearRegAngleLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int linearRegAngleLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_LINEARREG_ANGLE_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_LINEARREG_ANGLE - Linear Regression Angle + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::LinearRegAngle( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::LinearRegAngle( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode linearRegAngle( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_LINEARREG_ANGLE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + + int today, lookbackTotal; + double SumX, SumXY, SumY, SumXSqr, Divisor; + + double m; + + int i; + + double tempValue1; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Linear Regression is a concept also known as the + * "least squares method" or "best fit." Linear + * Regression attempts to fit a straight line between + * several data points in such a way that distance + * between each data point and the line is minimized. + * + * For each point, a straight line over the specified + * previous bar period is determined in terms + * of y = b + m*x: + * + * TA_LINEARREG : Returns b+m*(period-1) + * TA_LINEARREG_SLOPE : Returns 'm' + * TA_LINEARREG_ANGLE : Returns 'm' in degree. + * TA_LINEARREG_INTERCEPT: Returns 'b' + * TA_TSF : Returns b+m*(period) + */ + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(LINEARREG_ANGLE)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + outIdx = 0; /* Index into the output. */ + today = startIdx; + + SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; + SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; + Divisor = SumX * SumX - optInTimePeriod * SumXSqr; + + while( today <= endIdx ) + { + SumXY = 0; + SumY = 0; + for( i = optInTimePeriod; i-- != 0; ) + { + SumY += tempValue1 = inReal[today - i]; + SumXY += (double)i * tempValue1; + } + m = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; + outReal[outIdx++] = std_atan(m) * ( 180.0 / PI ); + today++; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::LinearRegAngle( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode linearRegAngle( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_LINEARREG_ANGLE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int today, lookbackTotal; +/* Generated */ double SumX, SumXY, SumY, SumXSqr, Divisor; +/* Generated */ double m; +/* Generated */ int i; +/* Generated */ double tempValue1; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(LINEARREG_ANGLE)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; +/* Generated */ SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; +/* Generated */ Divisor = SumX * SumX - optInTimePeriod * SumXSqr; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ SumXY = 0; +/* Generated */ SumY = 0; +/* Generated */ for( i = optInTimePeriod; i-- != 0; ) +/* Generated */ { +/* Generated */ SumY += tempValue1 = inReal[today - i]; +/* Generated */ SumXY += (double)i * tempValue1; +/* Generated */ } +/* Generated */ m = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; +/* Generated */ outReal[outIdx++] = std_atan(m) * ( 180.0 / PI ); +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_LINEARREG_INTERCEPT.c b/src/ta_func/ta_LINEARREG_INTERCEPT.c new file mode 100644 index 000000000..858fa6239 --- /dev/null +++ b/src/ta_func/ta_LINEARREG_INTERCEPT.c @@ -0,0 +1,352 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * JP John Price + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 070203 JP Initial. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::LinearRegInterceptLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int linearRegInterceptLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_LINEARREG_INTERCEPT_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_LINEARREG_INTERCEPT - Linear Regression Intercept + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::LinearRegIntercept( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::LinearRegIntercept( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode linearRegIntercept( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_LINEARREG_INTERCEPT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + + int today, lookbackTotal; + double SumX, SumXY, SumY, SumXSqr, Divisor; + + double m; + int i; + + double tempValue1; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Linear Regression is a concept also known as the + * "least squares method" or "best fit." Linear + * Regression attempts to fit a straight line between + * several data points in such a way that distance + * between each data point and the line is minimized. + * + * For each point, a straight line over the specified + * previous bar period is determined in terms + * of y = b + m*x: + * + * TA_LINEARREG : Returns b+m*(period-1) + * TA_LINEARREG_SLOPE : Returns 'm' + * TA_LINEARREG_ANGLE : Returns 'm' in degree. + * TA_LINEARREG_INTERCEPT: Returns 'b' + * TA_TSF : Returns b+m*(period) + */ + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(LINEARREG_INTERCEPT)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + outIdx = 0; /* Index into the output. */ + today = startIdx; + + SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; + SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; + Divisor = SumX * SumX - optInTimePeriod * SumXSqr; + + while( today <= endIdx ) + { + SumXY = 0; + SumY = 0; + for( i = optInTimePeriod; i-- != 0; ) + { + SumY += tempValue1 = inReal[today - i]; + SumXY += (double)i * tempValue1; + } + m = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; + outReal[outIdx++] = ( SumY - m * SumX ) / (double)optInTimePeriod; + today++; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::LinearRegIntercept( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode linearRegIntercept( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_LINEARREG_INTERCEPT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int today, lookbackTotal; +/* Generated */ double SumX, SumXY, SumY, SumXSqr, Divisor; +/* Generated */ double m; +/* Generated */ int i; +/* Generated */ double tempValue1; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(LINEARREG_INTERCEPT)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; +/* Generated */ SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; +/* Generated */ Divisor = SumX * SumX - optInTimePeriod * SumXSqr; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ SumXY = 0; +/* Generated */ SumY = 0; +/* Generated */ for( i = optInTimePeriod; i-- != 0; ) +/* Generated */ { +/* Generated */ SumY += tempValue1 = inReal[today - i]; +/* Generated */ SumXY += (double)i * tempValue1; +/* Generated */ } +/* Generated */ m = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; +/* Generated */ outReal[outIdx++] = ( SumY - m * SumX ) / (double)optInTimePeriod; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_LINEARREG_SLOPE.c b/src/ta_func/ta_LINEARREG_SLOPE.c new file mode 100644 index 000000000..7c7c683c9 --- /dev/null +++ b/src/ta_func/ta_LINEARREG_SLOPE.c @@ -0,0 +1,348 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * JP John Price + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 070203 JP Initial. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::LinearRegSlopeLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int linearRegSlopeLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_LINEARREG_SLOPE_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_LINEARREG_SLOPE - Linear Regression Slope + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::LinearRegSlope( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::LinearRegSlope( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode linearRegSlope( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_LINEARREG_SLOPE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + + int today, lookbackTotal; + double SumX, SumXY, SumY, SumXSqr, Divisor; + + int i; + + double tempValue1; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Linear Regression is a concept also known as the + * "least squares method" or "best fit." Linear + * Regression attempts to fit a straight line between + * several data points in such a way that distance + * between each data point and the line is minimized. + * + * For each point, a straight line over the specified + * previous bar period is determined in terms + * of y = b + m*x: + * + * TA_LINEARREG : Returns b+m*(period-1) + * TA_LINEARREG_SLOPE : Returns 'm' + * TA_LINEARREG_ANGLE : Returns 'm' in degree. + * TA_LINEARREG_INTERCEPT: Returns 'b' + * TA_TSF : Returns b+m*(period) + */ + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(LINEARREG_SLOPE)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + outIdx = 0; /* Index into the output. */ + today = startIdx; + + SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; + SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; + Divisor = SumX * SumX - optInTimePeriod * SumXSqr; + + while( today <= endIdx ) + { + SumXY = 0; + SumY = 0; + for( i = optInTimePeriod; i-- != 0; ) + { + SumY += tempValue1 = inReal[today - i]; + SumXY += (double)i * tempValue1; + } + outReal[outIdx++] = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; + today++; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::LinearRegSlope( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode linearRegSlope( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_LINEARREG_SLOPE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int today, lookbackTotal; +/* Generated */ double SumX, SumXY, SumY, SumXSqr, Divisor; +/* Generated */ int i; +/* Generated */ double tempValue1; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(LINEARREG_SLOPE)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; +/* Generated */ SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; +/* Generated */ Divisor = SumX * SumX - optInTimePeriod * SumXSqr; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ SumXY = 0; +/* Generated */ SumY = 0; +/* Generated */ for( i = optInTimePeriod; i-- != 0; ) +/* Generated */ { +/* Generated */ SumY += tempValue1 = inReal[today - i]; +/* Generated */ SumXY += (double)i * tempValue1; +/* Generated */ } +/* Generated */ outReal[outIdx++] = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_LN.c b/src/ta_func/ta_LN.c new file mode 100644 index 000000000..8a55c4e29 --- /dev/null +++ b/src/ta_func/ta_LN.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::LnLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int lnLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_LN_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_LN - Vector Log Natural + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Ln( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ln( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ln( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_LN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_log(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ln( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ln( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_LN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_log(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_LOG10.c b/src/ta_func/ta_LOG10.c new file mode 100644 index 000000000..108b72f97 --- /dev/null +++ b/src/ta_func/ta_LOG10.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::Log10Lookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int log10Lookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_LOG10_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_LOG10 - Vector Log10 + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Log10( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Log10( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode log10( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_LOG10( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_log10(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Log10( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode log10( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_LOG10( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_log10(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MA.c b/src/ta_func/ta_MA.c new file mode 100644 index 000000000..6b9c9f537 --- /dev/null +++ b/src/ta_func/ta_MA.c @@ -0,0 +1,476 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 022203 MF Add MAMA + * 040503 MF Add T3 + * 052603 MF Adapt code to compile with .NET Managed C++ + * 111603 MF Allow period of 1. Just copy input into output. + * 060907 MF Use TA_SMA/TA_EMA instead of internal implementation. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MovingAverageLookback( int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int movingAverageLookback( int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_MA_Lookback( int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInMAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int retValue; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + if( optInTimePeriod <= 1 ) + return 0; + + switch( optInMAType ) + { + case ENUM_CASE(MAType, TA_MAType_SMA, Sma ): + retValue = LOOKBACK_CALL(SMA)( optInTimePeriod ); + break; + + case ENUM_CASE(MAType, TA_MAType_EMA, Ema): + retValue = LOOKBACK_CALL(EMA)( optInTimePeriod ); + break; + + case ENUM_CASE(MAType, TA_MAType_WMA, Wma): + retValue = LOOKBACK_CALL(WMA)( optInTimePeriod ); + break; + + case ENUM_CASE(MAType, TA_MAType_DEMA, Dema): + retValue = LOOKBACK_CALL(DEMA)( optInTimePeriod ); + break; + + case ENUM_CASE(MAType, TA_MAType_TEMA, Tema ): + retValue = LOOKBACK_CALL(TEMA)( optInTimePeriod ); + break; + + case ENUM_CASE(MAType, TA_MAType_TRIMA, Trima ): + retValue = LOOKBACK_CALL(TRIMA)( optInTimePeriod ); + break; + + case ENUM_CASE(MAType, TA_MAType_KAMA, Kama ): + retValue = LOOKBACK_CALL(KAMA)( optInTimePeriod ); + break; + + case ENUM_CASE(MAType, TA_MAType_MAMA, Mama ): + retValue = LOOKBACK_CALL(MAMA)( 0.5, 0.05 ); + break; + + case ENUM_CASE(MAType, TA_MAType_T3, T3): + retValue = LOOKBACK_CALL(T3)( optInTimePeriod, 0.7 ); + break; + + default: + retValue = 0; + } + + return retValue; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MA - Moving average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * optInMAType: + * Type of Moving Average + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MovingAverage( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MovingAverage( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode movingAverage( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_REF(dummyBuffer); + ENUM_DECLARATION(RetCode) retCode; + + int nbElement; + int outIdx, todayIdx; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + if( optInTimePeriod == 1 ) + { + nbElement = endIdx-startIdx+1; + VALUE_HANDLE_DEREF(outNBElement) = nbElement; + for( todayIdx=startIdx, outIdx=0; outIdx < nbElement; outIdx++, todayIdx++ ) + outReal[outIdx] = inReal[todayIdx]; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + /* Simply forward the job to the corresponding TA function. */ + switch( optInMAType ) + { + case ENUM_CASE(MAType, TA_MAType_SMA, Sma): + retCode = FUNCTION_CALL(SMA)( startIdx, endIdx, inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); + break; + + case ENUM_CASE(MAType, TA_MAType_EMA, Ema): + retCode = FUNCTION_CALL(EMA)( startIdx, endIdx, inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); + break; + + case ENUM_CASE(MAType, TA_MAType_WMA, Wma): + retCode = FUNCTION_CALL(WMA)( startIdx, endIdx, inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); + break; + + case ENUM_CASE(MAType, TA_MAType_DEMA, Dema): + retCode = FUNCTION_CALL(DEMA)( startIdx, endIdx, inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); + break; + + case ENUM_CASE(MAType, TA_MAType_TEMA, Tema): + retCode = FUNCTION_CALL(TEMA)( startIdx, endIdx, inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); + break; + + case ENUM_CASE(MAType, TA_MAType_TRIMA, Trima): + retCode = FUNCTION_CALL(TRIMA)( startIdx, endIdx, inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); + break; + + case ENUM_CASE(MAType, TA_MAType_KAMA, Kama): + retCode = FUNCTION_CALL(KAMA)( startIdx, endIdx, inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); + break; + + case ENUM_CASE(MAType, TA_MAType_MAMA, Mama): + /* The optInTimePeriod is ignored and the FAMA output of the MAMA + * is ignored. + */ + ARRAY_ALLOC(dummyBuffer, (endIdx-startIdx+1) ); + + #if !defined( _JAVA ) + if( !dummyBuffer ) + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + #endif + + retCode = FUNCTION_CALL(MAMA)( startIdx, endIdx, inReal, 0.5, 0.05, + outBegIdx, outNBElement, + outReal, dummyBuffer ); + + ARRAY_FREE( dummyBuffer ); + break; + + case ENUM_CASE(MAType, TA_MAType_T3, T3 ): + retCode = FUNCTION_CALL(T3)( startIdx, endIdx, inReal, + optInTimePeriod, 0.7, + outBegIdx, outNBElement, outReal ); + break; + + default: + retCode = ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); + break; + } + + return retCode; +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MovingAverage( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode movingAverage( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF(dummyBuffer); +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int nbElement; +/* Generated */ int outIdx, todayIdx; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( optInTimePeriod == 1 ) +/* Generated */ { +/* Generated */ nbElement = endIdx-startIdx+1; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = nbElement; +/* Generated */ for( todayIdx=startIdx, outIdx=0; outIdx < nbElement; outIdx++, todayIdx++ ) +/* Generated */ outReal[outIdx] = inReal[todayIdx]; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ switch( optInMAType ) +/* Generated */ { +/* Generated */ case ENUM_CASE(MAType, TA_MAType_SMA, Sma): +/* Generated */ retCode = FUNCTION_CALL(SMA)( startIdx, endIdx, inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ break; +/* Generated */ case ENUM_CASE(MAType, TA_MAType_EMA, Ema): +/* Generated */ retCode = FUNCTION_CALL(EMA)( startIdx, endIdx, inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ break; +/* Generated */ case ENUM_CASE(MAType, TA_MAType_WMA, Wma): +/* Generated */ retCode = FUNCTION_CALL(WMA)( startIdx, endIdx, inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ break; +/* Generated */ case ENUM_CASE(MAType, TA_MAType_DEMA, Dema): +/* Generated */ retCode = FUNCTION_CALL(DEMA)( startIdx, endIdx, inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ break; +/* Generated */ case ENUM_CASE(MAType, TA_MAType_TEMA, Tema): +/* Generated */ retCode = FUNCTION_CALL(TEMA)( startIdx, endIdx, inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ break; +/* Generated */ case ENUM_CASE(MAType, TA_MAType_TRIMA, Trima): +/* Generated */ retCode = FUNCTION_CALL(TRIMA)( startIdx, endIdx, inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ break; +/* Generated */ case ENUM_CASE(MAType, TA_MAType_KAMA, Kama): +/* Generated */ retCode = FUNCTION_CALL(KAMA)( startIdx, endIdx, inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ break; +/* Generated */ case ENUM_CASE(MAType, TA_MAType_MAMA, Mama): +/* Generated */ ARRAY_ALLOC(dummyBuffer, (endIdx-startIdx+1) ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !dummyBuffer ) +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ #endif +/* Generated */ retCode = FUNCTION_CALL(MAMA)( startIdx, endIdx, inReal, 0.5, 0.05, +/* Generated */ outBegIdx, outNBElement, +/* Generated */ outReal, dummyBuffer ); +/* Generated */ ARRAY_FREE( dummyBuffer ); +/* Generated */ break; +/* Generated */ case ENUM_CASE(MAType, TA_MAType_T3, T3 ): +/* Generated */ retCode = FUNCTION_CALL(T3)( startIdx, endIdx, inReal, +/* Generated */ optInTimePeriod, 0.7, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ break; +/* Generated */ default: +/* Generated */ retCode = ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ break; +/* Generated */ } +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MACD.c b/src/ta_func/ta_MACD.c new file mode 100644 index 000000000..08af78989 --- /dev/null +++ b/src/ta_func/ta_MACD.c @@ -0,0 +1,783 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * JPP JP Pienaar (j.pienaar@mci.co.za) + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 080403 JPP Fix #767653 for logic when swapping periods. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MacdLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int macdLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MACD_Lookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int tempInteger; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInSignalPeriod. */ +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* The lookback is driven by the signal line output. + * + * (must also account for the initial data consume + * by the slow period). + */ + + /* Make sure slow is really slower than + * the fast period! if not, swap... + */ + if( optInSlowPeriod < optInFastPeriod ) + { + /* swap */ + tempInteger = optInSlowPeriod; + optInSlowPeriod = optInFastPeriod; + optInFastPeriod = tempInteger; + } + + return LOOKBACK_CALL(EMA)( optInSlowPeriod ) + + LOOKBACK_CALL(EMA)( optInSignalPeriod ); +} + + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MACD - Moving Average Convergence/Divergence + * + * Input = double + * Output = double, double, double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * optInSignalPeriod:(From 1 to 100000) + * Smoothing for the signal line (nb of period) + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Macd( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Macd( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode macd( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MACD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInSignalPeriod. */ +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMACD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outMACDSignal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outMACDHist ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + return FUNCTION_CALL(INT_MACD)( startIdx, endIdx, inReal, + optInFastPeriod, + optInSlowPeriod, + optInSignalPeriod, + outBegIdx, + outNBElement, + outMACD, + outMACDSignal, + outMACDHist ); +} + +#if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) + enum class Core::RetCode Core::TA_INT_MACD( int startIdx, + int endIdx, + SubArray^ inReal, + int optInFastPeriod, /* 0 is fix 12 */ + int optInSlowPeriod, /* 0 is fix 26 */ + int optInSignalPeriod_2, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outMACD, + cli::array^ outMACDSignal, + cli::array^ outMACDHist ) +#elif defined( _MANAGED ) + enum class Core::RetCode Core::TA_INT_MACD( int startIdx, + int endIdx, + cli::array^ inReal, + int optInFastPeriod, /* 0 is fix 12 */ + int optInSlowPeriod, /* 0 is fix 26 */ + int optInSignalPeriod_2, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outMACD, + cli::array^ outMACDSignal, + cli::array^ outMACDHist ) +#elif defined( _JAVA ) +RetCode TA_INT_MACD( int startIdx, + int endIdx, + INPUT_TYPE inReal[], + int optInFastPeriod, /* 0 is fix 12 */ + int optInSlowPeriod, /* 0 is fix 26 */ + int optInSignalPeriod_2, + MInteger outBegIdx, + MInteger outNBElement, + double outMACD[], + double outMACDSignal[], + double outMACDHist[] ) + +#else +TA_RetCode TA_PREFIX(INT_MACD)( int startIdx, + int endIdx, + const INPUT_TYPE inReal[], + int optInFastPeriod, /* 0 is fix 12 */ + int optInSlowPeriod, /* 0 is fix 26 */ + int optInSignalPeriod_2, + int *outBegIdx, + int *outNBElement, + double outMACD[], + double outMACDSignal[], + double outMACDHist[] ) +#endif +{ + ARRAY_REF(slowEMABuffer); + ARRAY_REF(fastEMABuffer); + double k1, k2; + ENUM_DECLARATION(RetCode) retCode; + int tempInteger; + VALUE_HANDLE_INT(outBegIdx1); + VALUE_HANDLE_INT(outNbElement1); + VALUE_HANDLE_INT(outBegIdx2); + VALUE_HANDLE_INT(outNbElement2); + int lookbackTotal, lookbackSignal; + int i; + + /* !!! A lot of speed optimization could be done + * !!! with this function. + * !!! + * !!! A better approach would be to use TA_INT_EMA + * !!! just to get the seeding values for the + * !!! fast and slow EMA. Then process the difference + * !!! in an allocated buffer until enough data is + * !!! available for the first signal value. + * !!! From that point all the processing can + * !!! be done in a tight loop. + * !!! + * !!! That approach will have the following + * !!! advantage: + * !!! 1) One mem allocation needed instead of two. + * !!! 2) The mem allocation size will be only the + * !!! signal lookback period instead of the + * !!! whole range of data. + * !!! 3) Processing will be done in a tight loop. + * !!! allowing to avoid a lot of memory store-load + * !!! operation. + * !!! 4) The memcpy at the end will be eliminated! + * !!! + * !!! If only I had time.... + */ + + /* Make sure slow is really slower than + * the fast period! if not, swap... + */ + if( optInSlowPeriod < optInFastPeriod ) + { + /* swap */ + tempInteger = optInSlowPeriod; + optInSlowPeriod = optInFastPeriod; + optInFastPeriod = tempInteger; + } + + /* Catch special case for fix 26/12 MACD. */ + if( optInSlowPeriod != 0 ) + k1 = PER_TO_K(optInSlowPeriod); + else + { + optInSlowPeriod = 26; + k1 = (double)0.075; /* Fix 26 */ + } + + if( optInFastPeriod != 0 ) + k2 = PER_TO_K(optInFastPeriod); + else + { + optInFastPeriod = 12; + k2 = (double)0.15; /* Fix 12 */ + } + + lookbackSignal = LOOKBACK_CALL(EMA)( optInSignalPeriod_2 ); + + /* Move up the start index if there is not + * enough initial data. + */ + lookbackTotal = lookbackSignal; + lookbackTotal += LOOKBACK_CALL(EMA)( optInSlowPeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Allocate intermediate buffer for fast/slow EMA. */ + tempInteger = (endIdx-startIdx)+1+lookbackSignal; + ARRAY_ALLOC( fastEMABuffer, tempInteger ); + #if !defined( _JAVA ) + if( !fastEMABuffer ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + } + #endif + + ARRAY_ALLOC( slowEMABuffer, tempInteger ); + #if !defined( _JAVA ) + if( !slowEMABuffer ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + ARRAY_FREE( fastEMABuffer ); + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + } + #endif + + /* Calculate the slow EMA. + * + * Move back the startIdx to get enough data + * for the signal period. That way, once the + * signal calculation is done, all the output + * will start at the requested 'startIdx'. + */ + tempInteger = startIdx-lookbackSignal; + retCode = FUNCTION_CALL(INT_EMA)( tempInteger, endIdx, + inReal, optInSlowPeriod, k1, + VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), slowEMABuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + ARRAY_FREE( fastEMABuffer ); + ARRAY_FREE( slowEMABuffer ); + return retCode; + } + + /* Calculate the fast EMA. */ + retCode = FUNCTION_CALL(INT_EMA)( tempInteger, endIdx, + inReal, optInFastPeriod, k2, + VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), fastEMABuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + ARRAY_FREE( fastEMABuffer ); + ARRAY_FREE( slowEMABuffer ); + return retCode; + } + + /* Parano tests. Will be removed eventually. */ + if( (VALUE_HANDLE_GET(outBegIdx1) != tempInteger) || + (VALUE_HANDLE_GET(outBegIdx2) != tempInteger) || + (VALUE_HANDLE_GET(outNbElement1) != VALUE_HANDLE_GET(outNbElement2)) || + (VALUE_HANDLE_GET(outNbElement1) != (endIdx-startIdx)+1+lookbackSignal) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + ARRAY_FREE( fastEMABuffer ); + ARRAY_FREE( slowEMABuffer ); + return TA_INTERNAL_ERROR(119); + } + + /* Calculate (fast EMA) - (slow EMA). */ + for( i=0; i < VALUE_HANDLE_GET(outNbElement1); i++ ) + fastEMABuffer[i] = fastEMABuffer[i] - slowEMABuffer[i]; + + + /* Copy the result into the output for the caller. */ + ARRAY_MEMMOVE( outMACD, 0, fastEMABuffer, lookbackSignal, (endIdx-startIdx)+1 ); + + /* Calculate the signal/trigger line. */ + retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, VALUE_HANDLE_GET(outNbElement1)-1, + fastEMABuffer, optInSignalPeriod_2, PER_TO_K(optInSignalPeriod_2), + VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), outMACDSignal ); + + + ARRAY_FREE( fastEMABuffer ); + ARRAY_FREE( slowEMABuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + /* Calculate the histogram. */ + for( i=0; i < VALUE_HANDLE_GET(outNbElement2); i++ ) + outMACDHist[i] = outMACD[i]-outMACDSignal[i]; + + + /* All done! Indicate the output limits and return success. */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = VALUE_HANDLE_GET(outNbElement2); + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Macd( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode macd( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MACD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMACD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outMACDSignal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outMACDHist ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ return FUNCTION_CALL(INT_MACD)( startIdx, endIdx, inReal, +/* Generated */ optInFastPeriod, +/* Generated */ optInSlowPeriod, +/* Generated */ optInSignalPeriod, +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ outMACD, +/* Generated */ outMACDSignal, +/* Generated */ outMACDHist ); +/* Generated */ } +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) +/* Generated */ enum class Core::RetCode Core::TA_INT_MACD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInFastPeriod, +/* Generated */ int optInSlowPeriod, +/* Generated */ int optInSignalPeriod_2, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TA_INT_MACD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, +/* Generated */ int optInSlowPeriod, +/* Generated */ int optInSignalPeriod_2, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ RetCode TA_INT_MACD( int startIdx, +/* Generated */ int endIdx, +/* Generated */ INPUT_TYPE inReal[], +/* Generated */ int optInFastPeriod, +/* Generated */ int optInSlowPeriod, +/* Generated */ int optInSignalPeriod_2, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PREFIX(INT_MACD)( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const INPUT_TYPE inReal[], +/* Generated */ int optInFastPeriod, +/* Generated */ int optInSlowPeriod, +/* Generated */ int optInSignalPeriod_2, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF(slowEMABuffer); +/* Generated */ ARRAY_REF(fastEMABuffer); +/* Generated */ double k1, k2; +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int tempInteger; +/* Generated */ VALUE_HANDLE_INT(outBegIdx1); +/* Generated */ VALUE_HANDLE_INT(outNbElement1); +/* Generated */ VALUE_HANDLE_INT(outBegIdx2); +/* Generated */ VALUE_HANDLE_INT(outNbElement2); +/* Generated */ int lookbackTotal, lookbackSignal; +/* Generated */ int i; +/* Generated */ if( optInSlowPeriod < optInFastPeriod ) +/* Generated */ { +/* Generated */ tempInteger = optInSlowPeriod; +/* Generated */ optInSlowPeriod = optInFastPeriod; +/* Generated */ optInFastPeriod = tempInteger; +/* Generated */ } +/* Generated */ if( optInSlowPeriod != 0 ) +/* Generated */ k1 = PER_TO_K(optInSlowPeriod); +/* Generated */ else +/* Generated */ { +/* Generated */ optInSlowPeriod = 26; +/* Generated */ k1 = (double)0.075; +/* Generated */ } +/* Generated */ if( optInFastPeriod != 0 ) +/* Generated */ k2 = PER_TO_K(optInFastPeriod); +/* Generated */ else +/* Generated */ { +/* Generated */ optInFastPeriod = 12; +/* Generated */ k2 = (double)0.15; +/* Generated */ } +/* Generated */ lookbackSignal = LOOKBACK_CALL(EMA)( optInSignalPeriod_2 ); +/* Generated */ lookbackTotal = lookbackSignal; +/* Generated */ lookbackTotal += LOOKBACK_CALL(EMA)( optInSlowPeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ tempInteger = (endIdx-startIdx)+1+lookbackSignal; +/* Generated */ ARRAY_ALLOC( fastEMABuffer, tempInteger ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !fastEMABuffer ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ } +/* Generated */ #endif +/* Generated */ ARRAY_ALLOC( slowEMABuffer, tempInteger ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !slowEMABuffer ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ ARRAY_FREE( fastEMABuffer ); +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ } +/* Generated */ #endif +/* Generated */ tempInteger = startIdx-lookbackSignal; +/* Generated */ retCode = FUNCTION_CALL(INT_EMA)( tempInteger, endIdx, +/* Generated */ inReal, optInSlowPeriod, k1, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), slowEMABuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ ARRAY_FREE( fastEMABuffer ); +/* Generated */ ARRAY_FREE( slowEMABuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL(INT_EMA)( tempInteger, endIdx, +/* Generated */ inReal, optInFastPeriod, k2, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), fastEMABuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ ARRAY_FREE( fastEMABuffer ); +/* Generated */ ARRAY_FREE( slowEMABuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ if( (VALUE_HANDLE_GET(outBegIdx1) != tempInteger) || +/* Generated */ (VALUE_HANDLE_GET(outBegIdx2) != tempInteger) || +/* Generated */ (VALUE_HANDLE_GET(outNbElement1) != VALUE_HANDLE_GET(outNbElement2)) || +/* Generated */ (VALUE_HANDLE_GET(outNbElement1) != (endIdx-startIdx)+1+lookbackSignal) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ ARRAY_FREE( fastEMABuffer ); +/* Generated */ ARRAY_FREE( slowEMABuffer ); +/* Generated */ return TA_INTERNAL_ERROR(119); +/* Generated */ } +/* Generated */ for( i=0; i < VALUE_HANDLE_GET(outNbElement1); i++ ) +/* Generated */ fastEMABuffer[i] = fastEMABuffer[i] - slowEMABuffer[i]; +/* Generated */ ARRAY_MEMMOVE( outMACD, 0, fastEMABuffer, lookbackSignal, (endIdx-startIdx)+1 ); +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, VALUE_HANDLE_GET(outNbElement1)-1, +/* Generated */ fastEMABuffer, optInSignalPeriod_2, PER_TO_K(optInSignalPeriod_2), +/* Generated */ VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), outMACDSignal ); +/* Generated */ ARRAY_FREE( fastEMABuffer ); +/* Generated */ ARRAY_FREE( slowEMABuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ for( i=0; i < VALUE_HANDLE_GET(outNbElement2); i++ ) +/* Generated */ outMACDHist[i] = outMACD[i]-outMACDSignal[i]; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = VALUE_HANDLE_GET(outNbElement2); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MACDEXT.c b/src/ta_func/ta_MACDEXT.c new file mode 100644 index 000000000..0389cb950 --- /dev/null +++ b/src/ta_func/ta_MACDEXT.c @@ -0,0 +1,703 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MacdExtLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInSignalMAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int macdExtLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInSignalMAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_MACDEXT_Lookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSignalMAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int tempInteger, lookbackLargest; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastMAType < 0) || ((int)optInFastMAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowMAType < 0) || ((int)optInSlowMAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInSignalPeriod. */ +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSignalMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSignalMAType < 0) || ((int)optInSignalMAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* Find the MA with the largest lookback */ + lookbackLargest = LOOKBACK_CALL(MA)( optInFastPeriod, optInFastMAType ); + tempInteger = LOOKBACK_CALL(MA)( optInSlowPeriod, optInSlowMAType ); + if( tempInteger > lookbackLargest ) + lookbackLargest = tempInteger; + + /* Add to the largest MA lookback the signal line lookback */ + return lookbackLargest + LOOKBACK_CALL(MA)( optInSignalPeriod, optInSignalMAType ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MACDEXT - MACD with controllable MA type + * + * Input = double + * Output = double, double, double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInFastMAType: + * Type of Moving Average for fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * optInSlowMAType: + * Type of Moving Average for slow MA + * + * optInSignalPeriod:(From 1 to 100000) + * Smoothing for the signal line (nb of period) + * + * optInSignalMAType: + * Type of Moving Average for signal line + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MacdExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInSignalMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MacdExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInSignalMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode macdExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInSignalMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MACDEXT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSignalMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + ARRAY_REF( slowMABuffer ); + ARRAY_REF( fastMABuffer ); + ENUM_DECLARATION(RetCode) retCode; + int tempInteger; + VALUE_HANDLE_INT(outBegIdx1); + VALUE_HANDLE_INT(outNbElement1); + VALUE_HANDLE_INT(outBegIdx2); + VALUE_HANDLE_INT(outNbElement2); + int lookbackTotal, lookbackSignal, lookbackLargest; + int i; + ENUM_DECLARATION(MAType) tempMAType; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastMAType < 0) || ((int)optInFastMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowMAType < 0) || ((int)optInSlowMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInSignalPeriod. */ +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSignalMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSignalMAType < 0) || ((int)optInSignalMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMACD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outMACDSignal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outMACDHist ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Make sure slow is really slower than + * the fast period! if not, swap... + */ + if( optInSlowPeriod < optInFastPeriod ) + { + /* swap period */ + tempInteger = optInSlowPeriod; + optInSlowPeriod = optInFastPeriod; + optInFastPeriod = tempInteger; + /* swap type */ + tempMAType = optInSlowMAType; + optInSlowMAType = optInFastMAType; + optInFastMAType = tempMAType; + } + + /* Find the MA with the largest lookback */ + lookbackLargest = LOOKBACK_CALL(MA)( optInFastPeriod, optInFastMAType ); + tempInteger = LOOKBACK_CALL(MA)( optInSlowPeriod, optInSlowMAType ); + if( tempInteger > lookbackLargest ) + lookbackLargest = tempInteger; + + /* Add the lookback needed for the signal line */ + lookbackSignal = LOOKBACK_CALL(MA)( optInSignalPeriod, optInSignalMAType ); + lookbackTotal = lookbackSignal+lookbackLargest; + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Allocate intermediate buffer for fast/slow MA. */ + tempInteger = (endIdx-startIdx)+1+lookbackSignal; + ARRAY_ALLOC( fastMABuffer, tempInteger ); + #if !defined( _JAVA ) + if( !fastMABuffer ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + } + #endif + + ARRAY_ALLOC( slowMABuffer, tempInteger ); + #if !defined( _JAVA ) + if( !slowMABuffer ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + ARRAY_FREE( fastMABuffer ); + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + } + #endif + + /* Calculate the slow MA. + * + * Move back the startIdx to get enough data + * for the signal period. That way, once the + * signal calculation is done, all the output + * will start at the requested 'startIdx'. + */ + tempInteger = startIdx-lookbackSignal; + retCode = FUNCTION_CALL(MA)( tempInteger, endIdx, + inReal, optInSlowPeriod, optInSlowMAType, + VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), + slowMABuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + ARRAY_FREE( fastMABuffer ); + ARRAY_FREE( slowMABuffer ); + return retCode; + } + + /* Calculate the fast MA. */ + retCode = FUNCTION_CALL(MA)( tempInteger, endIdx, + inReal, optInFastPeriod, optInFastMAType, + VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), + fastMABuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + ARRAY_FREE( fastMABuffer ); + ARRAY_FREE( slowMABuffer ); + return retCode; + } + + /* Parano tests. Will be removed eventually. */ + if( (VALUE_HANDLE_GET(outBegIdx1) != tempInteger) || + (VALUE_HANDLE_GET(outBegIdx2) != tempInteger) || + (VALUE_HANDLE_GET(outNbElement1) != VALUE_HANDLE_GET(outNbElement2)) || + (VALUE_HANDLE_GET(outNbElement1) != (endIdx-startIdx)+1+lookbackSignal) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + ARRAY_FREE( fastMABuffer ); + ARRAY_FREE( slowMABuffer ); + return TA_INTERNAL_ERROR(119); + } + + /* Calculate (fast MA) - (slow MA). */ + for( i=0; i < VALUE_HANDLE_GET(outNbElement1); i++ ) + fastMABuffer[i] = fastMABuffer[i] - slowMABuffer[i]; + + /* Copy the result into the output for the caller. */ + ARRAY_MEMMOVE( outMACD, 0, fastMABuffer, lookbackSignal, (endIdx-startIdx)+1 ); + + /* Calculate the signal/trigger line. */ + retCode = FUNCTION_CALL_DOUBLE(MA)( 0, VALUE_HANDLE_GET(outNbElement1)-1, + fastMABuffer, optInSignalPeriod, optInSignalMAType, + VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), outMACDSignal ); + + ARRAY_FREE( fastMABuffer ); + ARRAY_FREE( slowMABuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + /* Calculate the histogram. */ + for( i=0; i < VALUE_HANDLE_GET(outNbElement2); i++ ) + outMACDHist[i] = outMACD[i]-outMACDSignal[i]; + + /* All done! Indicate the output limits and return success. */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = VALUE_HANDLE_GET(outNbElement2); + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MacdExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInSignalMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode macdExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MAType optInSignalMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MACDEXT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInFastMAType, +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInSlowMAType, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSignalMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF( slowMABuffer ); +/* Generated */ ARRAY_REF( fastMABuffer ); +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int tempInteger; +/* Generated */ VALUE_HANDLE_INT(outBegIdx1); +/* Generated */ VALUE_HANDLE_INT(outNbElement1); +/* Generated */ VALUE_HANDLE_INT(outBegIdx2); +/* Generated */ VALUE_HANDLE_INT(outNbElement2); +/* Generated */ int lookbackTotal, lookbackSignal, lookbackLargest; +/* Generated */ int i; +/* Generated */ ENUM_DECLARATION(MAType) tempMAType; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastMAType < 0) || ((int)optInFastMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowMAType < 0) || ((int)optInSlowMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSignalMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSignalMAType < 0) || ((int)optInSignalMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMACD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outMACDSignal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outMACDHist ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( optInSlowPeriod < optInFastPeriod ) +/* Generated */ { +/* Generated */ tempInteger = optInSlowPeriod; +/* Generated */ optInSlowPeriod = optInFastPeriod; +/* Generated */ optInFastPeriod = tempInteger; +/* Generated */ tempMAType = optInSlowMAType; +/* Generated */ optInSlowMAType = optInFastMAType; +/* Generated */ optInFastMAType = tempMAType; +/* Generated */ } +/* Generated */ lookbackLargest = LOOKBACK_CALL(MA)( optInFastPeriod, optInFastMAType ); +/* Generated */ tempInteger = LOOKBACK_CALL(MA)( optInSlowPeriod, optInSlowMAType ); +/* Generated */ if( tempInteger > lookbackLargest ) +/* Generated */ lookbackLargest = tempInteger; +/* Generated */ lookbackSignal = LOOKBACK_CALL(MA)( optInSignalPeriod, optInSignalMAType ); +/* Generated */ lookbackTotal = lookbackSignal+lookbackLargest; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ tempInteger = (endIdx-startIdx)+1+lookbackSignal; +/* Generated */ ARRAY_ALLOC( fastMABuffer, tempInteger ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !fastMABuffer ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ } +/* Generated */ #endif +/* Generated */ ARRAY_ALLOC( slowMABuffer, tempInteger ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !slowMABuffer ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ ARRAY_FREE( fastMABuffer ); +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ } +/* Generated */ #endif +/* Generated */ tempInteger = startIdx-lookbackSignal; +/* Generated */ retCode = FUNCTION_CALL(MA)( tempInteger, endIdx, +/* Generated */ inReal, optInSlowPeriod, optInSlowMAType, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), +/* Generated */ slowMABuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ ARRAY_FREE( fastMABuffer ); +/* Generated */ ARRAY_FREE( slowMABuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL(MA)( tempInteger, endIdx, +/* Generated */ inReal, optInFastPeriod, optInFastMAType, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), +/* Generated */ fastMABuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ ARRAY_FREE( fastMABuffer ); +/* Generated */ ARRAY_FREE( slowMABuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ if( (VALUE_HANDLE_GET(outBegIdx1) != tempInteger) || +/* Generated */ (VALUE_HANDLE_GET(outBegIdx2) != tempInteger) || +/* Generated */ (VALUE_HANDLE_GET(outNbElement1) != VALUE_HANDLE_GET(outNbElement2)) || +/* Generated */ (VALUE_HANDLE_GET(outNbElement1) != (endIdx-startIdx)+1+lookbackSignal) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ ARRAY_FREE( fastMABuffer ); +/* Generated */ ARRAY_FREE( slowMABuffer ); +/* Generated */ return TA_INTERNAL_ERROR(119); +/* Generated */ } +/* Generated */ for( i=0; i < VALUE_HANDLE_GET(outNbElement1); i++ ) +/* Generated */ fastMABuffer[i] = fastMABuffer[i] - slowMABuffer[i]; +/* Generated */ ARRAY_MEMMOVE( outMACD, 0, fastMABuffer, lookbackSignal, (endIdx-startIdx)+1 ); +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(MA)( 0, VALUE_HANDLE_GET(outNbElement1)-1, +/* Generated */ fastMABuffer, optInSignalPeriod, optInSignalMAType, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx2), VALUE_HANDLE_OUT(outNbElement2), outMACDSignal ); +/* Generated */ ARRAY_FREE( fastMABuffer ); +/* Generated */ ARRAY_FREE( slowMABuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ for( i=0; i < VALUE_HANDLE_GET(outNbElement2); i++ ) +/* Generated */ outMACDHist[i] = outMACD[i]-outMACDSignal[i]; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = VALUE_HANDLE_GET(outNbElement2); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MACDFIX.c b/src/ta_func/ta_MACDFIX.c new file mode 100644 index 000000000..78c2e1a4a --- /dev/null +++ b/src/ta_func/ta_MACDFIX.c @@ -0,0 +1,301 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MacdFixLookback( int optInSignalPeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int macdFixLookback( int optInSignalPeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MACDFIX_Lookback( int optInSignalPeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInSignalPeriod. */ +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* The lookback is driven by the signal line output. + * + * (must also account for the initial data consume + * by the fix 26 period EMA). + */ + return LOOKBACK_CALL(EMA)( 26 ) + + LOOKBACK_CALL(EMA)( optInSignalPeriod ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MACDFIX - Moving Average Convergence/Divergence Fix 12/26 + * + * Input = double + * Output = double, double, double + * + * Optional Parameters + * ------------------- + * optInSignalPeriod:(From 1 to 100000) + * Smoothing for the signal line (nb of period) + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MacdFix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MacdFix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode macdFix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MACDFIX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInSignalPeriod. */ +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMACD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outMACDSignal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outMACDHist ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + return FUNCTION_CALL(INT_MACD)( startIdx, endIdx, inReal, + 0, /* 0 indicate fix 12 == 0.15 for optInFastPeriod */ + 0, /* 0 indicate fix 26 == 0.075 for optInSlowPeriod */ + optInSignalPeriod, + outBegIdx, + outNBElement, + outMACD, + outMACDSignal, + outMACDHist ); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MacdFix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMACD, +/* Generated */ cli::array^ outMACDSignal, +/* Generated */ cli::array^ outMACDHist ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode macdFix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MACDFIX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMACD[], +/* Generated */ double outMACDSignal[], +/* Generated */ double outMACDHist[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSignalPeriod = 9; +/* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMACD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outMACDSignal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outMACDHist ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ return FUNCTION_CALL(INT_MACD)( startIdx, endIdx, inReal, +/* Generated */ 0, +/* Generated */ 0, +/* Generated */ optInSignalPeriod, +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ outMACD, +/* Generated */ outMACDSignal, +/* Generated */ outMACDHist ); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MAMA.c b/src/ta_func/ta_MAMA.c new file mode 100644 index 000000000..cb6b5476b --- /dev/null +++ b/src/ta_func/ta_MAMA.c @@ -0,0 +1,714 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 023003 MF Initial Coding of MAMA. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MamaLookback( double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit ) /* From 0.01 to 0.99 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int mamaLookback( double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit ) /* From 0.01 to 0.99 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MAMA_Lookback( double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit ) /* From 0.01 to 0.99 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInFastLimit == TA_REAL_DEFAULT ) +/* Generated */ optInFastLimit = 5.000000e-1; +/* Generated */ else if( (optInFastLimit < 1.000000e-2) ||/* Generated */ (optInFastLimit > 9.900000e-1) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInSlowLimit == TA_REAL_DEFAULT ) +/* Generated */ optInSlowLimit = 5.000000e-2; +/* Generated */ else if( (optInSlowLimit < 1.000000e-2) ||/* Generated */ (optInSlowLimit > 9.900000e-1) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* The two parameters are not a factor to determine + * the lookback, but are still requested for + * consistency with all other Lookback functions. + */ + UNUSED_VARIABLE(optInFastLimit); + UNUSED_VARIABLE(optInSlowLimit); + + /* Lookback is a fix amount + the unstable period. + * + * + * The fix lookback is 32 and is establish as follow: + * + * 12 price bar to be compatible with the implementation + * of TradeStation found in John Ehlers book. + * 6 price bars for the Detrender + * 6 price bars for Q1 + * 3 price bars for jI + * 3 price bars for jQ + * 1 price bar for Re/Im + * 1 price bar for the Delta Phase + * ------- + * 32 Total + */ + + return 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MAMA,Mama); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MAMA - MESA Adaptive Moving Average + * + * Input = double + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInFastLimit:(From 0.01 to 0.99) + * Upper limit use in the adaptive algorithm + * + * optInSlowLimit:(From 0.01 to 0.99) + * Lower limit use in the adaptive algorithm + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Mama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit, /* From 0.01 to 0.99 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMAMA, +/* Generated */ cli::array^ outFAMA ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Mama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit, /* From 0.01 to 0.99 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMAMA, +/* Generated */ cli::array^ outFAMA ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode mama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit, /* From 0.01 to 0.99 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMAMA[], +/* Generated */ double outFAMA[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MAMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit, /* From 0.01 to 0.99 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMAMA[], +/* Generated */ double outFAMA[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int outIdx, i; + int lookbackTotal, today; + double tempReal, tempReal2; + + double adjustedPrevPeriod, period; + + /* Variable used for the price smoother (a weighted moving average). */ + int trailingWMAIdx; + double periodWMASum, periodWMASub, trailingWMAValue; + double smoothedValue; + + /* Variables used for the Hilbert Transormation */ + CONSTANT_DOUBLE(a) = 0.0962; + CONSTANT_DOUBLE(b) = 0.5769; + double hilbertTempReal; + int hilbertIdx; + + HILBERT_VARIABLES( detrender ); + HILBERT_VARIABLES( Q1 ); + HILBERT_VARIABLES( jI ); + HILBERT_VARIABLES( jQ ); + + double Q2, I2, prevQ2, prevI2, Re, Im; + + double I1ForOddPrev2, I1ForOddPrev3; + double I1ForEvenPrev2, I1ForEvenPrev3; + + double rad2Deg; + + double mama,fama,todayValue,prevPhase; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInFastLimit == TA_REAL_DEFAULT ) +/* Generated */ optInFastLimit = 5.000000e-1; +/* Generated */ else if( (optInFastLimit < 1.000000e-2) ||/* Generated */ (optInFastLimit > 9.900000e-1) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInSlowLimit == TA_REAL_DEFAULT ) +/* Generated */ optInSlowLimit = 5.000000e-2; +/* Generated */ else if( (optInSlowLimit < 1.000000e-2) ||/* Generated */ (optInSlowLimit > 9.900000e-1) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMAMA ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outFAMA ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Constant */ + rad2Deg = 180.0 / (4.0 * std_atan(1)); + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MAMA,Mama); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + /* Initialize the price smoother, which is simply a weighted + * moving average of the price. + * To understand this algorithm, I strongly suggest to understand + * first how TA_WMA is done. + */ + trailingWMAIdx = startIdx - lookbackTotal; + today = trailingWMAIdx; + + /* Initialization is same as WMA, except loop is unrolled + * for speed optimization. + */ + tempReal = inReal[today++]; + periodWMASub = tempReal; + periodWMASum = tempReal; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*2.0; + tempReal = inReal[today++]; + periodWMASub += tempReal; + periodWMASum += tempReal*3.0; + + trailingWMAValue = 0.0; + + /* Subsequent WMA value are evaluated by using + * the DO_PRICE_WMA macro. + */ + #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ + periodWMASub += varNewPrice; \ + periodWMASub -= trailingWMAValue; \ + periodWMASum += varNewPrice*4.0; \ + trailingWMAValue = inReal[trailingWMAIdx++]; \ + varToStoreSmoothedValue = periodWMASum*0.1; \ + periodWMASum -= periodWMASub; \ + } + + i = 9; + do + { + tempReal = inReal[today++]; + DO_PRICE_WMA(tempReal,smoothedValue); + } while( --i != 0); + + /* Initialize the circular buffers used by the hilbert + * transform logic. + * A buffer is used for odd day and another for even days. + * This minimize the number of memory access and floating point + * operations needed (note also that by using static circular buffer, + * no large dynamic memory allocation is needed for storing + * intermediate calculation!). + */ + hilbertIdx = 0; + + INIT_HILBERT_VARIABLES(detrender); + INIT_HILBERT_VARIABLES(Q1); + INIT_HILBERT_VARIABLES(jI); + INIT_HILBERT_VARIABLES(jQ); + + period = 0.0; + outIdx = 0; + + prevI2 = prevQ2 = 0.0; + Re = Im = 0.0; + mama = fama = 0.0; + I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; + I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; + + prevPhase = 0.0; + + /* The code is speed optimized and is most likely very + * hard to follow if you do not already know well the + * original algorithm. + * To understadn better, it is strongly suggested to look + * first at the Excel implementation in "test_MAMA.xls" included + * in this package. + */ + while( today <= endIdx ) + { + adjustedPrevPeriod = (0.075*period)+0.54; + + todayValue = inReal[today]; + DO_PRICE_WMA(todayValue,smoothedValue); + + if( (today%2) == 0 ) + { + /* Do the Hilbert Transforms for even price bar */ + DO_HILBERT_EVEN(detrender,smoothedValue); + DO_HILBERT_EVEN(Q1,detrender); + DO_HILBERT_EVEN(jI,I1ForEvenPrev3); + DO_HILBERT_EVEN(jQ,Q1); + if( ++hilbertIdx == 3 ) + hilbertIdx = 0; + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); + + /* The variable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "odd" logic later. + */ + I1ForOddPrev3 = I1ForOddPrev2; + I1ForOddPrev2 = detrender; + + /* Put Alpha in tempReal2 */ + if( I1ForEvenPrev3 != 0.0 ) + tempReal2 = (std_atan(Q1/I1ForEvenPrev3)*rad2Deg); + else + tempReal2 = 0.0; + } + else + { + /* Do the Hilbert Transforms for odd price bar */ + DO_HILBERT_ODD(detrender,smoothedValue); + DO_HILBERT_ODD(Q1,detrender); + DO_HILBERT_ODD(jI,I1ForOddPrev3); + DO_HILBERT_ODD(jQ,Q1); + + Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); + I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); + + /* The varaiable I1 is the detrender delayed for + * 3 price bars. + * + * Save the current detrender value for being + * used by the "odd" logic later. + */ + I1ForEvenPrev3 = I1ForEvenPrev2; + I1ForEvenPrev2 = detrender; + + /* Put Alpha in tempReal2 */ + if( I1ForOddPrev3 != 0.0 ) + tempReal2 = (std_atan(Q1/I1ForOddPrev3)*rad2Deg); + else + tempReal2 = 0.0; + } + + /* Put Delta Phase into tempReal */ + tempReal = prevPhase - tempReal2; + prevPhase = tempReal2; + if( tempReal < 1.0 ) + tempReal = 1.0; + + /* Put Alpha into tempReal */ + if( tempReal > 1.0 ) + { + tempReal = optInFastLimit/tempReal; + if( tempReal < optInSlowLimit ) + tempReal = optInSlowLimit; + } + else + { + tempReal = optInFastLimit; + } + + /* Calculate MAMA, FAMA */ + mama = (tempReal*todayValue)+((1-tempReal)*mama); + tempReal *= 0.5; + fama = (tempReal*mama)+((1-tempReal)*fama); + if( today >= startIdx ) + { + outMAMA[outIdx] = mama; + outFAMA[outIdx++] = fama; + } + + /* Adjust the period for next price bar */ + Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); + Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); + prevQ2 = Q2; + prevI2 = I2; + tempReal = period; + if( (Im != 0.0) && (Re != 0.0) ) + period = 360.0 / (std_atan(Im/Re)*rad2Deg); + tempReal2 = 1.5*tempReal; + if( period > tempReal2) + period = tempReal2; + tempReal2 = 0.67*tempReal; + if( period < tempReal2 ) + period = tempReal2; + if( period < 6 ) + period = 6; + else if( period > 50 ) + period = 50; + period = (0.2*period) + (0.8 * tempReal); + + /* Ooof... let's do the next price bar now! */ + today++; + } + + /* Default return values */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Mama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit, /* From 0.01 to 0.99 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMAMA, +/* Generated */ cli::array^ outFAMA ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode mama( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit, /* From 0.01 to 0.99 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMAMA[], +/* Generated */ double outFAMA[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MAMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ double optInFastLimit, /* From 0.01 to 0.99 */ +/* Generated */ double optInSlowLimit, /* From 0.01 to 0.99 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMAMA[], +/* Generated */ double outFAMA[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ int lookbackTotal, today; +/* Generated */ double tempReal, tempReal2; +/* Generated */ double adjustedPrevPeriod, period; +/* Generated */ int trailingWMAIdx; +/* Generated */ double periodWMASum, periodWMASub, trailingWMAValue; +/* Generated */ double smoothedValue; +/* Generated */ CONSTANT_DOUBLE(a) = 0.0962; +/* Generated */ CONSTANT_DOUBLE(b) = 0.5769; +/* Generated */ double hilbertTempReal; +/* Generated */ int hilbertIdx; +/* Generated */ HILBERT_VARIABLES( detrender ); +/* Generated */ HILBERT_VARIABLES( Q1 ); +/* Generated */ HILBERT_VARIABLES( jI ); +/* Generated */ HILBERT_VARIABLES( jQ ); +/* Generated */ double Q2, I2, prevQ2, prevI2, Re, Im; +/* Generated */ double I1ForOddPrev2, I1ForOddPrev3; +/* Generated */ double I1ForEvenPrev2, I1ForEvenPrev3; +/* Generated */ double rad2Deg; +/* Generated */ double mama,fama,todayValue,prevPhase; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInFastLimit == TA_REAL_DEFAULT ) +/* Generated */ optInFastLimit = 5.000000e-1; +/* Generated */ else if( (optInFastLimit < 1.000000e-2) || (optInFastLimit > 9.900000e-1) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInSlowLimit == TA_REAL_DEFAULT ) +/* Generated */ optInSlowLimit = 5.000000e-2; +/* Generated */ else if( (optInSlowLimit < 1.000000e-2) || (optInSlowLimit > 9.900000e-1) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMAMA ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outFAMA ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ rad2Deg = 180.0 / (4.0 * std_atan(1)); +/* Generated */ lookbackTotal = 32 + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MAMA,Mama); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ trailingWMAIdx = startIdx - lookbackTotal; +/* Generated */ today = trailingWMAIdx; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub = tempReal; +/* Generated */ periodWMASum = tempReal; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*2.0; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ periodWMASub += tempReal; +/* Generated */ periodWMASum += tempReal*3.0; +/* Generated */ trailingWMAValue = 0.0; +/* Generated */ #define DO_PRICE_WMA(varNewPrice,varToStoreSmoothedValue) { \ +/* Generated */ periodWMASub += varNewPrice; \ +/* Generated */ periodWMASub -= trailingWMAValue; \ +/* Generated */ periodWMASum += varNewPrice*4.0; \ +/* Generated */ trailingWMAValue = inReal[trailingWMAIdx++]; \ +/* Generated */ varToStoreSmoothedValue = periodWMASum*0.1; \ +/* Generated */ periodWMASum -= periodWMASub; \ +/* Generated */ } +/* Generated */ i = 9; +/* Generated */ do +/* Generated */ { +/* Generated */ tempReal = inReal[today++]; +/* Generated */ DO_PRICE_WMA(tempReal,smoothedValue); +/* Generated */ } while( --i != 0); +/* Generated */ hilbertIdx = 0; +/* Generated */ INIT_HILBERT_VARIABLES(detrender); +/* Generated */ INIT_HILBERT_VARIABLES(Q1); +/* Generated */ INIT_HILBERT_VARIABLES(jI); +/* Generated */ INIT_HILBERT_VARIABLES(jQ); +/* Generated */ period = 0.0; +/* Generated */ outIdx = 0; +/* Generated */ prevI2 = prevQ2 = 0.0; +/* Generated */ Re = Im = 0.0; +/* Generated */ mama = fama = 0.0; +/* Generated */ I1ForOddPrev3 = I1ForEvenPrev3 = 0.0; +/* Generated */ I1ForOddPrev2 = I1ForEvenPrev2 = 0.0; +/* Generated */ prevPhase = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ adjustedPrevPeriod = (0.075*period)+0.54; +/* Generated */ todayValue = inReal[today]; +/* Generated */ DO_PRICE_WMA(todayValue,smoothedValue); +/* Generated */ if( (today%2) == 0 ) +/* Generated */ { +/* Generated */ DO_HILBERT_EVEN(detrender,smoothedValue); +/* Generated */ DO_HILBERT_EVEN(Q1,detrender); +/* Generated */ DO_HILBERT_EVEN(jI,I1ForEvenPrev3); +/* Generated */ DO_HILBERT_EVEN(jQ,Q1); +/* Generated */ if( ++hilbertIdx == 3 ) +/* Generated */ hilbertIdx = 0; +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForEvenPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForOddPrev3 = I1ForOddPrev2; +/* Generated */ I1ForOddPrev2 = detrender; +/* Generated */ if( I1ForEvenPrev3 != 0.0 ) +/* Generated */ tempReal2 = (std_atan(Q1/I1ForEvenPrev3)*rad2Deg); +/* Generated */ else +/* Generated */ tempReal2 = 0.0; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ DO_HILBERT_ODD(detrender,smoothedValue); +/* Generated */ DO_HILBERT_ODD(Q1,detrender); +/* Generated */ DO_HILBERT_ODD(jI,I1ForOddPrev3); +/* Generated */ DO_HILBERT_ODD(jQ,Q1); +/* Generated */ Q2 = (0.2*(Q1 + jI)) + (0.8*prevQ2); +/* Generated */ I2 = (0.2*(I1ForOddPrev3 - jQ)) + (0.8*prevI2); +/* Generated */ I1ForEvenPrev3 = I1ForEvenPrev2; +/* Generated */ I1ForEvenPrev2 = detrender; +/* Generated */ if( I1ForOddPrev3 != 0.0 ) +/* Generated */ tempReal2 = (std_atan(Q1/I1ForOddPrev3)*rad2Deg); +/* Generated */ else +/* Generated */ tempReal2 = 0.0; +/* Generated */ } +/* Generated */ tempReal = prevPhase - tempReal2; +/* Generated */ prevPhase = tempReal2; +/* Generated */ if( tempReal < 1.0 ) +/* Generated */ tempReal = 1.0; +/* Generated */ if( tempReal > 1.0 ) +/* Generated */ { +/* Generated */ tempReal = optInFastLimit/tempReal; +/* Generated */ if( tempReal < optInSlowLimit ) +/* Generated */ tempReal = optInSlowLimit; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ tempReal = optInFastLimit; +/* Generated */ } +/* Generated */ mama = (tempReal*todayValue)+((1-tempReal)*mama); +/* Generated */ tempReal *= 0.5; +/* Generated */ fama = (tempReal*mama)+((1-tempReal)*fama); +/* Generated */ if( today >= startIdx ) +/* Generated */ { +/* Generated */ outMAMA[outIdx] = mama; +/* Generated */ outFAMA[outIdx++] = fama; +/* Generated */ } +/* Generated */ Re = (0.2*((I2*prevI2)+(Q2*prevQ2)))+(0.8*Re); +/* Generated */ Im = (0.2*((I2*prevQ2)-(Q2*prevI2)))+(0.8*Im); +/* Generated */ prevQ2 = Q2; +/* Generated */ prevI2 = I2; +/* Generated */ tempReal = period; +/* Generated */ if( (Im != 0.0) && (Re != 0.0) ) +/* Generated */ period = 360.0 / (std_atan(Im/Re)*rad2Deg); +/* Generated */ tempReal2 = 1.5*tempReal; +/* Generated */ if( period > tempReal2) +/* Generated */ period = tempReal2; +/* Generated */ tempReal2 = 0.67*tempReal; +/* Generated */ if( period < tempReal2 ) +/* Generated */ period = tempReal2; +/* Generated */ if( period < 6 ) +/* Generated */ period = 6; +/* Generated */ else if( period > 50 ) +/* Generated */ period = 50; +/* Generated */ period = (0.2*period) + (0.8 * tempReal); +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MAVP.c b/src/ta_func/ta_MAVP.c new file mode 100644 index 000000000..79c2fdb6e --- /dev/null +++ b/src/ta_func/ta_MAVP.c @@ -0,0 +1,492 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 021807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MovingAverageVariablePeriodLookback( int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int movingAverageVariablePeriodLookback( int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_MAVP_Lookback( int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInMinPeriod. */ +/* Generated */ if( (int)optInMinPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInMinPeriod = 2; +/* Generated */ else if( ((int)optInMinPeriod < 2) || ((int)optInMinPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInMaxPeriod. */ +/* Generated */ if( (int)optInMaxPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInMaxPeriod = 30; +/* Generated */ else if( ((int)optInMaxPeriod < 2) || ((int)optInMaxPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + return LOOKBACK_CALL(MA)(optInMaxPeriod, optInMAType); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MAVP - Moving average with variable period + * + * Input = double, double + * Output = double + * + * Optional Parameters + * ------------------- + * optInMinPeriod:(From 2 to 100000) + * Value less than minimum will be changed to Minimum period + * + * optInMaxPeriod:(From 2 to 100000) + * Value higher than maximum will be changed to Maximum period + * + * optInMAType: + * Type of Moving Average + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MovingAverageVariablePeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ SubArray^ inPeriods, +/* Generated */ int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MovingAverageVariablePeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ cli::array^ inPeriods, +/* Generated */ int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode movingAverageVariablePeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ double inPeriods[], +/* Generated */ int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MAVP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ const double inPeriods[], +/* Generated */ int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int i, j, lookbackTotal, outputSize, tempInt, curPeriod; + ARRAY_INT_REF(localPeriodArray); + ARRAY_REF(localOutputArray); + VALUE_HANDLE_INT(localBegIdx); + VALUE_HANDLE_INT(localNbElement); + ENUM_DECLARATION(RetCode) retCode; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inPeriods ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInMinPeriod. */ +/* Generated */ if( (int)optInMinPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInMinPeriod = 2; +/* Generated */ else if( ((int)optInMinPeriod < 2) || ((int)optInMinPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInMaxPeriod. */ +/* Generated */ if( (int)optInMaxPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInMaxPeriod = 30; +/* Generated */ else if( ((int)optInMaxPeriod < 2) || ((int)optInMaxPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = LOOKBACK_CALL(MA)(optInMaxPeriod,optInMAType); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Calculate exact output size */ + if( lookbackTotal > startIdx ) + tempInt = lookbackTotal; + else + tempInt = startIdx; + if( tempInt > endIdx ) + { + /* No output */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + outputSize = endIdx - tempInt + 1; + + /* Allocate intermediate local buffer. */ + ARRAY_ALLOC(localOutputArray,outputSize); + ARRAY_INT_ALLOC(localPeriodArray,outputSize); + + /* Copy caller array of period into local buffer. + * At the same time, truncate to min/max. + */ + for( i=0; i < outputSize; i++ ) + { + tempInt = (int)(inPeriods[startIdx+i]); + if( tempInt < optInMinPeriod ) + tempInt = optInMinPeriod; + else if( tempInt > optInMaxPeriod ) + tempInt = optInMaxPeriod; + localPeriodArray[i] = tempInt; + } + + /* Process each element of the input. + * For each possible period value, the MA is calculated + * only once. + * The outReal is then fill up for all element with + * the same period. + * A local flag (value 0) is set in localPeriodArray + * to avoid doing a second time the same calculation. + */ + for( i=0; i < outputSize; i++ ) + { + curPeriod = localPeriodArray[i]; + if( curPeriod != 0 ) + { + /* TODO: This portion of the function can be slightly speed + * optimized by making the function without unstable period + * start their calculation at 'startIdx+i' instead of startIdx. + */ + + /* Calculation of the MA required. */ + retCode = FUNCTION_CALL(MA)( startIdx, endIdx, inReal, + curPeriod, optInMAType, + VALUE_HANDLE_OUT(localBegIdx),VALUE_HANDLE_OUT(localNbElement),localOutputArray ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + ARRAY_FREE(localOutputArray); + ARRAY_INT_FREE(localPeriodArray); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + outReal[i] = localOutputArray[i]; + for( j=i+1; j < outputSize; j++ ) + { + if( localPeriodArray[j] == curPeriod ) + { + localPeriodArray[j] = 0; /* Flag to avoid recalculation */ + outReal[j] = localOutputArray[j]; + } + } + } + } + + ARRAY_FREE(localOutputArray); + ARRAY_INT_FREE(localPeriodArray); + + /* Done. Inform the caller of the success. */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outputSize; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MovingAverageVariablePeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ cli::array^ inPeriods, +/* Generated */ int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode movingAverageVariablePeriod( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ float inPeriods[], +/* Generated */ int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MAVP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ const float inPeriods[], +/* Generated */ int optInMinPeriod, /* From 2 to 100000 */ +/* Generated */ int optInMaxPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int i, j, lookbackTotal, outputSize, tempInt, curPeriod; +/* Generated */ ARRAY_INT_REF(localPeriodArray); +/* Generated */ ARRAY_REF(localOutputArray); +/* Generated */ VALUE_HANDLE_INT(localBegIdx); +/* Generated */ VALUE_HANDLE_INT(localNbElement); +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inPeriods ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInMinPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInMinPeriod = 2; +/* Generated */ else if( ((int)optInMinPeriod < 2) || ((int)optInMinPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInMaxPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInMaxPeriod = 30; +/* Generated */ else if( ((int)optInMaxPeriod < 2) || ((int)optInMaxPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(MA)(optInMaxPeriod,optInMAType); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ if( lookbackTotal > startIdx ) +/* Generated */ tempInt = lookbackTotal; +/* Generated */ else +/* Generated */ tempInt = startIdx; +/* Generated */ if( tempInt > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outputSize = endIdx - tempInt + 1; +/* Generated */ ARRAY_ALLOC(localOutputArray,outputSize); +/* Generated */ ARRAY_INT_ALLOC(localPeriodArray,outputSize); +/* Generated */ for( i=0; i < outputSize; i++ ) +/* Generated */ { +/* Generated */ tempInt = (int)(inPeriods[startIdx+i]); +/* Generated */ if( tempInt < optInMinPeriod ) +/* Generated */ tempInt = optInMinPeriod; +/* Generated */ else if( tempInt > optInMaxPeriod ) +/* Generated */ tempInt = optInMaxPeriod; +/* Generated */ localPeriodArray[i] = tempInt; +/* Generated */ } +/* Generated */ for( i=0; i < outputSize; i++ ) +/* Generated */ { +/* Generated */ curPeriod = localPeriodArray[i]; +/* Generated */ if( curPeriod != 0 ) +/* Generated */ { +/* Generated */ retCode = FUNCTION_CALL(MA)( startIdx, endIdx, inReal, +/* Generated */ curPeriod, optInMAType, +/* Generated */ VALUE_HANDLE_OUT(localBegIdx),VALUE_HANDLE_OUT(localNbElement),localOutputArray ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ ARRAY_FREE(localOutputArray); +/* Generated */ ARRAY_INT_FREE(localPeriodArray); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ outReal[i] = localOutputArray[i]; +/* Generated */ for( j=i+1; j < outputSize; j++ ) +/* Generated */ { +/* Generated */ if( localPeriodArray[j] == curPeriod ) +/* Generated */ { +/* Generated */ localPeriodArray[j] = 0; +/* Generated */ outReal[j] = localOutputArray[j]; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ ARRAY_FREE(localOutputArray); +/* Generated */ ARRAY_INT_FREE(localPeriodArray); +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outputSize; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MAX.c b/src/ta_func/ta_MAX.c new file mode 100644 index 000000000..8dd1eb7c6 --- /dev/null +++ b/src/ta_func/ta_MAX.c @@ -0,0 +1,373 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * JV Jesus Viver <324122@cienz.unizar.es> + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 101902 JV Speed optimization of the algorithm + * 102202 MF Speed optimize a bit further + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MaxLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int maxLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MAX_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MAX - Highest value over a specified period + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Max( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Max( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #undef max +/* Generated */ public RetCode max( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MAX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double highest, tmp; + int outIdx, nbInitialElementNeeded; + int trailingIdx, today, i, highestIdx; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + highestIdx = -1; + highest = 0.0; + + while( today <= endIdx ) + { + tmp = inReal[today]; + + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inReal[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmp = inReal[i]; + if( tmp > highest ) + { + highestIdx = i; + highest = tmp; + } + } + } + else if( tmp >= highest ) + { + highestIdx = today; + highest = tmp; + } + + outReal[outIdx++] = highest; + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Max( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode max( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MAX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double highest, tmp; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, today, i, highestIdx; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ highestIdx = -1; +/* Generated */ highest = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inReal[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inReal[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inReal[i]; +/* Generated */ if( tmp > highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ outReal[outIdx++] = highest; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MAXINDEX.c b/src/ta_func/ta_MAXINDEX.c new file mode 100644 index 000000000..cbfea141d --- /dev/null +++ b/src/ta_func/ta_MAXINDEX.c @@ -0,0 +1,368 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120806 AC Creation (equal to MAX but outputs index) + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MaxIndexLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int maxIndexLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MAXINDEX_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MAXINDEX - Index of highest value over a specified period + * + * Input = double + * Output = int + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MaxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MaxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode maxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MAXINDEX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double highest, tmp; + int outIdx, nbInitialElementNeeded; + int trailingIdx, today, i, highestIdx; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + highestIdx = -1; + highest = 0.0; + + while( today <= endIdx ) + { + tmp = inReal[today]; + + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inReal[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmp = inReal[i]; + if( tmp > highest ) + { + highestIdx = i; + highest = tmp; + } + } + } + else if( tmp >= highest ) + { + highestIdx = today; + highest = tmp; + } + + outInteger[outIdx++] = highestIdx; + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MaxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode maxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MAXINDEX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double highest, tmp; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, today, i, highestIdx; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ highestIdx = -1; +/* Generated */ highest = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inReal[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inReal[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inReal[i]; +/* Generated */ if( tmp > highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ outInteger[outIdx++] = highestIdx; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MEDPRICE.c b/src/ta_func/ta_MEDPRICE.c new file mode 100644 index 000000000..53e178bbd --- /dev/null +++ b/src/ta_func/ta_MEDPRICE.c @@ -0,0 +1,264 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 112605 MF Fix outBegIdx when startIdx != 0 + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MedPriceLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int medPriceLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MEDPRICE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* This function have no lookback needed. */ + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MEDPRICE - Median Price + * + * Input = High, Low + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MedPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MedPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode medPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MEDPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int outIdx, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* MEDPRICE = (High + Low ) / 2 + * This is the high and low of the same price bar. + * + * See MIDPRICE to use instead the highest high and lowest + * low over multiple price bar. + */ + + outIdx = 0; + + for( i=startIdx; i <= endIdx; i++ ) + { + outReal[outIdx++] = (inHigh[i]+inLow[i])/2.0; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MedPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode medPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MEDPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ outIdx = 0; +/* Generated */ for( i=startIdx; i <= endIdx; i++ ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = (inHigh[i]+inLow[i])/2.0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MFI.c b/src/ta_func/ta_MFI.c new file mode 100644 index 000000000..07fb70843 --- /dev/null +++ b/src/ta_func/ta_MFI.c @@ -0,0 +1,572 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * BT BobTrader (TADoc.org forum user). + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 062704 MF Prevent divide by zero. + * 121705 MF Java port related changes. + * 060907 MF,BT Fix #1727704. MFI logic bug when no price movement + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MfiLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int mfiLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MFI_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MFI,Mfi); +} + +#if defined( _MANAGED ) + ref class MoneyFlow + { + public: + double positive; + double negative; + }; +#elif defined( _JAVA ) + // See MoneyFlow.java for the definition. +#else + typedef struct + { + double positive; + double negative; + } MoneyFlow; +#endif + + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MFI - Money Flow Index + * + * Input = High, Low, Close, Volume + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Mfi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ SubArray^ inVolume, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Mfi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ cli::array^ inVolume, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode mfi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ double inVolume[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MFI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ const double inVolume[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + double posSumMF, negSumMF, prevValue; + double tempValue1, tempValue2; + int lookbackTotal, outIdx, i, today; + + CIRCBUF_PROLOG_CLASS( mflow, MoneyFlow, 50 ); /* Id, Type, Static Size */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose||!inVolume) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + CIRCBUF_INIT_CLASS( mflow, MoneyFlow, optInTimePeriod ); + + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MFI,Mfi); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + CIRCBUF_DESTROY(mflow); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + outIdx = 0; /* Index into the output. */ + + /* Accumulate the positive and negative money flow + * among the initial period. + */ + today = startIdx-lookbackTotal; + prevValue = (inHigh[today]+inLow[today]+inClose[today])/3.0; + + posSumMF = 0.0; + negSumMF = 0.0; + today++; + for( i=optInTimePeriod; i > 0; i-- ) + { + tempValue1 = (inHigh[today]+inLow[today]+inClose[today])/3.0; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + tempValue1 *= inVolume[today++]; + if( tempValue2 < 0 ) + { + CIRCBUF_REF(mflow[mflow_Idx])negative = tempValue1; + negSumMF += tempValue1; + CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; + } + else if( tempValue2 > 0 ) + { + CIRCBUF_REF(mflow[mflow_Idx])positive = tempValue1; + posSumMF += tempValue1; + CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; + } + else + { + CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; + CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; + } + + CIRCBUF_NEXT(mflow); + } + + /* The following two equations are equivalent: + * MFI = 100 - (100 / 1 + (posSumMF/negSumMF)) + * MFI = 100 * (posSumMF/(posSumMF+negSumMF)) + * The second equation is used here for speed optimization. + */ + if( today > startIdx ) + { + tempValue1 = posSumMF+negSumMF; + if( tempValue1 < 1.0 ) + outReal[outIdx++] = 0.0; + else + outReal[outIdx++] = 100.0*(posSumMF/tempValue1); + } + else + { + /* Skip the unstable period. Do the processing + * but do not write it in the output. + */ + while( today < startIdx ) + { + posSumMF -= CIRCBUF_REF(mflow[mflow_Idx])positive; + negSumMF -= CIRCBUF_REF(mflow[mflow_Idx])negative; + + tempValue1 = (inHigh[today]+inLow[today]+inClose[today])/3.0; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + tempValue1 *= inVolume[today++]; + if( tempValue2 < 0 ) + { + CIRCBUF_REF(mflow[mflow_Idx])negative = tempValue1; + negSumMF += tempValue1; + CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; + } + else if( tempValue2 > 0 ) + { + CIRCBUF_REF(mflow[mflow_Idx])positive = tempValue1; + posSumMF += tempValue1; + CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; + } + else + { + CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; + CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; + } + + CIRCBUF_NEXT(mflow); + } + } + + /* Unstable period skipped... now continue + * processing if needed. + */ + while( today <= endIdx ) + { + posSumMF -= CIRCBUF_REF(mflow[mflow_Idx])positive; + negSumMF -= CIRCBUF_REF(mflow[mflow_Idx])negative; + + tempValue1 = (inHigh[today]+inLow[today]+inClose[today])/3.0; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + tempValue1 *= inVolume[today++]; + if( tempValue2 < 0 ) + { + CIRCBUF_REF(mflow[mflow_Idx])negative = tempValue1; + negSumMF += tempValue1; + CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; + } + else if( tempValue2 > 0 ) + { + CIRCBUF_REF(mflow[mflow_Idx])positive = tempValue1; + posSumMF += tempValue1; + CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; + } + else + { + CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; + CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; + } + + tempValue1 = posSumMF+negSumMF; + if( tempValue1 < 1.0 ) + outReal[outIdx++] = 0.0; + else + outReal[outIdx++] = 100.0*(posSumMF/tempValue1); + + CIRCBUF_NEXT(mflow); + } + + CIRCBUF_DESTROY(mflow); + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Mfi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ cli::array^ inVolume, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode mfi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ float inVolume[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MFI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ const float inVolume[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double posSumMF, negSumMF, prevValue; +/* Generated */ double tempValue1, tempValue2; +/* Generated */ int lookbackTotal, outIdx, i, today; +/* Generated */ CIRCBUF_PROLOG_CLASS( mflow, MoneyFlow, 50 ); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose||!inVolume) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ CIRCBUF_INIT_CLASS( mflow, MoneyFlow, optInTimePeriod ); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MFI,Mfi); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ CIRCBUF_DESTROY(mflow); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx-lookbackTotal; +/* Generated */ prevValue = (inHigh[today]+inLow[today]+inClose[today])/3.0; +/* Generated */ posSumMF = 0.0; +/* Generated */ negSumMF = 0.0; +/* Generated */ today++; +/* Generated */ for( i=optInTimePeriod; i > 0; i-- ) +/* Generated */ { +/* Generated */ tempValue1 = (inHigh[today]+inLow[today]+inClose[today])/3.0; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ tempValue1 *= inVolume[today++]; +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = tempValue1; +/* Generated */ negSumMF += tempValue1; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; +/* Generated */ } +/* Generated */ else if( tempValue2 > 0 ) +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = tempValue1; +/* Generated */ posSumMF += tempValue1; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; +/* Generated */ } +/* Generated */ CIRCBUF_NEXT(mflow); +/* Generated */ } +/* Generated */ if( today > startIdx ) +/* Generated */ { +/* Generated */ tempValue1 = posSumMF+negSumMF; +/* Generated */ if( tempValue1 < 1.0 ) +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ else +/* Generated */ outReal[outIdx++] = 100.0*(posSumMF/tempValue1); +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ while( today < startIdx ) +/* Generated */ { +/* Generated */ posSumMF -= CIRCBUF_REF(mflow[mflow_Idx])positive; +/* Generated */ negSumMF -= CIRCBUF_REF(mflow[mflow_Idx])negative; +/* Generated */ tempValue1 = (inHigh[today]+inLow[today]+inClose[today])/3.0; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ tempValue1 *= inVolume[today++]; +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = tempValue1; +/* Generated */ negSumMF += tempValue1; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; +/* Generated */ } +/* Generated */ else if( tempValue2 > 0 ) +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = tempValue1; +/* Generated */ posSumMF += tempValue1; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; +/* Generated */ } +/* Generated */ CIRCBUF_NEXT(mflow); +/* Generated */ } +/* Generated */ } +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ posSumMF -= CIRCBUF_REF(mflow[mflow_Idx])positive; +/* Generated */ negSumMF -= CIRCBUF_REF(mflow[mflow_Idx])negative; +/* Generated */ tempValue1 = (inHigh[today]+inLow[today]+inClose[today])/3.0; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ tempValue1 *= inVolume[today++]; +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = tempValue1; +/* Generated */ negSumMF += tempValue1; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; +/* Generated */ } +/* Generated */ else if( tempValue2 > 0 ) +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = tempValue1; +/* Generated */ posSumMF += tempValue1; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])positive = 0.0; +/* Generated */ CIRCBUF_REF(mflow[mflow_Idx])negative = 0.0; +/* Generated */ } +/* Generated */ tempValue1 = posSumMF+negSumMF; +/* Generated */ if( tempValue1 < 1.0 ) +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ else +/* Generated */ outReal[outIdx++] = 100.0*(posSumMF/tempValue1); +/* Generated */ CIRCBUF_NEXT(mflow); +/* Generated */ } +/* Generated */ CIRCBUF_DESTROY(mflow); +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MIDPOINT.c b/src/ta_func/ta_MIDPOINT.c new file mode 100644 index 000000000..f101515e4 --- /dev/null +++ b/src/ta_func/ta_MIDPOINT.c @@ -0,0 +1,345 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MidPointLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int midPointLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MIDPOINT_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MIDPOINT - MidPoint over period + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MidPoint( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MidPoint( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode midPoint( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MIDPOINT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + double lowest, highest, tmp; + int outIdx, nbInitialElementNeeded; + int trailingIdx, today, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Find the highest and lowest value of a timeserie + * over the period. + * MIDPOINT = (Highest Value + Lowest Value)/2 + * + * See MIDPRICE if the input is a price bar with a + * high and low timeserie. + */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + + while( today <= endIdx ) + { + lowest = inReal[trailingIdx++]; + highest = lowest; + for( i=trailingIdx; i <= today; i++ ) + { + tmp = inReal[i]; + if( tmp < lowest ) lowest= tmp; + else if( tmp > highest) highest = tmp; + } + + outReal[outIdx++] = (highest+lowest)/2.0; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MidPoint( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode midPoint( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MIDPOINT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double lowest, highest, tmp; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, today, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ lowest = inReal[trailingIdx++]; +/* Generated */ highest = lowest; +/* Generated */ for( i=trailingIdx; i <= today; i++ ) +/* Generated */ { +/* Generated */ tmp = inReal[i]; +/* Generated */ if( tmp < lowest ) lowest= tmp; +/* Generated */ else if( tmp > highest) highest = tmp; +/* Generated */ } +/* Generated */ outReal[outIdx++] = (highest+lowest)/2.0; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MIDPRICE.c b/src/ta_func/ta_MIDPRICE.c new file mode 100644 index 000000000..82156a501 --- /dev/null +++ b/src/ta_func/ta_MIDPRICE.c @@ -0,0 +1,357 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MidPriceLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int midPriceLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MIDPRICE_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MIDPRICE - Midpoint Price over period + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MidPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MidPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode midPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MIDPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + double lowest, highest, tmp; + int outIdx, nbInitialElementNeeded; + int trailingIdx, today, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* MIDPRICE = (Highest High + Lowest Low)/2 + * + * This function is equivalent to MEDPRICE when the + * period is 1. + */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + + while( today <= endIdx ) + { + lowest = inLow[trailingIdx]; + highest = inHigh[trailingIdx]; + trailingIdx++; + for( i=trailingIdx; i <= today; i++ ) + { + tmp = inLow[i]; + if( tmp < lowest ) lowest= tmp; + tmp = inHigh[i]; + if( tmp > highest) highest = tmp; + } + + outReal[outIdx++] = (highest+lowest)/2.0; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MidPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode midPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MIDPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double lowest, highest, tmp; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, today, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ lowest = inLow[trailingIdx]; +/* Generated */ highest = inHigh[trailingIdx]; +/* Generated */ trailingIdx++; +/* Generated */ for( i=trailingIdx; i <= today; i++ ) +/* Generated */ { +/* Generated */ tmp = inLow[i]; +/* Generated */ if( tmp < lowest ) lowest= tmp; +/* Generated */ tmp = inHigh[i]; +/* Generated */ if( tmp > highest) highest = tmp; +/* Generated */ } +/* Generated */ outReal[outIdx++] = (highest+lowest)/2.0; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MIN.c b/src/ta_func/ta_MIN.c new file mode 100644 index 000000000..642b87016 --- /dev/null +++ b/src/ta_func/ta_MIN.c @@ -0,0 +1,373 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * JV Jesus Viver <324122@cienz.unizar.es> + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 101902 JV Speed optimization of the algorithm + * 102202 MF Speed optimize a bit further + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MinLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int minLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MIN_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MIN - Lowest value over a specified period + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Min( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Min( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #undef min +/* Generated */ public RetCode min( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MIN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double lowest, tmp; + int outIdx, nbInitialElementNeeded; + int trailingIdx, lowestIdx, today, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + lowestIdx = -1; + lowest = 0.0; + + while( today <= endIdx ) + { + tmp = inReal[today]; + + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inReal[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmp = inReal[i]; + if( tmp < lowest ) + { + lowestIdx = i; + lowest = tmp; + } + } + } + else if( tmp <= lowest ) + { + lowestIdx = today; + lowest = tmp; + } + + outReal[outIdx++] = lowest; + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Min( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode min( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MIN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double lowest, tmp; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, lowestIdx, today, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ lowestIdx = -1; +/* Generated */ lowest = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inReal[today]; +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inReal[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inReal[i]; +/* Generated */ if( tmp < lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ outReal[outIdx++] = lowest; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MININDEX.c b/src/ta_func/ta_MININDEX.c new file mode 100644 index 000000000..070c318b5 --- /dev/null +++ b/src/ta_func/ta_MININDEX.c @@ -0,0 +1,368 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120806 AC Creation (equal to MIN but outputs index) + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MinIndexLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int minIndexLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MININDEX_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MININDEX - Index of lowest value over a specified period + * + * Input = double + * Output = int + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MinIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MININDEX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double lowest, tmp; + int outIdx, nbInitialElementNeeded; + int trailingIdx, lowestIdx, today, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + lowestIdx = -1; + lowest = 0.0; + + while( today <= endIdx ) + { + tmp = inReal[today]; + + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inReal[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmp = inReal[i]; + if( tmp < lowest ) + { + lowestIdx = i; + lowest = tmp; + } + } + } + else if( tmp <= lowest ) + { + lowestIdx = today; + lowest = tmp; + } + + outInteger[outIdx++] = lowestIdx; + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outInteger ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MININDEX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outInteger[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double lowest, tmp; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, lowestIdx, today, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outInteger ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ lowestIdx = -1; +/* Generated */ lowest = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inReal[today]; +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inReal[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inReal[i]; +/* Generated */ if( tmp < lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ outInteger[outIdx++] = lowestIdx; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MINMAX.c b/src/ta_func/ta_MINMAX.c new file mode 100644 index 000000000..13e00e337 --- /dev/null +++ b/src/ta_func/ta_MINMAX.c @@ -0,0 +1,429 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120906 AC Creation + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MinMaxLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int minMaxLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MINMAX_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MINMAX - Lowest and highest values over a specified period + * + * Input = double + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MinMax( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMin, +/* Generated */ cli::array^ outMax ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinMax( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMin, +/* Generated */ cli::array^ outMax ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minMax( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMin[], +/* Generated */ double outMax[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MINMAX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMin[], +/* Generated */ double outMax[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double highest, lowest, tmpHigh, tmpLow; + int outIdx, nbInitialElementNeeded; + int trailingIdx, today, i, highestIdx, lowestIdx; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMin ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outMax ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + highestIdx = -1; + highest = 0.0; + lowestIdx = -1; + lowest = 0.0; + + while( today <= endIdx ) + { + tmpLow = tmpHigh = inReal[today]; + + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inReal[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmpHigh = inReal[i]; + if( tmpHigh > highest ) + { + highestIdx = i; + highest = tmpHigh; + } + } + } + else if( tmpHigh >= highest ) + { + highestIdx = today; + highest = tmpHigh; + } + + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inReal[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmpLow = inReal[i]; + if( tmpLow < lowest ) + { + lowestIdx = i; + lowest = tmpLow; + } + } + } + else if( tmpLow <= lowest ) + { + lowestIdx = today; + lowest = tmpLow; + } + + outMax[outIdx] = highest; + outMin[outIdx] = lowest; + outIdx++; + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinMax( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMin, +/* Generated */ cli::array^ outMax ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minMax( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outMin[], +/* Generated */ double outMax[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MINMAX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outMin[], +/* Generated */ double outMax[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double highest, lowest, tmpHigh, tmpLow; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, today, i, highestIdx, lowestIdx; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMin ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outMax ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ highestIdx = -1; +/* Generated */ highest = 0.0; +/* Generated */ lowestIdx = -1; +/* Generated */ lowest = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmpLow = tmpHigh = inReal[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inReal[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmpHigh = inReal[i]; +/* Generated */ if( tmpHigh > highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmpHigh; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmpHigh >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmpHigh; +/* Generated */ } +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inReal[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmpLow = inReal[i]; +/* Generated */ if( tmpLow < lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmpLow; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmpLow <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmpLow; +/* Generated */ } +/* Generated */ outMax[outIdx] = highest; +/* Generated */ outMin[outIdx] = lowest; +/* Generated */ outIdx++; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MINMAXINDEX.c b/src/ta_func/ta_MINMAXINDEX.c new file mode 100644 index 000000000..ad2b7f2fe --- /dev/null +++ b/src/ta_func/ta_MINMAXINDEX.c @@ -0,0 +1,429 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * AC Angelo Ciceri + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120906 AC Creation (equal to MINMAX but outputs index) + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MinMaxIndexLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int minMaxIndexLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MINMAXINDEX_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MINMAXINDEX - Indexes of lowest and highest values over a specified period + * + * Input = double + * Output = int, int + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MinMaxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMinIdx, +/* Generated */ cli::array^ outMaxIdx ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinMaxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMinIdx, +/* Generated */ cli::array^ outMaxIdx ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minMaxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outMinIdx[], +/* Generated */ int outMaxIdx[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MINMAXINDEX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outMinIdx[], +/* Generated */ int outMaxIdx[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double highest, lowest, tmpHigh, tmpLow; + int outIdx, nbInitialElementNeeded; + int trailingIdx, today, i, highestIdx, lowestIdx; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMinIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outMaxIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + highestIdx = -1; + highest = 0.0; + lowestIdx = -1; + lowest = 0.0; + + while( today <= endIdx ) + { + tmpLow = tmpHigh = inReal[today]; + + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inReal[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmpHigh = inReal[i]; + if( tmpHigh > highest ) + { + highestIdx = i; + highest = tmpHigh; + } + } + } + else if( tmpHigh >= highest ) + { + highestIdx = today; + highest = tmpHigh; + } + + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inReal[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmpLow = inReal[i]; + if( tmpLow < lowest ) + { + lowestIdx = i; + lowest = tmpLow; + } + } + } + else if( tmpLow <= lowest ) + { + lowestIdx = today; + lowest = tmpLow; + } + + outMaxIdx[outIdx] = highestIdx; + outMinIdx[outIdx] = lowestIdx; + outIdx++; + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinMaxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outMinIdx, +/* Generated */ cli::array^ outMaxIdx ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minMaxIndex( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ int outMinIdx[], +/* Generated */ int outMaxIdx[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MINMAXINDEX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ int outMinIdx[], +/* Generated */ int outMaxIdx[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double highest, lowest, tmpHigh, tmpLow; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, today, i, highestIdx, lowestIdx; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outMinIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outMaxIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ highestIdx = -1; +/* Generated */ highest = 0.0; +/* Generated */ lowestIdx = -1; +/* Generated */ lowest = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmpLow = tmpHigh = inReal[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inReal[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmpHigh = inReal[i]; +/* Generated */ if( tmpHigh > highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmpHigh; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmpHigh >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmpHigh; +/* Generated */ } +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inReal[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmpLow = inReal[i]; +/* Generated */ if( tmpLow < lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmpLow; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ else if( tmpLow <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmpLow; +/* Generated */ } +/* Generated */ outMaxIdx[outIdx] = highestIdx; +/* Generated */ outMinIdx[outIdx] = lowestIdx; +/* Generated */ outIdx++; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MINUS_DI.c b/src/ta_func/ta_MINUS_DI.c new file mode 100644 index 000000000..eb14f38c8 --- /dev/null +++ b/src/ta_func/ta_MINUS_DI.c @@ -0,0 +1,703 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AM Adrian Michel + * MIF Mirek Fontan (mira@fontan.cz) + * CF Christo Fogelberg + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 082303 MF Fix #792298. Remove rounding. Bug reported by AM. + * 062704 MF Fix #965557. Div by zero bug reported by MIF. + * 122204 MF,CF Fix #1090231. Issues when period is 1. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MinusDILookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int minusDILookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MINUS_DI_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + if( optInTimePeriod > 1 ) + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DI,MinusDI); + else + return 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MINUS_DI - Minus Directional Indicator + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MinusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MINUS_DI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int today, lookbackTotal, outIdx; + double prevHigh, prevLow, prevClose; + double prevMinusDM, prevTR; + double tempReal, tempReal2, diffP, diffM; + + int i; + + #define TRUE_RANGE(TH,TL,YC,OUT) {\ + OUT = TH-TL; \ + tempReal2 = std_fabs(TH-YC); \ + if( tempReal2 > OUT ) \ + OUT = tempReal2; \ + tempReal2 = std_fabs(TL-YC); \ + if( tempReal2 > OUT ) \ + OUT = tempReal2; \ + } + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* + * The DM1 (one period) is base on the largest part of + * today's range that is outside of yesterdays range. + * + * The following 7 cases explain how the +DM and -DM are + * calculated on one period: + * + * Case 1: Case 2: + * C| A| + * | | C| + * | +DM1 = (C-A) B| | +DM1 = 0 + * | -DM1 = 0 | -DM1 = (B-D) + * A| | D| + * | D| + * B| + * + * Case 3: Case 4: + * C| C| + * | A| | + * | +DM1 = (C-A) | | +DM1 = 0 + * | -DM1 = 0 B| | -DM1 = (B-D) + * A| | | + * | | D| + * B| | + * D| + * + * Case 5: Case 6: + * A| A| C| + * | C| +DM1 = 0 | | +DM1 = 0 + * | | -DM1 = 0 | | -DM1 = 0 + * | D| | | + * B| B| D| + * + * + * Case 7: + * + * C| + * A| | + * | | +DM1=0 + * B| | -DM1=0 + * D| + * + * In case 3 and 4, the rule is that the smallest delta between + * (C-A) and (B-D) determine which of +DM or -DM is zero. + * + * In case 7, (C-A) and (B-D) are equal, so both +DM and -DM are + * zero. + * + * The rules remain the same when A=B and C=D (when the highs + * equal the lows). + * + * When calculating the DM over a period > 1, the one-period DM + * for the desired period are initialy sum. In other word, + * for a -DM14, sum the -DM1 for the first 14 days (that's + * 13 values because there is no DM for the first day!) + * Subsequent DM are calculated using the Wilder's + * smoothing approach: + * + * Previous -DM14 + * Today's -DM14 = Previous -DM14 - -------------- + Today's -DM1 + * 14 + * + * Calculation of a -DI14 is as follow: + * + * -DM14 + * -DI14 = -------- + * TR14 + * + * Calculation of the TR14 is: + * + * Previous TR14 + * Today's TR14 = Previous TR14 - -------------- + Today's TR1 + * 14 + * + * The first TR14 is the summation of the first 14 TR1. See the + * TA_TRANGE function on how to calculate the true range. + * + * Reference: + * New Concepts In Technical Trading Systems, J. Welles Wilder Jr + */ + + /* Original implementation from Wilder's book was doing some integer + * rounding in its calculations. + * + * This was understandable in the context that at the time the book + * was written, most user were doing the calculation by hand. + * + * For a computer, rounding is unnecessary (and even problematic when inputs + * are close to 1). + * + * TA-Lib does not do the rounding. Still, if you want to reproduce Wilder's examples, + * you can comment out the following #undef/#define and rebuild the library. + */ + #undef round_pos + #define round_pos(x) (x) + + if( optInTimePeriod > 1 ) + lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DI,MinusDI); + else + lookbackTotal = 1; + + /* Adjust startIdx to account for the lookback period. */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Indicate where the next output should be put + * in the outReal. + */ + outIdx = 0; + + /* Trap the case where no smoothing is needed. */ + if( optInTimePeriod <= 1 ) + { + /* No smoothing needed. Just do the following: + * for each price bar. + * -DM1 + * -DI1 = ---- + * TR1 + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + today = startIdx-1; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + prevClose = inClose[today]; + while( today < endIdx ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + if( TA_IS_ZERO(tempReal) ) + outReal[outIdx++] = (double)0.0; + else + outReal[outIdx++] = diffM/tempReal; + } + else + outReal[outIdx++] = (double)0.0; + prevClose = inClose[today]; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Process the initial DM and TR */ + VALUE_HANDLE_DEREF(outBegIdx) = today = startIdx; + + prevMinusDM = 0.0; + prevTR = 0.0; + today = startIdx - lookbackTotal; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + prevClose = inClose[today]; + i = optInTimePeriod-1; + while( i-- > 0 ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR += tempReal; + prevClose = inClose[today]; + } + + /* Process subsequent DI */ + + /* Skip the unstable period. Note that this loop must be executed + * at least ONCE to calculate the first DI. + */ + i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DI,MinusDI) + 1; + while( i-- != 0 ) + { + /* Calculate the prevMinusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod) + diffM; + } + else + { + /* Case 1,3,5 and 7 */ + prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod); + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + } + + + /* Now start to write the output in + * the caller provided outReal. + */ + if( !TA_IS_ZERO(prevTR) ) + outReal[0] = round_pos(100.0*(prevMinusDM/prevTR)); + else + outReal[0] = 0.0; + outIdx = 1; + + while( today < endIdx ) + { + /* Calculate the prevMinusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod) + diffM; + } + else + { + /* Case 1,3,5 and 7 */ + prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod); + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + + /* Calculate the DI. The value is rounded (see Wilder book). */ + if( !TA_IS_ZERO(prevTR) ) + outReal[outIdx++] = round_pos(100.0*(prevMinusDM/prevTR)); + else + outReal[outIdx++] = 0.0; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MINUS_DI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int today, lookbackTotal, outIdx; +/* Generated */ double prevHigh, prevLow, prevClose; +/* Generated */ double prevMinusDM, prevTR; +/* Generated */ double tempReal, tempReal2, diffP, diffM; +/* Generated */ int i; +/* Generated */ #define TRUE_RANGE(TH,TL,YC,OUT) {\ +/* Generated */ OUT = TH-TL; \ +/* Generated */ tempReal2 = std_fabs(TH-YC); \ +/* Generated */ if( tempReal2 > OUT ) \ +/* Generated */ OUT = tempReal2; \ +/* Generated */ tempReal2 = std_fabs(TL-YC); \ +/* Generated */ if( tempReal2 > OUT ) \ +/* Generated */ OUT = tempReal2; \ +/* Generated */ } +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ #undef round_pos +/* Generated */ #define round_pos(x) (x) +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DI,MinusDI); +/* Generated */ else +/* Generated */ lookbackTotal = 1; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ if( optInTimePeriod <= 1 ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ today = startIdx-1; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ prevClose = inClose[today]; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ if( TA_IS_ZERO(tempReal) ) +/* Generated */ outReal[outIdx++] = (double)0.0; +/* Generated */ else +/* Generated */ outReal[outIdx++] = diffM/tempReal; +/* Generated */ } +/* Generated */ else +/* Generated */ outReal[outIdx++] = (double)0.0; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = today = startIdx; +/* Generated */ prevMinusDM = 0.0; +/* Generated */ prevTR = 0.0; +/* Generated */ today = startIdx - lookbackTotal; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ prevClose = inClose[today]; +/* Generated */ i = optInTimePeriod-1; +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR += tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DI,MinusDI) + 1; +/* Generated */ while( i-- != 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod) + diffM; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod); +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ if( !TA_IS_ZERO(prevTR) ) +/* Generated */ outReal[0] = round_pos(100.0*(prevMinusDM/prevTR)); +/* Generated */ else +/* Generated */ outReal[0] = 0.0; +/* Generated */ outIdx = 1; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod) + diffM; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod); +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ if( !TA_IS_ZERO(prevTR) ) +/* Generated */ outReal[outIdx++] = round_pos(100.0*(prevMinusDM/prevTR)); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MINUS_DM.c b/src/ta_func/ta_MINUS_DM.c new file mode 100644 index 000000000..252e386d2 --- /dev/null +++ b/src/ta_func/ta_MINUS_DM.c @@ -0,0 +1,579 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MinusDMLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int minusDMLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MINUS_DM_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + if( optInTimePeriod > 1 ) + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DM,MinusDM) - 1; + else + return 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MINUS_DM - Minus Directional Movement + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::MinusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MINUS_DM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int today, lookbackTotal, outIdx; + double prevHigh, prevLow, tempReal; + double prevMinusDM; + double diffP, diffM; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* + * The DM1 (one period) is base on the largest part of + * today's range that is outside of yesterdays range. + * + * The following 7 cases explain how the +DM and -DM are + * calculated on one period: + * + * Case 1: Case 2: + * C| A| + * | | C| + * | +DM1 = (C-A) B| | +DM1 = 0 + * | -DM1 = 0 | -DM1 = (B-D) + * A| | D| + * | D| + * B| + * + * Case 3: Case 4: + * C| C| + * | A| | + * | +DM1 = (C-A) | | +DM1 = 0 + * | -DM1 = 0 B| | -DM1 = (B-D) + * A| | | + * | | D| + * B| | + * D| + * + * Case 5: Case 6: + * A| A| C| + * | C| +DM1 = 0 | | +DM1 = 0 + * | | -DM1 = 0 | | -DM1 = 0 + * | D| | | + * B| B| D| + * + * + * Case 7: + * + * C| + * A| | + * | | +DM=0 + * B| | -DM=0 + * D| + * + * In case 3 and 4, the rule is that the smallest delta between + * (C-A) and (B-D) determine which of +DM or -DM is zero. + * + * In case 7, (C-A) and (B-D) are equal, so both +DM and -DM are + * zero. + * + * The rules remain the same when A=B and C=D (when the highs + * equal the lows). + * + * When calculating the DM over a period > 1, the one-period DM + * for the desired period are initialy sum. In other word, + * for a -DM14, sum the -DM1 for the first 14 days (that's + * 13 values because there is no DM for the first day!) + * Subsequent DM are calculated using the Wilder's + * smoothing approach: + * + * Previous -DM14 + * Today's -DM14 = Previous -DM14 - -------------- + Today's -DM1 + * 14 + * + * Reference: + * New Concepts In Technical Trading Systems, J. Welles Wilder Jr + */ + + if( optInTimePeriod > 1 ) + lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DM,MinusDM) - 1; + else + lookbackTotal = 1; + + /* Adjust startIdx to account for the lookback period. */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Indicate where the next output should be put + * in the outReal. + */ + outIdx = 0; + + /* Trap the case where no smoothing is needed. */ + if( optInTimePeriod <= 1 ) + { + /* No smoothing needed. Just do a simple DM1 + * for each price bar. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + today = startIdx-1; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + while( today < endIdx ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + outReal[outIdx++] = diffM; + } + else + outReal[outIdx++] = 0; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Process the initial DM */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + prevMinusDM = 0.0; + today = startIdx - lookbackTotal; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + i = optInTimePeriod-1; + while( i-- > 0 ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM += diffM; + } + } + + /* Process subsequent DM */ + + /* Skip the unstable period. */ + i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DM,MinusDM); + while( i-- != 0 ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod) + diffM; + } + else + { + /* Case 1,3,5 and 7 */ + prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod); + } + } + + /* Now start to write the output in + * the caller provided outReal. + */ + outReal[0] = prevMinusDM; + outIdx = 1; + + while( today < endIdx ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + if( (diffM > 0) && (diffP < diffM) ) + { + /* Case 2 and 4: +DM=0,-DM=diffM */ + prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod) + diffM; + } + else + { + /* Case 1,3,5 and 7 */ + prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod); + } + + outReal[outIdx++] = prevMinusDM; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::MinusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode minusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MINUS_DM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int today, lookbackTotal, outIdx; +/* Generated */ double prevHigh, prevLow, tempReal; +/* Generated */ double prevMinusDM; +/* Generated */ double diffP, diffM; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DM,MinusDM) - 1; +/* Generated */ else +/* Generated */ lookbackTotal = 1; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ if( optInTimePeriod <= 1 ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ today = startIdx-1; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = diffM; +/* Generated */ } +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ prevMinusDM = 0.0; +/* Generated */ today = startIdx - lookbackTotal; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ i = optInTimePeriod-1; +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM += diffM; +/* Generated */ } +/* Generated */ } +/* Generated */ i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_MINUS_DM,MinusDM); +/* Generated */ while( i-- != 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod) + diffM; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod); +/* Generated */ } +/* Generated */ } +/* Generated */ outReal[0] = prevMinusDM; +/* Generated */ outIdx = 1; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffM > 0) && (diffP < diffM) ) +/* Generated */ { +/* Generated */ prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod) + diffM; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevMinusDM = prevMinusDM - (prevMinusDM/optInTimePeriod); +/* Generated */ } +/* Generated */ outReal[outIdx++] = prevMinusDM; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MOM.c b/src/ta_func/ta_MOM.c new file mode 100644 index 000000000..955e7562b --- /dev/null +++ b/src/ta_func/ta_MOM.c @@ -0,0 +1,335 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MomLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int momLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MOM_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return optInTimePeriod; + +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MOM - Momentum + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Mom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Mom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode mom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MOM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + + int inIdx, outIdx, trailingIdx; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* The interpretation of the rate of change varies widely depending + * which software and/or books you are refering to. + * + * The following is the table of Rate-Of-Change implemented in TA-LIB: + * MOM = (price - prevPrice) [Momentum] + * ROC = ((price/prevPrice)-1)*100 [Rate of change] + * ROCP = (price-prevPrice)/prevPrice [Rate of change Percentage] + * ROCR = (price/prevPrice) [Rate of change ratio] + * ROCR100 = (price/prevPrice)*100 [Rate of change ratio 100 Scale] + * + * Here are the equivalent function in other software: + * TA-Lib | Tradestation | Metastock + * ================================================= + * MOM | Momentum | ROC (Point) + * ROC | ROC | ROC (Percent) + * ROCP | PercentChange | - + * ROCR | - | - + * ROCR100 | - | MO + * + * The MOM function is the only one who is not normalized, and thus + * should be avoided for comparing different time serie of prices. + * + * ROC and ROCP are centered at zero and can have positive and negative + * value. Here are some equivalence: + * ROC = ROCP/100 + * = ((price-prevPrice)/prevPrice)/100 + * = ((price/prevPrice)-1)*100 + * + * ROCR and ROCR100 are ratio respectively centered at 1 and 100 and are + * always positive values. + */ + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < optInTimePeriod ) + startIdx = optInTimePeriod; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Calculate Momentum: + * Just substract the value from 'period' ago from + * current value. + */ + outIdx = 0; + inIdx = startIdx; + trailingIdx = startIdx - optInTimePeriod; + + while( inIdx <= endIdx ) + outReal[outIdx++] = inReal[inIdx++] - inReal[trailingIdx++]; + + /* Set output limits. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Mom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode mom( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MOM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int inIdx, outIdx, trailingIdx; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < optInTimePeriod ) +/* Generated */ startIdx = optInTimePeriod; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ inIdx = startIdx; +/* Generated */ trailingIdx = startIdx - optInTimePeriod; +/* Generated */ while( inIdx <= endIdx ) +/* Generated */ outReal[outIdx++] = inReal[inIdx++] - inReal[trailingIdx++]; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_MULT.c b/src/ta_func/ta_MULT.c new file mode 100644 index 000000000..ef59fe6e9 --- /dev/null +++ b/src/ta_func/ta_MULT.c @@ -0,0 +1,250 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::MultLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int multLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_MULT_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_MULT - Vector Arithmetic Mult + * + * Input = double, double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Mult( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal0, +/* Generated */ SubArray^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Mult( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode mult( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal0[], +/* Generated */ double inReal1[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_MULT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal0[], +/* Generated */ const double inReal1[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = inReal0[i]*inReal1[i]; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Mult( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode mult( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal0[], +/* Generated */ float inReal1[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_MULT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal0[], +/* Generated */ const float inReal1[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = inReal0[i]*inReal1[i]; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_NATR.c b/src/ta_func/ta_NATR.c new file mode 100644 index 000000000..326de52f2 --- /dev/null +++ b/src/ta_func/ta_NATR.c @@ -0,0 +1,486 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 060306 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::NatrLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int natrLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_NATR_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* The ATR lookback is the sum of: + * 1 + (optInTimePeriod - 1) + * + * Where 1 is for the True Range, and + * (optInTimePeriod-1) is for the simple + * moving average. + */ + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_NATR,Natr); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_NATR - Normalized Average True Range + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Natr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Natr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode natr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_NATR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + ENUM_DECLARATION(RetCode) retCode; + int outIdx, today, lookbackTotal; + int nbATR; + VALUE_HANDLE_INT(outBegIdx1); + VALUE_HANDLE_INT(outNbElement1); + + double prevATR, tempValue; + ARRAY_REF( tempBuffer ); + ARRAY_LOCAL(prevATRTemp,1); + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* This function is very similar as ATR, except + * it is being normalized as follow: + * + * NATR = (ATR(period) / Close) * 100 + * + * + * Normalization make the ATR function more relevant + * in the folllowing scenario: + * - Long term analysis where the price changes drastically. + * - Cross-market or cross-security ATR comparison. + * + * More Info: + * Technical Analysis of Stock & Commodities (TASC) + * May 2006 by John Forman + */ + + /* Average True Range is the greatest of the following: + * + * val1 = distance from today's high to today's low. + * val2 = distance from yesterday's close to today's high. + * val3 = distance from yesterday's close to today's low. + * + * These value are averaged for the specified period using + * Wilder method. This method have an unstable period comparable + * to an Exponential Moving Average (EMA). + */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(NATR)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + + /* Trap the case where no smoothing is needed. */ + if( optInTimePeriod <= 1 ) + { + /* No smoothing needed. Just do a TRANGE. */ + return FUNCTION_CALL(TRANGE)( startIdx, endIdx, + inHigh, inLow, inClose, + outBegIdx, outNBElement, outReal ); + } + + /* Allocate an intermediate buffer for TRANGE. */ + ARRAY_ALLOC(tempBuffer, lookbackTotal+(endIdx-startIdx)+1 ); + + /* Do TRANGE in the intermediate buffer. */ + retCode = FUNCTION_CALL(TRANGE)( (startIdx-lookbackTotal+1), endIdx, + inHigh, inLow, inClose, + VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), + tempBuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + ARRAY_FREE( tempBuffer ); + return retCode; + } + + /* First value of the ATR is a simple Average of + * the TRANGE output for the specified period. + */ + retCode = FUNCTION_CALL_DOUBLE(INT_SMA)( optInTimePeriod-1, + optInTimePeriod-1, + tempBuffer, optInTimePeriod, + VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), + prevATRTemp ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + ARRAY_FREE( tempBuffer ); + return retCode; + } + prevATR = prevATRTemp[0]; + + /* Subsequent value are smoothed using the + * previous ATR value (Wilder's approach). + * 1) Multiply the previous ATR by 'period-1'. + * 2) Add today TR value. + * 3) Divide by 'period'. + */ + today = optInTimePeriod; + outIdx = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_NATR,Natr); + /* Skip the unstable period. */ + while( outIdx != 0 ) + { + prevATR *= optInTimePeriod - 1; + prevATR += tempBuffer[today++]; + prevATR /= optInTimePeriod; + outIdx--; + } + + /* Now start to write the final ATR in the caller + * provided outReal. + */ + outIdx = 1; + tempValue = inClose[today]; + if( !TA_IS_ZERO(tempValue) ) + outReal[0] = (prevATR/tempValue)*100.0; + else + outReal[0] = 0.0; + + /* Now do the number of requested ATR. */ + nbATR = (endIdx - startIdx)+1; + + while( --nbATR != 0 ) + { + prevATR *= optInTimePeriod - 1; + prevATR += tempBuffer[today++]; + prevATR /= optInTimePeriod; + tempValue = inClose[today]; + if( !TA_IS_ZERO(tempValue) ) + outReal[outIdx] = (prevATR/tempValue)*100.0; + else + outReal[0] = 0.0; + outIdx++; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + ARRAY_FREE( tempBuffer ); + + return retCode; +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Natr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode natr( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_NATR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int outIdx, today, lookbackTotal; +/* Generated */ int nbATR; +/* Generated */ VALUE_HANDLE_INT(outBegIdx1); +/* Generated */ VALUE_HANDLE_INT(outNbElement1); +/* Generated */ double prevATR, tempValue; +/* Generated */ ARRAY_REF( tempBuffer ); +/* Generated */ ARRAY_LOCAL(prevATRTemp,1); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ lookbackTotal = LOOKBACK_CALL(NATR)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ if( optInTimePeriod <= 1 ) +/* Generated */ { +/* Generated */ return FUNCTION_CALL(TRANGE)( startIdx, endIdx, +/* Generated */ inHigh, inLow, inClose, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ } +/* Generated */ ARRAY_ALLOC(tempBuffer, lookbackTotal+(endIdx-startIdx)+1 ); +/* Generated */ retCode = FUNCTION_CALL(TRANGE)( (startIdx-lookbackTotal+1), endIdx, +/* Generated */ inHigh, inLow, inClose, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), +/* Generated */ tempBuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(INT_SMA)( optInTimePeriod-1, +/* Generated */ optInTimePeriod-1, +/* Generated */ tempBuffer, optInTimePeriod, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx1), VALUE_HANDLE_OUT(outNbElement1), +/* Generated */ prevATRTemp ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ prevATR = prevATRTemp[0]; +/* Generated */ today = optInTimePeriod; +/* Generated */ outIdx = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_NATR,Natr); +/* Generated */ while( outIdx != 0 ) +/* Generated */ { +/* Generated */ prevATR *= optInTimePeriod - 1; +/* Generated */ prevATR += tempBuffer[today++]; +/* Generated */ prevATR /= optInTimePeriod; +/* Generated */ outIdx--; +/* Generated */ } +/* Generated */ outIdx = 1; +/* Generated */ tempValue = inClose[today]; +/* Generated */ if( !TA_IS_ZERO(tempValue) ) +/* Generated */ outReal[0] = (prevATR/tempValue)*100.0; +/* Generated */ else +/* Generated */ outReal[0] = 0.0; +/* Generated */ nbATR = (endIdx - startIdx)+1; +/* Generated */ while( --nbATR != 0 ) +/* Generated */ { +/* Generated */ prevATR *= optInTimePeriod - 1; +/* Generated */ prevATR += tempBuffer[today++]; +/* Generated */ prevATR /= optInTimePeriod; +/* Generated */ tempValue = inClose[today]; +/* Generated */ if( !TA_IS_ZERO(tempValue) ) +/* Generated */ outReal[outIdx] = (prevATR/tempValue)*100.0; +/* Generated */ else +/* Generated */ outReal[0] = 0.0; +/* Generated */ outIdx++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_NVI.c b/src/ta_func/ta_NVI.c new file mode 100644 index 000000000..d39aefe06 --- /dev/null +++ b/src/ta_func/ta_NVI.c @@ -0,0 +1,197 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #using +/* Generated */ #include "Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (TA_INTERNAL_ERROR) +/* Generated */ namespace TA { namespace Library { +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::NVI_Lookback( /* Generated */ void ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_NVI_Lookback( /* Generated */ void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert lookback code here. */ + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_NVI - Negative Volume Index + * + * Input = Close, Volume + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum Core::TA_RetCode Core::NVI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inClose __gc [], +/* Generated */ int inVolume __gc [], +/* Generated */ [OutAttribute]Int32 REF(outBegIdx), +/* Generated */ [OutAttribute]Int32 REF(outNBElement), +/* Generated */ double outReal __gc [] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_NVI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inClose[], +/* Generated */ const int inVolume[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return TA_OUT_OF_RANGE_START_INDEX; +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return TA_OUT_OF_RANGE_END_INDEX; +/* Generated */ +/* Generated */ /* Validate the parameters. */ +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inClose||!inVolume) +/* Generated */ return TA_BAD_PARAM; +/* Generated */ +/* Generated */ if( outReal == NULL ) +/* Generated */ return TA_BAD_PARAM; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + *outBegIdx = 0; + *outNBElement = 0; + + return TA_SUCCESS; +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum Core::TA_RetCode Core::NVI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inClose __gc [], +/* Generated */ int inVolume __gc [], +/* Generated */ [OutAttribute]Int32 REF(outBegIdx), +/* Generated */ [OutAttribute]Int32 REF(outNBElement), +/* Generated */ double outReal __gc [] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_NVI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inClose[], +/* Generated */ const int inVolume[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return TA_OUT_OF_RANGE_START_INDEX; +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return TA_OUT_OF_RANGE_END_INDEX; +/* Generated */ if(!inClose||!inVolume) +/* Generated */ return TA_BAD_PARAM; +/* Generated */ if( outReal == NULL ) +/* Generated */ return TA_BAD_PARAM; +/* Generated */ #endif +/* Generated */ *outBegIdx = 0; +/* Generated */ *outNBElement = 0; +/* Generated */ return TA_SUCCESS; +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }} // Close namespace TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_OBV.c b/src/ta_func/ta_OBV.c new file mode 100644 index 000000000..420038c66 --- /dev/null +++ b/src/ta_func/ta_OBV.c @@ -0,0 +1,280 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 110206 AC Change volume and open interest to double + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::ObvLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int obvLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_OBV_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* This function have no lookback needed. */ + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_OBV - On Balance Volume + * + * Input = double, Volume + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Obv( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ SubArray^ inVolume, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Obv( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ cli::array^ inVolume, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode obv( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ double inVolume[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_OBV( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ const double inVolume[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int i; + int outIdx; + double prevReal, tempReal, prevOBV; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inVolume) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + prevOBV = inVolume[startIdx]; + prevReal = inReal[startIdx]; + outIdx = 0; + + for(i=startIdx; i <= endIdx; i++ ) + { + tempReal = inReal[i]; + if( tempReal > prevReal ) + prevOBV += inVolume[i]; + else if( tempReal < prevReal ) + prevOBV -= inVolume[i]; + + outReal[outIdx++] = prevOBV; + prevReal = tempReal; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Obv( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ cli::array^ inVolume, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode obv( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ float inVolume[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_OBV( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ const float inVolume[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int i; +/* Generated */ int outIdx; +/* Generated */ double prevReal, tempReal, prevOBV; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if(!inVolume) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ prevOBV = inVolume[startIdx]; +/* Generated */ prevReal = inReal[startIdx]; +/* Generated */ outIdx = 0; +/* Generated */ for(i=startIdx; i <= endIdx; i++ ) +/* Generated */ { +/* Generated */ tempReal = inReal[i]; +/* Generated */ if( tempReal > prevReal ) +/* Generated */ prevOBV += inVolume[i]; +/* Generated */ else if( tempReal < prevReal ) +/* Generated */ prevOBV -= inVolume[i]; +/* Generated */ outReal[outIdx++] = prevOBV; +/* Generated */ prevReal = tempReal; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_PLUS_DI.c b/src/ta_func/ta_PLUS_DI.c new file mode 100644 index 000000000..ffe23a113 --- /dev/null +++ b/src/ta_func/ta_PLUS_DI.c @@ -0,0 +1,703 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AM Adrian Michel + * MIF Mirek Fontan (mira@fontan.cz) + * CF Christo Fogelberg + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 082303 MF Fix #792298. Remove rounding. Bug reported by AM. + * 062704 MF Fix #965557. Div by zero bug reported by MIF. + * 122204 MF,CF Fix #1090231. Issues when period is 1. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::PlusDILookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int plusDILookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_PLUS_DI_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + if( optInTimePeriod > 1 ) + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DI,PlusDI); + else + return 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_PLUS_DI - Plus Directional Indicator + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::PlusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::PlusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode plusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PLUS_DI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int today, lookbackTotal, outIdx; + double prevHigh, prevLow, prevClose; + double prevPlusDM, prevTR; + double tempReal, tempReal2, diffP, diffM; + + int i; + + #define TRUE_RANGE(TH,TL,YC,OUT) {\ + OUT = TH-TL; \ + tempReal2 = std_fabs(TH-YC); \ + if( tempReal2 > OUT ) \ + OUT = tempReal2; \ + tempReal2 = std_fabs(TL-YC); \ + if( tempReal2 > OUT ) \ + OUT = tempReal2; \ + } + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + /* + * The DM1 (one period) is base on the largest part of + * today's range that is outside of yesterdays range. + * + * The following 7 cases explain how the +DM and -DM are + * calculated on one period: + * + * Case 1: Case 2: + * C| A| + * | | C| + * | +DM1 = (C-A) B| | +DM1 = 0 + * | -DM1 = 0 | -DM1 = (B-D) + * A| | D| + * | D| + * B| + * + * Case 3: Case 4: + * C| C| + * | A| | + * | +DM1 = (C-A) | | +DM1 = 0 + * | -DM1 = 0 B| | -DM1 = (B-D) + * A| | | + * | | D| + * B| | + * D| + * + * Case 5: Case 6: + * A| A| C| + * | C| +DM1 = 0 | | +DM1 = 0 + * | | -DM1 = 0 | | -DM1 = 0 + * | D| | | + * B| B| D| + * + * + * Case 7: + * + * C| + * A| | + * | | +DM1=0 + * B| | -DM1=0 + * D| + * + * In case 3 and 4, the rule is that the smallest delta between + * (C-A) and (B-D) determine which of +DM or -DM is zero. + * + * In case 7, (C-A) and (B-D) are equal, so both +DM and -DM are + * zero. + * + * The rules remain the same when A=B and C=D (when the highs + * equal the lows). + * + * When calculating the DM over a period > 1, the one-period DM + * for the desired period are initialy sum. In other word, + * for a -DM14, sum the -DM1 for the first 14 days (that's + * 13 values because there is no DM for the first day!) + * Subsequent DM are calculated using the Wilder's + * smoothing approach: + * + * Previous +DM14 + * Today's +DM14 = Previous +DM14 - -------------- + Today's +DM1 + * 14 + * + * Calculation of a +DI14 is as follow: + * + * +DM14 + * +DI14 = -------- + * TR14 + * + * Calculation of the TR14 is: + * + * Previous TR14 + * Today's TR14 = Previous TR14 - -------------- + Today's TR1 + * 14 + * + * The first TR14 is the summation of the first 14 TR1. See the + * TA_TRANGE function on how to calculate the true range. + * + * Reference: + * New Concepts In Technical Trading Systems, J. Welles Wilder Jr + */ + + /* Original implementation from Wilder's book was doing some integer + * rounding in its calculations. + * + * This was understandable in the context that at the time the book + * was written, most user were doing the calculation by hand. + * + * For a computer, rounding is unnecessary (and even problematic when inputs + * are close to 1). + * + * TA-Lib does not do the rounding. Still, if you want to reproduce Wilder's examples, + * you can comment out the following #undef/#define and rebuild the library. + */ + #undef round_pos + #define round_pos(x) (x) + + if( optInTimePeriod > 1 ) + lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DI,PlusDI); + else + lookbackTotal = 1; + + /* Adjust startIdx to account for the lookback period. */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Indicate where the next output should be put + * in the outReal. + */ + outIdx = 0; + + /* Trap the case where no smoothing is needed. */ + if( optInTimePeriod <= 1 ) + { + /* No smoothing needed. Just do the following: + * for each price bar. + * +DM1 + * +DI1 = ---- + * TR1 + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + today = startIdx-1; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + prevClose = inClose[today]; + while( today < endIdx ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + if( TA_IS_ZERO(tempReal) ) + outReal[outIdx++] = (double)0.0; + else + outReal[outIdx++] = diffP/tempReal; + } + else + outReal[outIdx++] = (double)0.0; + prevClose = inClose[today]; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Process the initial DM and TR */ + VALUE_HANDLE_DEREF(outBegIdx) = today = startIdx; + + prevPlusDM = 0.0; + prevTR = 0.0; + today = startIdx - lookbackTotal; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + prevClose = inClose[today]; + i = optInTimePeriod-1; + while( i-- > 0 ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR += tempReal; + prevClose = inClose[today]; + } + + /* Process subsequent DI */ + + /* Skip the unstable period. Note that this loop must be executed + * at least ONCE to calculate the first DI. + */ + i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DI,PlusDI) + 1; + while( i-- != 0 ) + { + /* Calculate the prevPlusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod) + diffP; + } + else + { + /* Case 2,4,5 and 7 */ + prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod); + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + } + + /* Now start to write the output in + * the caller provided outReal. + */ + + if( !TA_IS_ZERO(prevTR) ) + outReal[0] = round_pos(100.0*(prevPlusDM/prevTR)); + else + outReal[0] = 0.0; + outIdx = 1; + + while( today < endIdx ) + { + /* Calculate the prevPlusDM */ + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod) + diffP; + } + else + { + /* Case 2,4,5 and 7 */ + prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod); + } + + /* Calculate the prevTR */ + TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); + prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; + prevClose = inClose[today]; + + /* Calculate the DI. The value is rounded (see Wilder book). */ + if( !TA_IS_ZERO(prevTR) ) + outReal[outIdx++] = round_pos(100.0*(prevPlusDM/prevTR)); + else + outReal[outIdx++] = 0.0; + + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::PlusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode plusDI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_PLUS_DI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int today, lookbackTotal, outIdx; +/* Generated */ double prevHigh, prevLow, prevClose; +/* Generated */ double prevPlusDM, prevTR; +/* Generated */ double tempReal, tempReal2, diffP, diffM; +/* Generated */ int i; +/* Generated */ #define TRUE_RANGE(TH,TL,YC,OUT) {\ +/* Generated */ OUT = TH-TL; \ +/* Generated */ tempReal2 = std_fabs(TH-YC); \ +/* Generated */ if( tempReal2 > OUT ) \ +/* Generated */ OUT = tempReal2; \ +/* Generated */ tempReal2 = std_fabs(TL-YC); \ +/* Generated */ if( tempReal2 > OUT ) \ +/* Generated */ OUT = tempReal2; \ +/* Generated */ } +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ #undef round_pos +/* Generated */ #define round_pos(x) (x) +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DI,PlusDI); +/* Generated */ else +/* Generated */ lookbackTotal = 1; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ if( optInTimePeriod <= 1 ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ today = startIdx-1; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ prevClose = inClose[today]; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ if( TA_IS_ZERO(tempReal) ) +/* Generated */ outReal[outIdx++] = (double)0.0; +/* Generated */ else +/* Generated */ outReal[outIdx++] = diffP/tempReal; +/* Generated */ } +/* Generated */ else +/* Generated */ outReal[outIdx++] = (double)0.0; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = today = startIdx; +/* Generated */ prevPlusDM = 0.0; +/* Generated */ prevTR = 0.0; +/* Generated */ today = startIdx - lookbackTotal; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ prevClose = inClose[today]; +/* Generated */ i = optInTimePeriod-1; +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR += tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DI,PlusDI) + 1; +/* Generated */ while( i-- != 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod) + diffP; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod); +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ } +/* Generated */ if( !TA_IS_ZERO(prevTR) ) +/* Generated */ outReal[0] = round_pos(100.0*(prevPlusDM/prevTR)); +/* Generated */ else +/* Generated */ outReal[0] = 0.0; +/* Generated */ outIdx = 1; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod) + diffP; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod); +/* Generated */ } +/* Generated */ TRUE_RANGE(prevHigh,prevLow,prevClose,tempReal); +/* Generated */ prevTR = prevTR - (prevTR/optInTimePeriod) + tempReal; +/* Generated */ prevClose = inClose[today]; +/* Generated */ if( !TA_IS_ZERO(prevTR) ) +/* Generated */ outReal[outIdx++] = round_pos(100.0*(prevPlusDM/prevTR)); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_PLUS_DM.c b/src/ta_func/ta_PLUS_DM.c new file mode 100644 index 000000000..139b02d14 --- /dev/null +++ b/src/ta_func/ta_PLUS_DM.c @@ -0,0 +1,580 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * CF Christo Fogelberg + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 122104 MF,CF Fix#1089506 for when optInTimePeriod is 1. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::PlusDMLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int plusDMLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_PLUS_DM_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + if( optInTimePeriod > 1 ) + return optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DM,PlusDM) - 1; + else + return 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_PLUS_DM - Plus Directional Movement + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::PlusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::PlusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode plusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PLUS_DM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int today, lookbackTotal, outIdx; + double prevHigh, prevLow, tempReal; + double prevPlusDM; + double diffP, diffM; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* + * The DM1 (one period) is base on the largest part of + * today's range that is outside of yesterdays range. + * + * The following 7 cases explain how the +DM and -DM are + * calculated on one period: + * + * Case 1: Case 2: + * C| A| + * | | C| + * | +DM1 = (C-A) B| | +DM1 = 0 + * | -DM1 = 0 | -DM1 = (B-D) + * A| | D| + * | D| + * B| + * + * Case 3: Case 4: + * C| C| + * | A| | + * | +DM1 = (C-A) | | +DM1 = 0 + * | -DM1 = 0 B| | -DM1 = (B-D) + * A| | | + * | | D| + * B| | + * D| + * + * Case 5: Case 6: + * A| A| C| + * | C| +DM1 = 0 | | +DM1 = 0 + * | | -DM1 = 0 | | -DM1 = 0 + * | D| | | + * B| B| D| + * + * + * Case 7: + * + * C| + * A| | + * | | +DM=0 + * B| | -DM=0 + * D| + * + * In case 3 and 4, the rule is that the smallest delta between + * (C-A) and (B-D) determine which of +DM or -DM is zero. + * + * In case 7, (C-A) and (B-D) are equal, so both +DM and -DM are + * zero. + * + * The rules remain the same when A=B and C=D (when the highs + * equal the lows). + * + * When calculating the DM over a period > 1, the one-period DM + * for the desired period are initialy sum. In other word, + * for a +DM14, sum the +DM1 for the first 14 days (that's + * 13 values because there is no DM for the first day!) + * Subsequent DM are calculated using the Wilder's + * smoothing approach: + * + * Previous +DM14 + * Today's +DM14 = Previous +DM14 - -------------- + Today's +DM1 + * 14 + * + * Reference: + * New Concepts In Technical Trading Systems, J. Welles Wilder Jr + */ + + if( optInTimePeriod > 1 ) + lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DM,PlusDM) - 1; + else + lookbackTotal = 1; + + /* Adjust startIdx to account for the lookback period. */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Indicate where the next output should be put + * in the outReal. + */ + outIdx = 0; + + /* Trap the case where no smoothing is needed. */ + if( optInTimePeriod <= 1 ) + { + /* No smoothing needed. Just do a simple DM1 + * for each price bar. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + today = startIdx-1; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + while( today < endIdx ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + outReal[outIdx++] = diffP; + } + else + outReal[outIdx++] = 0; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Process the initial DM */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + prevPlusDM = 0.0; + today = startIdx - lookbackTotal; + prevHigh = inHigh[today]; + prevLow = inLow[today]; + i = optInTimePeriod-1; + while( i-- > 0 ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM += diffP; + } + } + + /* Process subsequent DM */ + + /* Skip the unstable period. */ + i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DM,PlusDM); + while( i-- != 0 ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod) + diffP; + } + else + { + /* Case 2,4,5 and 7 */ + prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod); + } + } + + /* Now start to write the output in + * the caller provided outReal. + */ + outReal[0] = prevPlusDM; + outIdx = 1; + + while( today < endIdx ) + { + today++; + tempReal = inHigh[today]; + diffP = tempReal-prevHigh; /* Plus Delta */ + prevHigh = tempReal; + tempReal = inLow[today]; + diffM = prevLow-tempReal; /* Minus Delta */ + prevLow = tempReal; + + if( (diffP > 0) && (diffP > diffM) ) + { + /* Case 1 and 3: +DM=diffP,-DM=0 */ + prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod) + diffP; + } + else + { + /* Case 2,4,5 and 7 */ + prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod); + } + + outReal[outIdx++] = prevPlusDM; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::PlusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode plusDM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_PLUS_DM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int today, lookbackTotal, outIdx; +/* Generated */ double prevHigh, prevLow, tempReal; +/* Generated */ double prevPlusDM; +/* Generated */ double diffP, diffM; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ lookbackTotal = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DM,PlusDM) - 1; +/* Generated */ else +/* Generated */ lookbackTotal = 1; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ if( optInTimePeriod <= 1 ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ today = startIdx-1; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = diffP; +/* Generated */ } +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ prevPlusDM = 0.0; +/* Generated */ today = startIdx - lookbackTotal; +/* Generated */ prevHigh = inHigh[today]; +/* Generated */ prevLow = inLow[today]; +/* Generated */ i = optInTimePeriod-1; +/* Generated */ while( i-- > 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM += diffP; +/* Generated */ } +/* Generated */ } +/* Generated */ i = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_PLUS_DM,PlusDM); +/* Generated */ while( i-- != 0 ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod) + diffP; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod); +/* Generated */ } +/* Generated */ } +/* Generated */ outReal[0] = prevPlusDM; +/* Generated */ outIdx = 1; +/* Generated */ while( today < endIdx ) +/* Generated */ { +/* Generated */ today++; +/* Generated */ tempReal = inHigh[today]; +/* Generated */ diffP = tempReal-prevHigh; +/* Generated */ prevHigh = tempReal; +/* Generated */ tempReal = inLow[today]; +/* Generated */ diffM = prevLow-tempReal; +/* Generated */ prevLow = tempReal; +/* Generated */ if( (diffP > 0) && (diffP > diffM) ) +/* Generated */ { +/* Generated */ prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod) + diffP; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ prevPlusDM = prevPlusDM - (prevPlusDM/optInTimePeriod); +/* Generated */ } +/* Generated */ outReal[outIdx++] = prevPlusDM; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_PPO.c b/src/ta_func/ta_PPO.c new file mode 100644 index 000000000..419f8d737 --- /dev/null +++ b/src/ta_func/ta_PPO.c @@ -0,0 +1,354 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AA Andrew Atkinson + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 020605 AA Fix #1117666 Lookback bug. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::PpoLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int ppoLookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_PPO_Lookback( int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* Lookback is driven by the slowest MA. */ + return LOOKBACK_CALL(MA)( max(optInSlowPeriod,optInFastPeriod), optInMAType ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_PPO - Percentage Price Oscillator + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInFastPeriod:(From 2 to 100000) + * Number of period for the fast MA + * + * optInSlowPeriod:(From 2 to 100000) + * Number of period for the slow MA + * + * optInMAType: + * Type of Moving Average + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Ppo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ppo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ppo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PPO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_REF(tempBuffer); + ENUM_DECLARATION(RetCode) retCode; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInFastPeriod. */ +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowPeriod. */ +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Allocate an intermediate buffer. */ + ARRAY_ALLOC( tempBuffer, endIdx-startIdx+1 ); + #if !defined( _JAVA ) + if( !tempBuffer ) + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + #endif + + retCode = FUNCTION_CALL(INT_PO)( startIdx, endIdx, inReal, + optInFastPeriod, + optInSlowPeriod, + optInMAType, + outBegIdx, + outNBElement, + outReal, + tempBuffer, + 1 /* Do percentage processing. */ ); + + ARRAY_FREE( tempBuffer ); + + return retCode; +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Ppo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ppo( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ MAType optInMAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_PPO( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInFastPeriod, /* From 2 to 100000 */ +/* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ +/* Generated */ TA_MAType optInMAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF(tempBuffer); +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastPeriod = 12; +/* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowPeriod = 26; +/* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInMAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ ARRAY_ALLOC( tempBuffer, endIdx-startIdx+1 ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !tempBuffer ) +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ #endif +/* Generated */ retCode = FUNCTION_CALL(INT_PO)( startIdx, endIdx, inReal, +/* Generated */ optInFastPeriod, +/* Generated */ optInSlowPeriod, +/* Generated */ optInMAType, +/* Generated */ outBegIdx, +/* Generated */ outNBElement, +/* Generated */ outReal, +/* Generated */ tempBuffer, +/* Generated */ 1 ); +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_PVI.c b/src/ta_func/ta_PVI.c new file mode 100644 index 000000000..6bd5474e5 --- /dev/null +++ b/src/ta_func/ta_PVI.c @@ -0,0 +1,197 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #using +/* Generated */ #include "Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (TA_INTERNAL_ERROR) +/* Generated */ namespace TA { namespace Library { +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::PVI_Lookback( /* Generated */ void ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_PVI_Lookback( /* Generated */ void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert lookback code here. */ + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_PVI - Positive Volume Index + * + * Input = Close, Volume + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum Core::TA_RetCode Core::PVI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inClose __gc [], +/* Generated */ int inVolume __gc [], +/* Generated */ [OutAttribute]Int32 REF(outBegIdx), +/* Generated */ [OutAttribute]Int32 REF(outNBElement), +/* Generated */ double outReal __gc [] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PVI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inClose[], +/* Generated */ const int inVolume[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return TA_OUT_OF_RANGE_START_INDEX; +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return TA_OUT_OF_RANGE_END_INDEX; +/* Generated */ +/* Generated */ /* Validate the parameters. */ +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inClose||!inVolume) +/* Generated */ return TA_BAD_PARAM; +/* Generated */ +/* Generated */ if( outReal == NULL ) +/* Generated */ return TA_BAD_PARAM; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + *outBegIdx = 0; + *outNBElement = 0; + + return TA_SUCCESS; +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum Core::TA_RetCode Core::PVI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inClose __gc [], +/* Generated */ int inVolume __gc [], +/* Generated */ [OutAttribute]Int32 REF(outBegIdx), +/* Generated */ [OutAttribute]Int32 REF(outNBElement), +/* Generated */ double outReal __gc [] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_PVI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inClose[], +/* Generated */ const int inVolume[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return TA_OUT_OF_RANGE_START_INDEX; +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return TA_OUT_OF_RANGE_END_INDEX; +/* Generated */ if(!inClose||!inVolume) +/* Generated */ return TA_BAD_PARAM; +/* Generated */ if( outReal == NULL ) +/* Generated */ return TA_BAD_PARAM; +/* Generated */ #endif +/* Generated */ *outBegIdx = 0; +/* Generated */ *outNBElement = 0; +/* Generated */ return TA_SUCCESS; +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }} // Close namespace TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ROC.c b/src/ta_func/ta_ROC.c new file mode 100644 index 000000000..a245a1a7b --- /dev/null +++ b/src/ta_func/ta_ROC.c @@ -0,0 +1,346 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::RocLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int rocLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ROC_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return optInTimePeriod; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ROC - Rate of change : ((price/prevPrice)-1)*100 + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Roc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Roc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode roc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ROC( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int inIdx, outIdx, trailingIdx; + double tempReal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* The interpretation of the rate of change varies widely depending + * which software and/or books you are refering to. + * + * The following is the table of Rate-Of-Change implemented in TA-LIB: + * MOM = (price - prevPrice) [Momentum] + * ROC = ((price/prevPrice)-1)*100 [Rate of change] + * ROCP = (price-prevPrice)/prevPrice [Rate of change Percentage] + * ROCR = (price/prevPrice) [Rate of change ratio] + * ROCR100 = (price/prevPrice)*100 [Rate of change ratio 100 Scale] + * + * Here are the equivalent function in other software: + * TA-Lib | Tradestation | Metastock + * ================================================= + * MOM | Momentum | ROC (Point) + * ROC | ROC | ROC (Percent) + * ROCP | PercentChange | - + * ROCR | - | - + * ROCR100 | - | MO + * + * The MOM function is the only one who is not normalized, and thus + * should be avoided for comparing different time serie of prices. + * + * ROC and ROCP are centered at zero and can have positive and negative + * value. Here are some equivalence: + * ROC = ROCP/100 + * = ((price-prevPrice)/prevPrice)/100 + * = ((price/prevPrice)-1)*100 + * + * ROCR and ROCR100 are ratio respectively centered at 1 and 100 and are + * always positive values. + */ + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < optInTimePeriod ) + startIdx = optInTimePeriod; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Calculate Rate of change: ((price / prevPrice)-1)*100 */ + outIdx = 0; + inIdx = startIdx; + trailingIdx = startIdx - optInTimePeriod; + + while( inIdx <= endIdx ) + { + tempReal = inReal[trailingIdx++]; + if( tempReal != 0.0 ) + outReal[outIdx++] = ((inReal[inIdx] / tempReal)-1.0)*100.0; + else + outReal[outIdx++] = 0.0; + inIdx++; + } + + /* Set output limits. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Roc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode roc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ROC( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int inIdx, outIdx, trailingIdx; +/* Generated */ double tempReal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < optInTimePeriod ) +/* Generated */ startIdx = optInTimePeriod; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ inIdx = startIdx; +/* Generated */ trailingIdx = startIdx - optInTimePeriod; +/* Generated */ while( inIdx <= endIdx ) +/* Generated */ { +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ if( tempReal != 0.0 ) +/* Generated */ outReal[outIdx++] = ((inReal[inIdx] / tempReal)-1.0)*100.0; +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ inIdx++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ROCP.c b/src/ta_func/ta_ROCP.c new file mode 100644 index 000000000..eb0b95375 --- /dev/null +++ b/src/ta_func/ta_ROCP.c @@ -0,0 +1,347 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::RocPLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int rocPLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ROCP_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ROCP - Rate of change Percentage: (price-prevPrice)/prevPrice + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::RocP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::RocP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode rocP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ROCP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int inIdx, outIdx, trailingIdx; + double tempReal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* The interpretation of the rate of change varies widely depending + * which software and/or books you are refering to. + * + * The following is the table of Rate-Of-Change implemented in TA-LIB: + * MOM = (price - prevPrice) [Momentum] + * ROC = ((price/prevPrice)-1)*100 [Rate of change] + * ROCP = (price-prevPrice)/prevPrice [Rate of change Percentage] + * ROCR = (price/prevPrice) [Rate of change ratio] + * ROCR100 = (price/prevPrice)*100 [Rate of change ratio 100 Scale] + * + * Here are the equivalent function in other software: + * TA-Lib | Tradestation | Metastock + * ================================================= + * MOM | Momentum | ROC (Point) + * ROC | ROC | ROC (Percent) + * ROCP | PercentChange | - + * ROCR | - | - + * ROCR100 | - | MO + * + * The MOM function is the only one who is not normalized, and thus + * should be avoided for comparing different time serie of prices. + * + * ROC and ROCP are centered at zero and can have positive and negative + * value. Here are some equivalence: + * ROC = ROCP/100 + * = ((price-prevPrice)/prevPrice)/100 + * = ((price/prevPrice)-1)*100 + * + * ROCR and ROCR100 are ratio respectively centered at 1 and 100 and are + * always positive values. + */ + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < optInTimePeriod ) + startIdx = optInTimePeriod; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Calculate Rate of change Ratio: (price / prevPrice) */ + outIdx = 0; + inIdx = startIdx; + trailingIdx = startIdx - optInTimePeriod; + + while( inIdx <= endIdx ) + { + tempReal = inReal[trailingIdx++]; + if( tempReal != 0.0 ) + outReal[outIdx++] = (inReal[inIdx]-tempReal)/tempReal; + else + outReal[outIdx++] = 0.0; + + inIdx++; + } + + /* Set output limits. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::RocP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode rocP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ROCP( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int inIdx, outIdx, trailingIdx; +/* Generated */ double tempReal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < optInTimePeriod ) +/* Generated */ startIdx = optInTimePeriod; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ inIdx = startIdx; +/* Generated */ trailingIdx = startIdx - optInTimePeriod; +/* Generated */ while( inIdx <= endIdx ) +/* Generated */ { +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ if( tempReal != 0.0 ) +/* Generated */ outReal[outIdx++] = (inReal[inIdx]-tempReal)/tempReal; +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ inIdx++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ROCR.c b/src/ta_func/ta_ROCR.c new file mode 100644 index 000000000..4314a4693 --- /dev/null +++ b/src/ta_func/ta_ROCR.c @@ -0,0 +1,348 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::RocRLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int rocRLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ROCR_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return optInTimePeriod; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ROCR - Rate of change ratio: (price/prevPrice) + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::RocR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::RocR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode rocR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ROCR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + + int inIdx, outIdx, trailingIdx; + double tempReal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* The interpretation of the rate of change varies widely depending + * which software and/or books you are refering to. + * + * The following is the table of Rate-Of-Change implemented in TA-LIB: + * MOM = (price - prevPrice) [Momentum] + * ROC = ((price/prevPrice)-1)*100 [Rate of change] + * ROCP = (price-prevPrice)/prevPrice [Rate of change Percentage] + * ROCR = (price/prevPrice) [Rate of change ratio] + * ROCR100 = (price/prevPrice)*100 [Rate of change ratio 100 Scale] + * + * Here are the equivalent function in other software: + * TA-Lib | Tradestation | Metastock + * ================================================= + * MOM | Momentum | ROC (Point) + * ROC | ROC | ROC (Percent) + * ROCP | PercentChange | - + * ROCR | - | - + * ROCR100 | - | MO + * + * The MOM function is the only one who is not normalized, and thus + * should be avoided for comparing different time serie of prices. + * + * ROC and ROCP are centered at zero and can have positive and negative + * value. Here are some equivalence: + * ROC = ROCP/100 + * = ((price-prevPrice)/prevPrice)/100 + * = ((price/prevPrice)-1)*100 + * + * ROCR and ROCR100 are ratio respectively centered at 1 and 100 and are + * always positive values. + */ + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < optInTimePeriod ) + startIdx = optInTimePeriod; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Calculate Rate of change Ratio: (price / prevPrice) */ + outIdx = 0; + inIdx = startIdx; + trailingIdx = startIdx - optInTimePeriod; + + while( inIdx <= endIdx ) + { + tempReal = inReal[trailingIdx++]; + if( tempReal != 0.0 ) + outReal[outIdx++] = (inReal[inIdx] / tempReal); + else + outReal[outIdx++] = 0.0; + + inIdx++; + } + + /* Set output limits. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::RocR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode rocR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ROCR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int inIdx, outIdx, trailingIdx; +/* Generated */ double tempReal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < optInTimePeriod ) +/* Generated */ startIdx = optInTimePeriod; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ inIdx = startIdx; +/* Generated */ trailingIdx = startIdx - optInTimePeriod; +/* Generated */ while( inIdx <= endIdx ) +/* Generated */ { +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ if( tempReal != 0.0 ) +/* Generated */ outReal[outIdx++] = (inReal[inIdx] / tempReal); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ inIdx++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ROCR100.c b/src/ta_func/ta_ROCR100.c new file mode 100644 index 000000000..3db02bd31 --- /dev/null +++ b/src/ta_func/ta_ROCR100.c @@ -0,0 +1,347 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::RocR100Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int rocR100Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ROCR100_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ROCR100 - Rate of change ratio 100 scale: (price/prevPrice)*100 + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::RocR100( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::RocR100( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode rocR100( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ROCR100( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int inIdx, outIdx, trailingIdx; + double tempReal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* The interpretation of the rate of change varies widely depending + * which software and/or books you are refering to. + * + * The following is the table of Rate-Of-Change implemented in TA-LIB: + * MOM = (price - prevPrice) [Momentum] + * ROC = ((price/prevPrice)-1)*100 [Rate of change] + * ROCP = (price-prevPrice)/prevPrice [Rate of change Percentage] + * ROCR = (price/prevPrice) [Rate of change ratio] + * ROCR100 = (price/prevPrice)*100 [Rate of change ratio 100 Scale] + * + * Here are the equivalent function in other software: + * TA-Lib | Tradestation | Metastock + * ================================================= + * MOM | Momentum | ROC (Point) + * ROC | ROC | ROC (Percent) + * ROCP | PercentChange | - + * ROCR | - | - + * ROCR100 | - | MO + * + * The MOM function is the only one who is not normalized, and thus + * should be avoided for comparing different time serie of prices. + * + * ROC and ROCP are centered at zero and can have positive and negative + * value. Here are some equivalence: + * ROC = ROCP/100 + * = ((price-prevPrice)/prevPrice)/100 + * = ((price/prevPrice)-1)*100 + * + * ROCR and ROCR100 are ratio respectively centered at 1 and 100 and are + * always positive values. + */ + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < optInTimePeriod ) + startIdx = optInTimePeriod; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Calculate Rate of change Ratio: (price / prevPrice) */ + outIdx = 0; + inIdx = startIdx; + trailingIdx = startIdx - optInTimePeriod; + + while( inIdx <= endIdx ) + { + tempReal = inReal[trailingIdx++]; + if( tempReal != 0.0 ) + outReal[outIdx++] = (inReal[inIdx] / tempReal)*100.0; + else + outReal[outIdx++] = 0.0; + + inIdx++; + } + + /* Set output limits. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::RocR100( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode rocR100( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ROCR100( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int inIdx, outIdx, trailingIdx; +/* Generated */ double tempReal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 10; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < optInTimePeriod ) +/* Generated */ startIdx = optInTimePeriod; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ inIdx = startIdx; +/* Generated */ trailingIdx = startIdx - optInTimePeriod; +/* Generated */ while( inIdx <= endIdx ) +/* Generated */ { +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ if( tempReal != 0.0 ) +/* Generated */ outReal[outIdx++] = (inReal[inIdx] / tempReal)*100.0; +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ inIdx++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_RSI.c b/src/ta_func/ta_RSI.c new file mode 100644 index 000000000..d8cc104cc --- /dev/null +++ b/src/ta_func/ta_RSI.c @@ -0,0 +1,599 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 062804 MF Resolve div by zero bug on limit case. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::RsiLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int rsiLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_RSI_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int retValue; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + retValue = optInTimePeriod + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_RSI,Rsi); + if( TA_GLOBALS_COMPATIBILITY == ENUM_VALUE(Compatibility,TA_COMPATIBILITY_METASTOCK,Metastock) ) + retValue--; + + return retValue; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_RSI - Relative Strength Index + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Rsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Rsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode rsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_RSI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int outIdx; + + int today, lookbackTotal, unstablePeriod, i; + double prevGain, prevLoss, prevValue, savePrevValue; + double tempValue1, tempValue2; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* The following algorithm is base on the original + * work from Wilder's and shall represent the + * original idea behind the classic RSI. + * + * Metastock is starting the calculation one price + * bar earlier. To make this possible, they assume + * that the very first bar will be identical to the + * previous one (no gain or loss). + */ + + /* If changing this function, please check also CMO + * which is mostly identical (just different in one step + * of calculation). + */ + + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(RSI)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + + outIdx = 0; /* Index into the output. */ + + /* Trap special case where the period is '1'. + * In that case, just copy the input into the + * output for the requested range (as-is !) + */ + if( optInTimePeriod == 1 ) + { + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + i = (endIdx-startIdx)+1; + VALUE_HANDLE_DEREF(outNBElement) = i; + #if defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) + ARRAY_MEMMOVE( outReal, 0, (inReal->mDataArray), (inReal->mOffset)+startIdx, i ); + #else + ARRAY_MEMMOVE( outReal, 0, inReal, startIdx, i ); + #endif + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Accumulate Wilder's "Average Gain" and "Average Loss" + * among the initial period. + */ + today = startIdx-lookbackTotal; + prevValue = inReal[today]; + + unstablePeriod = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_RSI,Rsi); + + /* If there is no unstable period, + * calculate the 'additional' initial + * price bar who is particuliar to + * metastock. + * If there is an unstable period, + * no need to calculate since this + * first value will be surely skip. + */ + if( (unstablePeriod == 0) && + (TA_GLOBALS_COMPATIBILITY == ENUM_VALUE(Compatibility,TA_COMPATIBILITY_METASTOCK,Metastock))) + { + /* Preserve prevValue because it may get + * overwritten by the output. + *(because output ptr could be the same as input ptr). + */ + savePrevValue = prevValue; + + /* No unstable period, so must calculate first output + * particular to Metastock. + * (Metastock re-use the first price bar, so there + * is no loss/gain at first. Beats me why they + * are doing all this). + */ + prevGain = 0.0; + prevLoss = 0.0; + for( i=optInTimePeriod; i > 0; i-- ) + { + tempValue1 = inReal[today++]; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + if( tempValue2 < 0 ) + prevLoss -= tempValue2; + else + prevGain += tempValue2; + } + + + tempValue1 = prevLoss/optInTimePeriod; + tempValue2 = prevGain/optInTimePeriod; + + /* Write the output. */ + tempValue1 = tempValue2+tempValue1; + if( !TA_IS_ZERO(tempValue1) ) + outReal[outIdx++] = 100*(tempValue2/tempValue1); + else + outReal[outIdx++] = 0.0; + + /* Are we done? */ + if( today > endIdx ) + { + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Start over for the next price bar. */ + today -= optInTimePeriod; + prevValue = savePrevValue; + } + + + /* Remaining of the processing is identical + * for both Classic calculation and Metastock. + */ + prevGain = 0.0; + prevLoss = 0.0; + today++; + for( i=optInTimePeriod; i > 0; i-- ) + { + tempValue1 = inReal[today++]; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + if( tempValue2 < 0 ) + prevLoss -= tempValue2; + else + prevGain += tempValue2; + } + + + /* Subsequent prevLoss and prevGain are smoothed + * using the previous values (Wilder's approach). + * 1) Multiply the previous by 'period-1'. + * 2) Add today value. + * 3) Divide by 'period'. + */ + prevLoss /= optInTimePeriod; + prevGain /= optInTimePeriod; + + /* Often documentation present the RSI calculation as follow: + * RSI = 100 - (100 / 1 + (prevGain/prevLoss)) + * + * The following is equivalent: + * RSI = 100 * (prevGain/(prevGain+prevLoss)) + * + * The second equation is used here for speed optimization. + */ + if( today > startIdx ) + { + tempValue1 = prevGain+prevLoss; + if( !TA_IS_ZERO(tempValue1) ) + outReal[outIdx++] = 100.0*(prevGain/tempValue1); + else + outReal[outIdx++] = 0.0; + } + else + { + /* Skip the unstable period. Do the processing + * but do not write it in the output. + */ + while( today < startIdx ) + { + tempValue1 = inReal[today]; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + + prevLoss *= (optInTimePeriod-1); + prevGain *= (optInTimePeriod-1); + if( tempValue2 < 0 ) + prevLoss -= tempValue2; + else + prevGain += tempValue2; + + prevLoss /= optInTimePeriod; + prevGain /= optInTimePeriod; + + today++; + } + } + + /* Unstable period skipped... now continue + * processing if needed. + */ + while( today <= endIdx ) + { + tempValue1 = inReal[today++]; + tempValue2 = tempValue1 - prevValue; + prevValue = tempValue1; + + prevLoss *= (optInTimePeriod-1); + prevGain *= (optInTimePeriod-1); + if( tempValue2 < 0 ) + prevLoss -= tempValue2; + else + prevGain += tempValue2; + + prevLoss /= optInTimePeriod; + prevGain /= optInTimePeriod; + tempValue1 = prevGain+prevLoss; + if( !TA_IS_ZERO(tempValue1) ) + outReal[outIdx++] = 100.0*(prevGain/tempValue1); + else + outReal[outIdx++] = 0.0; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Rsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode rsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_RSI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int today, lookbackTotal, unstablePeriod, i; +/* Generated */ double prevGain, prevLoss, prevValue, savePrevValue; +/* Generated */ double tempValue1, tempValue2; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ lookbackTotal = LOOKBACK_CALL(RSI)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ outIdx = 0; +/* Generated */ if( optInTimePeriod == 1 ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ i = (endIdx-startIdx)+1; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = i; +/* Generated */ #if defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) +/* Generated */ ARRAY_MEMMOVE( outReal, 0, (inReal->mDataArray), (inReal->mOffset)+startIdx, i ); +/* Generated */ #else +/* Generated */ ARRAY_MEMMOVE( outReal, 0, inReal, startIdx, i ); +/* Generated */ #endif +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ today = startIdx-lookbackTotal; +/* Generated */ prevValue = inReal[today]; +/* Generated */ unstablePeriod = TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_RSI,Rsi); +/* Generated */ if( (unstablePeriod == 0) && +/* Generated */ (TA_GLOBALS_COMPATIBILITY == ENUM_VALUE(Compatibility,TA_COMPATIBILITY_METASTOCK,Metastock))) +/* Generated */ { +/* Generated */ savePrevValue = prevValue; +/* Generated */ prevGain = 0.0; +/* Generated */ prevLoss = 0.0; +/* Generated */ for( i=optInTimePeriod; i > 0; i-- ) +/* Generated */ { +/* Generated */ tempValue1 = inReal[today++]; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ prevLoss -= tempValue2; +/* Generated */ else +/* Generated */ prevGain += tempValue2; +/* Generated */ } +/* Generated */ tempValue1 = prevLoss/optInTimePeriod; +/* Generated */ tempValue2 = prevGain/optInTimePeriod; +/* Generated */ tempValue1 = tempValue2+tempValue1; +/* Generated */ if( !TA_IS_ZERO(tempValue1) ) +/* Generated */ outReal[outIdx++] = 100*(tempValue2/tempValue1); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ if( today > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ today -= optInTimePeriod; +/* Generated */ prevValue = savePrevValue; +/* Generated */ } +/* Generated */ prevGain = 0.0; +/* Generated */ prevLoss = 0.0; +/* Generated */ today++; +/* Generated */ for( i=optInTimePeriod; i > 0; i-- ) +/* Generated */ { +/* Generated */ tempValue1 = inReal[today++]; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ prevLoss -= tempValue2; +/* Generated */ else +/* Generated */ prevGain += tempValue2; +/* Generated */ } +/* Generated */ prevLoss /= optInTimePeriod; +/* Generated */ prevGain /= optInTimePeriod; +/* Generated */ if( today > startIdx ) +/* Generated */ { +/* Generated */ tempValue1 = prevGain+prevLoss; +/* Generated */ if( !TA_IS_ZERO(tempValue1) ) +/* Generated */ outReal[outIdx++] = 100.0*(prevGain/tempValue1); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ while( today < startIdx ) +/* Generated */ { +/* Generated */ tempValue1 = inReal[today]; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ prevLoss *= (optInTimePeriod-1); +/* Generated */ prevGain *= (optInTimePeriod-1); +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ prevLoss -= tempValue2; +/* Generated */ else +/* Generated */ prevGain += tempValue2; +/* Generated */ prevLoss /= optInTimePeriod; +/* Generated */ prevGain /= optInTimePeriod; +/* Generated */ today++; +/* Generated */ } +/* Generated */ } +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tempValue1 = inReal[today++]; +/* Generated */ tempValue2 = tempValue1 - prevValue; +/* Generated */ prevValue = tempValue1; +/* Generated */ prevLoss *= (optInTimePeriod-1); +/* Generated */ prevGain *= (optInTimePeriod-1); +/* Generated */ if( tempValue2 < 0 ) +/* Generated */ prevLoss -= tempValue2; +/* Generated */ else +/* Generated */ prevGain += tempValue2; +/* Generated */ prevLoss /= optInTimePeriod; +/* Generated */ prevGain /= optInTimePeriod; +/* Generated */ tempValue1 = prevGain+prevLoss; +/* Generated */ if( !TA_IS_ZERO(tempValue1) ) +/* Generated */ outReal[outIdx++] = 100.0*(prevGain/tempValue1); +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_SAR.c b/src/ta_func/ta_SAR.c new file mode 100644 index 000000000..a3f664e17 --- /dev/null +++ b/src/ta_func/ta_SAR.c @@ -0,0 +1,711 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * CF Christo Fogelberg + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 122104 MF,CF Fix#1089506 for out-of-bound access to ep_temp. + */ + +/* SAR_ROUNDING is just for test purpose when cross-referencing that + * function with example from Wilder's book. Wilder is using two + * decimal rounding for simplification. TA-Lib does not round. + */ +/* #define SAR_ROUNDING(x) x=round_pos_2(x) */ +#define SAR_ROUNDING(x) + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::SarLookback( double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int sarLookback( double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_SAR_Lookback( double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInAcceleration == TA_REAL_DEFAULT ) +/* Generated */ optInAcceleration = 2.000000e-2; +/* Generated */ else if( (optInAcceleration < 0.000000e+0) ||/* Generated */ (optInAcceleration > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInMaximum == TA_REAL_DEFAULT ) +/* Generated */ optInMaximum = 2.000000e-1; +/* Generated */ else if( (optInMaximum < 0.000000e+0) ||/* Generated */ (optInMaximum > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInAcceleration); + UNUSED_VARIABLE(optInMaximum); + + /* SAR always sacrify one price bar to establish the + * initial extreme price. + */ + return 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_SAR - Parabolic SAR + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInAcceleration:(From 0 to TA_REAL_MAX) + * Acceleration Factor used up to the Maximum value + * + * optInMaximum:(From 0 to TA_REAL_MAX) + * Acceleration Factor Maximum value + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Sar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_SAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + ENUM_DECLARATION(RetCode) retCode; + + int isLong; /* > 0 indicates long. == 0 indicates short */ + int todayIdx, outIdx; + + VALUE_HANDLE_INT(tempInt); + + double newHigh, newLow, prevHigh, prevLow; + double af, ep, sar; + ARRAY_LOCAL(ep_temp,1); + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInAcceleration == TA_REAL_DEFAULT ) +/* Generated */ optInAcceleration = 2.000000e-2; +/* Generated */ else if( (optInAcceleration < 0.000000e+0) ||/* Generated */ (optInAcceleration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInMaximum == TA_REAL_DEFAULT ) +/* Generated */ optInMaximum = 2.000000e-1; +/* Generated */ else if( (optInMaximum < 0.000000e+0) ||/* Generated */ (optInMaximum > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Implementation of the SAR has been a little bit open to interpretation + * since Wilder (the original author) did not define a precise algorithm + * on how to bootstrap the algorithm. Take any existing software application + * and you will see slight variation on how the algorithm was adapted. + * + * What is the initial trade direction? Long or short? + * =================================================== + * The interpretation of what should be the initial SAR values is + * open to interpretation, particularly since the caller to the function + * does not specify the initial direction of the trade. + * + * In TA-Lib, the following logic is used: + * - Calculate +DM and -DM between the first and + * second bar. The highest directional indication will + * indicate the assumed direction of the trade for the second + * price bar. + * - In the case of a tie between +DM and -DM, + * the direction is LONG by default. + * + * What is the initial "extreme point" and thus SAR? + * ================================================= + * The following shows how different people took different approach: + * - Metastock use the first price bar high/low depending of + * the direction. No SAR is calculated for the first price + * bar. + * - Tradestation use the closing price of the second bar. No + * SAR are calculated for the first price bar. + * - Wilder (the original author) use the SIP from the + * previous trade (cannot be implement here since the + * direction and length of the previous trade is unknonw). + * - The Magazine TASC seems to follow Wilder approach which + * is not practical here. + * + * TA-Lib "consume" the first price bar and use its high/low as the + * initial SAR of the second price bar. I found that approach to be + * the closest to Wilders idea of having the first entry day use + * the previous extreme point, except that here the extreme point is + * derived solely from the first price bar. I found the same approach + * to be used by Metastock. + */ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + * + * Move up the start index if there is not + * enough initial data. + */ + if( startIdx < 1 ) + startIdx = 1; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Make sure the acceleration and maximum are coherent. + * If not, correct the acceleration. + */ + af = optInAcceleration; + if( af > optInMaximum ) + af = optInAcceleration = optInMaximum; + + /* Identify if the initial direction is long or short. + * (ep is just used as a temp buffer here, the name + * of the parameter is not significant). + */ + retCode = FUNCTION_CALL(MINUS_DM)( startIdx, startIdx, inHigh, inLow, 1, + VALUE_HANDLE_OUT(tempInt), VALUE_HANDLE_OUT(tempInt), + ep_temp ); + if( ep_temp[0] > 0 ) + isLong = 0; + else + isLong = 1; + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + outIdx = 0; + + /* Write the first SAR. */ + todayIdx = startIdx; + + newHigh = inHigh[todayIdx-1]; + newLow = inLow[todayIdx-1]; + + SAR_ROUNDING(newHigh); + SAR_ROUNDING(newLow); + + if( isLong == 1 ) + { + ep = inHigh[todayIdx]; + sar = newLow; + } + else + { + ep = inLow[todayIdx]; + sar = newHigh; + } + + SAR_ROUNDING(sar); + + /* Cheat on the newLow and newHigh for the + * first iteration. + */ + newLow = inLow[todayIdx]; + newHigh = inHigh[todayIdx]; + + while( todayIdx <= endIdx ) + { + prevLow = newLow; + prevHigh = newHigh; + newLow = inLow[todayIdx]; + newHigh = inHigh[todayIdx]; + todayIdx++; + + SAR_ROUNDING(newLow); + SAR_ROUNDING(newHigh); + + if( isLong == 1 ) + { + /* Switch to short if the low penetrates the SAR value. */ + if( newLow <= sar ) + { + /* Switch and Overide the SAR with the ep */ + isLong = 0; + sar = ep; + + /* Make sure the overide SAR is within + * yesterday's and today's range. + */ + if( sar < prevHigh ) + sar = prevHigh; + if( sar < newHigh ) + sar = newHigh; + + /* Output the overide SAR */ + outReal[outIdx++] = sar; + + /* Adjust af and ep */ + af = optInAcceleration; + ep = newLow; + + /* Calculate the new SAR */ + sar = sar + af * (ep - sar); + SAR_ROUNDING( sar ); + + /* Make sure the new SAR is within + * yesterday's and today's range. + */ + if( sar < prevHigh ) + sar = prevHigh; + if( sar < newHigh ) + sar = newHigh; + } + else + { + /* No switch */ + + /* Output the SAR (was calculated in the previous iteration) */ + outReal[outIdx++] = sar; + + /* Adjust af and ep. */ + if( newHigh > ep ) + { + ep = newHigh; + af += optInAcceleration; + if( af > optInMaximum ) + af = optInMaximum; + } + + /* Calculate the new SAR */ + sar = sar + af * (ep - sar); + SAR_ROUNDING( sar ); + + /* Make sure the new SAR is within + * yesterday's and today's range. + */ + if( sar > prevLow ) + sar = prevLow; + if( sar > newLow ) + sar = newLow; + } + } + else + { + /* Switch to long if the high penetrates the SAR value. */ + if( newHigh >= sar ) + { + /* Switch and Overide the SAR with the ep */ + isLong = 1; + sar = ep; + + /* Make sure the overide SAR is within + * yesterday's and today's range. + */ + if( sar > prevLow ) + sar = prevLow; + if( sar > newLow ) + sar = newLow; + + /* Output the overide SAR */ + outReal[outIdx++] = sar; + + /* Adjust af and ep */ + af = optInAcceleration; + ep = newHigh; + + /* Calculate the new SAR */ + sar = sar + af * (ep - sar); + SAR_ROUNDING( sar ); + + /* Make sure the new SAR is within + * yesterday's and today's range. + */ + if( sar > prevLow ) + sar = prevLow; + if( sar > newLow ) + sar = newLow; + } + else + { + /* No switch */ + + /* Output the SAR (was calculated in the previous iteration) */ + outReal[outIdx++] = sar; + + /* Adjust af and ep. */ + if( newLow < ep ) + { + ep = newLow; + af += optInAcceleration; + if( af > optInMaximum ) + af = optInMaximum; + } + + /* Calculate the new SAR */ + sar = sar + af * (ep - sar); + SAR_ROUNDING( sar ); + + /* Make sure the new SAR is within + * yesterday's and today's range. + */ + if( sar < prevHigh ) + sar = prevHigh; + if( sar < newHigh ) + sar = newHigh; + } + } + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sar( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_SAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ double optInAcceleration, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInMaximum, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int isLong; +/* Generated */ int todayIdx, outIdx; +/* Generated */ VALUE_HANDLE_INT(tempInt); +/* Generated */ double newHigh, newLow, prevHigh, prevLow; +/* Generated */ double af, ep, sar; +/* Generated */ ARRAY_LOCAL(ep_temp,1); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInAcceleration == TA_REAL_DEFAULT ) +/* Generated */ optInAcceleration = 2.000000e-2; +/* Generated */ else if( (optInAcceleration < 0.000000e+0) || (optInAcceleration > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInMaximum == TA_REAL_DEFAULT ) +/* Generated */ optInMaximum = 2.000000e-1; +/* Generated */ else if( (optInMaximum < 0.000000e+0) || (optInMaximum > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < 1 ) +/* Generated */ startIdx = 1; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ af = optInAcceleration; +/* Generated */ if( af > optInMaximum ) +/* Generated */ af = optInAcceleration = optInMaximum; +/* Generated */ retCode = FUNCTION_CALL(MINUS_DM)( startIdx, startIdx, inHigh, inLow, 1, +/* Generated */ VALUE_HANDLE_OUT(tempInt), VALUE_HANDLE_OUT(tempInt), +/* Generated */ ep_temp ); +/* Generated */ if( ep_temp[0] > 0 ) +/* Generated */ isLong = 0; +/* Generated */ else +/* Generated */ isLong = 1; +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ todayIdx = startIdx; +/* Generated */ newHigh = inHigh[todayIdx-1]; +/* Generated */ newLow = inLow[todayIdx-1]; +/* Generated */ SAR_ROUNDING(newHigh); +/* Generated */ SAR_ROUNDING(newLow); +/* Generated */ if( isLong == 1 ) +/* Generated */ { +/* Generated */ ep = inHigh[todayIdx]; +/* Generated */ sar = newLow; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ ep = inLow[todayIdx]; +/* Generated */ sar = newHigh; +/* Generated */ } +/* Generated */ SAR_ROUNDING(sar); +/* Generated */ newLow = inLow[todayIdx]; +/* Generated */ newHigh = inHigh[todayIdx]; +/* Generated */ while( todayIdx <= endIdx ) +/* Generated */ { +/* Generated */ prevLow = newLow; +/* Generated */ prevHigh = newHigh; +/* Generated */ newLow = inLow[todayIdx]; +/* Generated */ newHigh = inHigh[todayIdx]; +/* Generated */ todayIdx++; +/* Generated */ SAR_ROUNDING(newLow); +/* Generated */ SAR_ROUNDING(newHigh); +/* Generated */ if( isLong == 1 ) +/* Generated */ { +/* Generated */ if( newLow <= sar ) +/* Generated */ { +/* Generated */ isLong = 0; +/* Generated */ sar = ep; +/* Generated */ if( sar < prevHigh ) +/* Generated */ sar = prevHigh; +/* Generated */ if( sar < newHigh ) +/* Generated */ sar = newHigh; +/* Generated */ outReal[outIdx++] = sar; +/* Generated */ af = optInAcceleration; +/* Generated */ ep = newLow; +/* Generated */ sar = sar + af * (ep - sar); +/* Generated */ SAR_ROUNDING( sar ); +/* Generated */ if( sar < prevHigh ) +/* Generated */ sar = prevHigh; +/* Generated */ if( sar < newHigh ) +/* Generated */ sar = newHigh; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ outReal[outIdx++] = sar; +/* Generated */ if( newHigh > ep ) +/* Generated */ { +/* Generated */ ep = newHigh; +/* Generated */ af += optInAcceleration; +/* Generated */ if( af > optInMaximum ) +/* Generated */ af = optInMaximum; +/* Generated */ } +/* Generated */ sar = sar + af * (ep - sar); +/* Generated */ SAR_ROUNDING( sar ); +/* Generated */ if( sar > prevLow ) +/* Generated */ sar = prevLow; +/* Generated */ if( sar > newLow ) +/* Generated */ sar = newLow; +/* Generated */ } +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ if( newHigh >= sar ) +/* Generated */ { +/* Generated */ isLong = 1; +/* Generated */ sar = ep; +/* Generated */ if( sar > prevLow ) +/* Generated */ sar = prevLow; +/* Generated */ if( sar > newLow ) +/* Generated */ sar = newLow; +/* Generated */ outReal[outIdx++] = sar; +/* Generated */ af = optInAcceleration; +/* Generated */ ep = newHigh; +/* Generated */ sar = sar + af * (ep - sar); +/* Generated */ SAR_ROUNDING( sar ); +/* Generated */ if( sar > prevLow ) +/* Generated */ sar = prevLow; +/* Generated */ if( sar > newLow ) +/* Generated */ sar = newLow; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ outReal[outIdx++] = sar; +/* Generated */ if( newLow < ep ) +/* Generated */ { +/* Generated */ ep = newLow; +/* Generated */ af += optInAcceleration; +/* Generated */ if( af > optInMaximum ) +/* Generated */ af = optInMaximum; +/* Generated */ } +/* Generated */ sar = sar + af * (ep - sar); +/* Generated */ SAR_ROUNDING( sar ); +/* Generated */ if( sar < prevHigh ) +/* Generated */ sar = prevHigh; +/* Generated */ if( sar < newHigh ) +/* Generated */ sar = newHigh; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_SAREXT.c b/src/ta_func/ta_SAREXT.c new file mode 100644 index 000000000..5f2cbb929 --- /dev/null +++ b/src/ta_func/ta_SAREXT.c @@ -0,0 +1,985 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * PP Peter Pudaite + * CF Christo Fogelberg + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 091503 PP Reworked TA_SAR to allow customisation of more SAR params. + * 092103 MF Some changes related on first round of tests + * 092303 PP Minor bug fixes. + * 122104 MF,CF Fix#1089506 for out-of-bound access to ep_temp. + * + */ + +/* SAR_ROUNDING is just for test purpose when cross-referencing that + * function with example from Wilder's book. Wilder is using two + * decimal rounding for simplification. TA-Lib does not round. + */ +/* #define SAR_ROUNDING(x) x=round_pos_2(x) */ +#define SAR_ROUNDING(x) + + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::SarExtLookback( double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int sarExtLookback( double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_SAREXT_Lookback( double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort ) /* From 0 to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( optInStartValue == TA_REAL_DEFAULT ) +/* Generated */ optInStartValue = 0.000000e+0; +/* Generated */ else if( (optInStartValue < -3.000000e+37) ||/* Generated */ (optInStartValue > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInOffsetOnReverse == TA_REAL_DEFAULT ) +/* Generated */ optInOffsetOnReverse = 0.000000e+0; +/* Generated */ else if( (optInOffsetOnReverse < 0.000000e+0) ||/* Generated */ (optInOffsetOnReverse > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInAccelerationInitLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationInitLong = 2.000000e-2; +/* Generated */ else if( (optInAccelerationInitLong < 0.000000e+0) ||/* Generated */ (optInAccelerationInitLong > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInAccelerationLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationLong = 2.000000e-2; +/* Generated */ else if( (optInAccelerationLong < 0.000000e+0) ||/* Generated */ (optInAccelerationLong > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInAccelerationMaxLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationMaxLong = 2.000000e-1; +/* Generated */ else if( (optInAccelerationMaxLong < 0.000000e+0) ||/* Generated */ (optInAccelerationMaxLong > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInAccelerationInitShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationInitShort = 2.000000e-2; +/* Generated */ else if( (optInAccelerationInitShort < 0.000000e+0) ||/* Generated */ (optInAccelerationInitShort > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInAccelerationShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationShort = 2.000000e-2; +/* Generated */ else if( (optInAccelerationShort < 0.000000e+0) ||/* Generated */ (optInAccelerationShort > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInAccelerationMaxShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationMaxShort = 2.000000e-1; +/* Generated */ else if( (optInAccelerationMaxShort < 0.000000e+0) ||/* Generated */ (optInAccelerationMaxShort > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInStartValue); + UNUSED_VARIABLE(optInOffsetOnReverse); + UNUSED_VARIABLE(optInAccelerationInitLong); + UNUSED_VARIABLE(optInAccelerationLong); + UNUSED_VARIABLE(optInAccelerationMaxLong); + UNUSED_VARIABLE(optInAccelerationInitShort); + UNUSED_VARIABLE(optInAccelerationShort); + UNUSED_VARIABLE(optInAccelerationMaxShort); + + /* SAR always sacrifices one price bar to establish the + * initial extreme price. + */ + + return 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_SAREXT - Parabolic SAR - Extended + * + * Input = High, Low + * Output = double + * + * Optional Parameters + * ------------------- + * optInStartValue:(From TA_REAL_MIN to TA_REAL_MAX) + * Start value and direction. 0 for Auto, >0 for Long, <0 for Short + * + * optInOffsetOnReverse:(From 0 to TA_REAL_MAX) + * Percent offset added/removed to initial stop on short/long reversal + * + * optInAccelerationInitLong:(From 0 to TA_REAL_MAX) + * Acceleration Factor initial value for the Long direction + * + * optInAccelerationLong:(From 0 to TA_REAL_MAX) + * Acceleration Factor for the Long direction + * + * optInAccelerationMaxLong:(From 0 to TA_REAL_MAX) + * Acceleration Factor maximum value for the Long direction + * + * optInAccelerationInitShort:(From 0 to TA_REAL_MAX) + * Acceleration Factor initial value for the Short direction + * + * optInAccelerationShort:(From 0 to TA_REAL_MAX) + * Acceleration Factor for the Short direction + * + * optInAccelerationMaxShort:(From 0 to TA_REAL_MAX) + * Acceleration Factor maximum value for the Short direction + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::SarExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::SarExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sarExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_SAREXT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + ENUM_DECLARATION(RetCode) retCode; + + int isLong; /* > 0 indicates long. == 0 indicates short */ + int todayIdx, outIdx; + + VALUE_HANDLE_INT(tempInt); + + double newHigh, newLow, prevHigh, prevLow; + double afLong, afShort, ep, sar; + ARRAY_LOCAL(ep_temp,1); + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ if( optInStartValue == TA_REAL_DEFAULT ) +/* Generated */ optInStartValue = 0.000000e+0; +/* Generated */ else if( (optInStartValue < -3.000000e+37) ||/* Generated */ (optInStartValue > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInOffsetOnReverse == TA_REAL_DEFAULT ) +/* Generated */ optInOffsetOnReverse = 0.000000e+0; +/* Generated */ else if( (optInOffsetOnReverse < 0.000000e+0) ||/* Generated */ (optInOffsetOnReverse > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInAccelerationInitLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationInitLong = 2.000000e-2; +/* Generated */ else if( (optInAccelerationInitLong < 0.000000e+0) ||/* Generated */ (optInAccelerationInitLong > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInAccelerationLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationLong = 2.000000e-2; +/* Generated */ else if( (optInAccelerationLong < 0.000000e+0) ||/* Generated */ (optInAccelerationLong > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInAccelerationMaxLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationMaxLong = 2.000000e-1; +/* Generated */ else if( (optInAccelerationMaxLong < 0.000000e+0) ||/* Generated */ (optInAccelerationMaxLong > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInAccelerationInitShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationInitShort = 2.000000e-2; +/* Generated */ else if( (optInAccelerationInitShort < 0.000000e+0) ||/* Generated */ (optInAccelerationInitShort > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInAccelerationShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationShort = 2.000000e-2; +/* Generated */ else if( (optInAccelerationShort < 0.000000e+0) ||/* Generated */ (optInAccelerationShort > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInAccelerationMaxShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationMaxShort = 2.000000e-1; +/* Generated */ else if( (optInAccelerationMaxShort < 0.000000e+0) ||/* Generated */ (optInAccelerationMaxShort > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* This function is the same as TA_SAR, except that the caller has + * greater control on the SAR dynamic and initial state. + * + * In additon, the TA_SAREXT returns negative values when the position + * is short. This allow to distinguish when the SAR do actually reverse. + */ + + /* Implementation of the SAR has been a little bit open to interpretation + * since Wilder (the original author) did not define a precise algorithm + * on how to bootstrap the algorithm. Take any existing software application + * and you will see slight variation on how the algorithm was adapted. + * + * What is the initial trade direction? Long or short? + * =================================================== + * The interpretation of what should be the initial SAR values is + * open to interpretation, particularly since the caller to the function + * does not specify the initial direction of the trade. + * + * In TA-Lib, the following default logic is used: + * - Calculate +DM and -DM between the first and + * second bar. The highest directional indication will + * indicate the assumed direction of the trade for the second + * price bar. + * - In the case of a tie between +DM and -DM, + * the direction is LONG by default. + * + * What is the initial "extreme point" and thus SAR? + * ================================================= + * The following shows how different people took different approach: + * - Metastock use the first price bar high/low depending of + * the direction. No SAR is calculated for the first price + * bar. + * - Tradestation use the closing price of the second bar. No + * SAR are calculated for the first price bar. + * - Wilder (the original author) use the SIP from the + * previous trade (cannot be implement here since the + * direction and length of the previous trade is unknonw). + * - The Magazine TASC seems to follow Wilder approach which + * is not practical here. + * + * TA-Lib "consume" the first price bar and use its high/low as the + * initial SAR of the second price bar. I found that approach to be + * the closest to Wilders idea of having the first entry day use + * the previous extreme point, except that here the extreme point is + * derived solely from the first price bar. I found the same approach + * to be used by Metastock. + * + * + * Can I force the initial SAR? + * ============================ + * Yes. Using the optInStartValue_0 parameter: + * optInStartValue_0 > 0 : SAR is long at optInStartValue_0. + * optInStartValue_0 < 0 : SAR is short at fabs(optInStartValue_0). + * + * And when optInStartValue_0 == 0, the logic is the same as for TA_SAR + * (See previous two sections). + */ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + * + * Move up the start index if there is not + * enough initial data. + */ + if( startIdx < 1 ) + startIdx = 1; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + + /* Check if the acceleration factors are being defined by the user. + * Make sure the acceleration and maximum are coherent. + * If not, correct the acceleration. + * Default afLong = 0.02 + * Default afShort = 0.02 + */ + + afLong = optInAccelerationInitLong; + afShort = optInAccelerationInitShort; + + if( afLong > optInAccelerationMaxLong ) + afLong = optInAccelerationInitLong = optInAccelerationMaxLong; + + if( optInAccelerationLong > optInAccelerationMaxLong ) + optInAccelerationLong = optInAccelerationMaxLong; + + if( afShort > optInAccelerationMaxShort) + afShort = optInAccelerationInitShort = optInAccelerationMaxShort; + + if( optInAccelerationShort > optInAccelerationMaxShort ) + optInAccelerationShort = optInAccelerationMaxShort; + + /* Initialise SAR calculations */ + + if(optInStartValue == 0) /* Default action */ + { + /* Identify if the initial direction is long or short. + * (ep is just used as a temp buffer here, the name + * of the parameter is not significant). + */ + retCode = FUNCTION_CALL(MINUS_DM)( startIdx, startIdx, inHigh, inLow, 1, + VALUE_HANDLE_OUT(tempInt), VALUE_HANDLE_OUT(tempInt), + ep_temp ); + if( ep_temp[0] > 0 ) + isLong = 0; + else + isLong = 1; + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + } + else if( optInStartValue > 0 ) /* Start Long */ + { + isLong = 1; + } + else /* optInStartValue_0 < 0 => Start Short */ + { + isLong = 0; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + outIdx = 0; + + + /* Write the first SAR. */ + todayIdx = startIdx; + + newHigh = inHigh[todayIdx-1]; + newLow = inLow[todayIdx-1]; + + SAR_ROUNDING(newHigh); + SAR_ROUNDING(newLow); + + if(optInStartValue == 0) /* Default action */ + { + if( isLong == 1 ) + { + ep = inHigh[todayIdx]; + sar = newLow; + } + else + { + ep = inLow[todayIdx]; + sar = newHigh; + } + } + else if ( optInStartValue > 0 ) /* Start Long at specified value. */ + { + ep = inHigh[todayIdx]; + sar = optInStartValue; + } + else /* if optInStartValue < 0 => Start Short at specified value. */ + { + ep = inLow[todayIdx]; + sar = std_fabs(optInStartValue); + } + + SAR_ROUNDING(sar); + + /* Cheat on the newLow and newHigh for the + * first iteration. + */ + newLow = inLow[todayIdx]; + newHigh = inHigh[todayIdx]; + + while( todayIdx <= endIdx ) + { + prevLow = newLow; + prevHigh = newHigh; + newLow = inLow[todayIdx]; + newHigh = inHigh[todayIdx]; + todayIdx++; + + SAR_ROUNDING(newLow); + SAR_ROUNDING(newHigh); + + if( isLong == 1 ) + { + /* Switch to short if the low penetrates the SAR value. */ + if( newLow <= sar ) + { + /* Switch and Overide the SAR with the ep */ + isLong = 0; + sar = ep; + + /* Make sure the overide SAR is within + * yesterday's and today's range. + */ + if( sar < prevHigh ) + sar = prevHigh; + if( sar < newHigh ) + sar = newHigh; + + /* Output the overide SAR */ + if( optInOffsetOnReverse != 0.0 ) + sar += sar * optInOffsetOnReverse; + outReal[outIdx++] = -sar; + + /* Adjust afShort and ep */ + afShort = optInAccelerationInitShort; + ep = newLow; + + /* Calculate the new SAR */ + sar = sar + afShort * (ep - sar); + SAR_ROUNDING( sar ); + + /* Make sure the new SAR is within + * yesterday's and today's range. + */ + if( sar < prevHigh ) + sar = prevHigh; + if( sar < newHigh ) + sar = newHigh; + } + else + { + /* No switch */ + + /* Output the SAR (was calculated in the previous iteration) */ + outReal[outIdx++] = sar; + + /* Adjust afLong and ep. */ + if( newHigh > ep ) + { + ep = newHigh; + afLong += optInAccelerationLong; + if( afLong > optInAccelerationMaxLong ) + afLong = optInAccelerationMaxLong; + } + + /* Calculate the new SAR */ + sar = sar + afLong * (ep - sar); + SAR_ROUNDING( sar ); + + /* Make sure the new SAR is within + * yesterday's and today's range. + */ + if( sar > prevLow ) + sar = prevLow; + if( sar > newLow ) + sar = newLow; + } + } + else + { + /* Switch to long if the high penetrates the SAR value. */ + if( newHigh >= sar ) + { + /* Switch and Overide the SAR with the ep */ + isLong = 1; + sar = ep; + + /* Make sure the overide SAR is within + * yesterday's and today's range. + */ + if( sar > prevLow ) + sar = prevLow; + if( sar > newLow ) + sar = newLow; + + /* Output the overide SAR */ + if( optInOffsetOnReverse != 0.0 ) + sar -= sar * optInOffsetOnReverse; + outReal[outIdx++] = sar; + + /* Adjust afLong and ep */ + afLong = optInAccelerationInitLong; + ep = newHigh; + + /* Calculate the new SAR */ + sar = sar + afLong * (ep - sar); + SAR_ROUNDING( sar ); + + /* Make sure the new SAR is within + * yesterday's and today's range. + */ + if( sar > prevLow ) + sar = prevLow; + if( sar > newLow ) + sar = newLow; + } + else + { + /* No switch */ + + /* Output the SAR (was calculated in the previous iteration) */ + outReal[outIdx++] = -sar; + + /* Adjust afShort and ep. */ + if( newLow < ep ) + { + ep = newLow; + afShort += optInAccelerationShort; + if( afShort > optInAccelerationMaxShort ) + afShort = optInAccelerationMaxShort; + } + + /* Calculate the new SAR */ + sar = sar + afShort * (ep - sar); + SAR_ROUNDING( sar ); + + /* Make sure the new SAR is within + * yesterday's and today's range. + */ + if( sar < prevHigh ) + sar = prevHigh; + if( sar < newHigh ) + sar = newHigh; + } + } + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::SarExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sarExt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_SAREXT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ double optInStartValue, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ double optInOffsetOnReverse, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxLong, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationInitShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ double optInAccelerationMaxShort, /* From 0 to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int isLong; +/* Generated */ int todayIdx, outIdx; +/* Generated */ VALUE_HANDLE_INT(tempInt); +/* Generated */ double newHigh, newLow, prevHigh, prevLow; +/* Generated */ double afLong, afShort, ep, sar; +/* Generated */ ARRAY_LOCAL(ep_temp,1); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( optInStartValue == TA_REAL_DEFAULT ) +/* Generated */ optInStartValue = 0.000000e+0; +/* Generated */ else if( (optInStartValue < -3.000000e+37) || (optInStartValue > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInOffsetOnReverse == TA_REAL_DEFAULT ) +/* Generated */ optInOffsetOnReverse = 0.000000e+0; +/* Generated */ else if( (optInOffsetOnReverse < 0.000000e+0) || (optInOffsetOnReverse > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInAccelerationInitLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationInitLong = 2.000000e-2; +/* Generated */ else if( (optInAccelerationInitLong < 0.000000e+0) || (optInAccelerationInitLong > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInAccelerationLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationLong = 2.000000e-2; +/* Generated */ else if( (optInAccelerationLong < 0.000000e+0) || (optInAccelerationLong > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInAccelerationMaxLong == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationMaxLong = 2.000000e-1; +/* Generated */ else if( (optInAccelerationMaxLong < 0.000000e+0) || (optInAccelerationMaxLong > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInAccelerationInitShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationInitShort = 2.000000e-2; +/* Generated */ else if( (optInAccelerationInitShort < 0.000000e+0) || (optInAccelerationInitShort > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInAccelerationShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationShort = 2.000000e-2; +/* Generated */ else if( (optInAccelerationShort < 0.000000e+0) || (optInAccelerationShort > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInAccelerationMaxShort == TA_REAL_DEFAULT ) +/* Generated */ optInAccelerationMaxShort = 2.000000e-1; +/* Generated */ else if( (optInAccelerationMaxShort < 0.000000e+0) || (optInAccelerationMaxShort > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < 1 ) +/* Generated */ startIdx = 1; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ afLong = optInAccelerationInitLong; +/* Generated */ afShort = optInAccelerationInitShort; +/* Generated */ if( afLong > optInAccelerationMaxLong ) +/* Generated */ afLong = optInAccelerationInitLong = optInAccelerationMaxLong; +/* Generated */ if( optInAccelerationLong > optInAccelerationMaxLong ) +/* Generated */ optInAccelerationLong = optInAccelerationMaxLong; +/* Generated */ if( afShort > optInAccelerationMaxShort) +/* Generated */ afShort = optInAccelerationInitShort = optInAccelerationMaxShort; +/* Generated */ if( optInAccelerationShort > optInAccelerationMaxShort ) +/* Generated */ optInAccelerationShort = optInAccelerationMaxShort; +/* Generated */ if(optInStartValue == 0) +/* Generated */ { +/* Generated */ retCode = FUNCTION_CALL(MINUS_DM)( startIdx, startIdx, inHigh, inLow, 1, +/* Generated */ VALUE_HANDLE_OUT(tempInt), VALUE_HANDLE_OUT(tempInt), +/* Generated */ ep_temp ); +/* Generated */ if( ep_temp[0] > 0 ) +/* Generated */ isLong = 0; +/* Generated */ else +/* Generated */ isLong = 1; +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ } +/* Generated */ else if( optInStartValue > 0 ) +/* Generated */ { +/* Generated */ isLong = 1; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ isLong = 0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ todayIdx = startIdx; +/* Generated */ newHigh = inHigh[todayIdx-1]; +/* Generated */ newLow = inLow[todayIdx-1]; +/* Generated */ SAR_ROUNDING(newHigh); +/* Generated */ SAR_ROUNDING(newLow); +/* Generated */ if(optInStartValue == 0) +/* Generated */ { +/* Generated */ if( isLong == 1 ) +/* Generated */ { +/* Generated */ ep = inHigh[todayIdx]; +/* Generated */ sar = newLow; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ ep = inLow[todayIdx]; +/* Generated */ sar = newHigh; +/* Generated */ } +/* Generated */ } +/* Generated */ else if ( optInStartValue > 0 ) +/* Generated */ { +/* Generated */ ep = inHigh[todayIdx]; +/* Generated */ sar = optInStartValue; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ ep = inLow[todayIdx]; +/* Generated */ sar = std_fabs(optInStartValue); +/* Generated */ } +/* Generated */ SAR_ROUNDING(sar); +/* Generated */ newLow = inLow[todayIdx]; +/* Generated */ newHigh = inHigh[todayIdx]; +/* Generated */ while( todayIdx <= endIdx ) +/* Generated */ { +/* Generated */ prevLow = newLow; +/* Generated */ prevHigh = newHigh; +/* Generated */ newLow = inLow[todayIdx]; +/* Generated */ newHigh = inHigh[todayIdx]; +/* Generated */ todayIdx++; +/* Generated */ SAR_ROUNDING(newLow); +/* Generated */ SAR_ROUNDING(newHigh); +/* Generated */ if( isLong == 1 ) +/* Generated */ { +/* Generated */ if( newLow <= sar ) +/* Generated */ { +/* Generated */ isLong = 0; +/* Generated */ sar = ep; +/* Generated */ if( sar < prevHigh ) +/* Generated */ sar = prevHigh; +/* Generated */ if( sar < newHigh ) +/* Generated */ sar = newHigh; +/* Generated */ if( optInOffsetOnReverse != 0.0 ) +/* Generated */ sar += sar * optInOffsetOnReverse; +/* Generated */ outReal[outIdx++] = -sar; +/* Generated */ afShort = optInAccelerationInitShort; +/* Generated */ ep = newLow; +/* Generated */ sar = sar + afShort * (ep - sar); +/* Generated */ SAR_ROUNDING( sar ); +/* Generated */ if( sar < prevHigh ) +/* Generated */ sar = prevHigh; +/* Generated */ if( sar < newHigh ) +/* Generated */ sar = newHigh; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ outReal[outIdx++] = sar; +/* Generated */ if( newHigh > ep ) +/* Generated */ { +/* Generated */ ep = newHigh; +/* Generated */ afLong += optInAccelerationLong; +/* Generated */ if( afLong > optInAccelerationMaxLong ) +/* Generated */ afLong = optInAccelerationMaxLong; +/* Generated */ } +/* Generated */ sar = sar + afLong * (ep - sar); +/* Generated */ SAR_ROUNDING( sar ); +/* Generated */ if( sar > prevLow ) +/* Generated */ sar = prevLow; +/* Generated */ if( sar > newLow ) +/* Generated */ sar = newLow; +/* Generated */ } +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ if( newHigh >= sar ) +/* Generated */ { +/* Generated */ isLong = 1; +/* Generated */ sar = ep; +/* Generated */ if( sar > prevLow ) +/* Generated */ sar = prevLow; +/* Generated */ if( sar > newLow ) +/* Generated */ sar = newLow; +/* Generated */ if( optInOffsetOnReverse != 0.0 ) +/* Generated */ sar -= sar * optInOffsetOnReverse; +/* Generated */ outReal[outIdx++] = sar; +/* Generated */ afLong = optInAccelerationInitLong; +/* Generated */ ep = newHigh; +/* Generated */ sar = sar + afLong * (ep - sar); +/* Generated */ SAR_ROUNDING( sar ); +/* Generated */ if( sar > prevLow ) +/* Generated */ sar = prevLow; +/* Generated */ if( sar > newLow ) +/* Generated */ sar = newLow; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ outReal[outIdx++] = -sar; +/* Generated */ if( newLow < ep ) +/* Generated */ { +/* Generated */ ep = newLow; +/* Generated */ afShort += optInAccelerationShort; +/* Generated */ if( afShort > optInAccelerationMaxShort ) +/* Generated */ afShort = optInAccelerationMaxShort; +/* Generated */ } +/* Generated */ sar = sar + afShort * (ep - sar); +/* Generated */ SAR_ROUNDING( sar ); +/* Generated */ if( sar < prevHigh ) +/* Generated */ sar = prevHigh; +/* Generated */ if( sar < newHigh ) +/* Generated */ sar = newHigh; +/* Generated */ } +/* Generated */ } +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + + diff --git a/src/ta_func/ta_SIN.c b/src/ta_func/ta_SIN.c new file mode 100644 index 000000000..af0b0f525 --- /dev/null +++ b/src/ta_func/ta_SIN.c @@ -0,0 +1,252 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 082507 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::SinLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int sinLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_SIN_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_SIN - Vector Trigonometric Sin + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Sin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_SIN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + + #ifndef TA_LIB_PRO + int i; + #endif + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + #ifdef TA_LIB_PRO + /* Section for code distributed with TA-Lib Pro only. */ + #else + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_sin(inReal[i]); + } + #endif + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sin( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_SIN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ #ifndef TA_LIB_PRO +/* Generated */ int i; +/* Generated */ #endif +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ #ifdef TA_LIB_PRO +/* Generated */ #else +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_sin(inReal[i]); +/* Generated */ } +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_SINH.c b/src/ta_func/ta_SINH.c new file mode 100644 index 000000000..4fe3ca89f --- /dev/null +++ b/src/ta_func/ta_SINH.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::SinhLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int sinhLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_SINH_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_SINH - Vector Trigonometric Sinh + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Sinh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sinh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sinh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_SINH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_sinh(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sinh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sinh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_SINH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_sinh(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_SMA.c b/src/ta_func/ta_SMA.c new file mode 100644 index 000000000..9c362415c --- /dev/null +++ b/src/ta_func/ta_SMA.c @@ -0,0 +1,411 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::SmaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int smaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_SMA_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return optInTimePeriod - 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_SMA - Simple Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Sma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_SMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + return FUNCTION_CALL(INT_SMA)( startIdx, endIdx, + inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); +} + +#if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT) + enum class Core::RetCode Core::TA_INT_SMA( int startIdx, + int endIdx, + SubArray^ inReal, + int optInTimePeriod, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outReal) +#elif defined( _MANAGED ) + enum class Core::RetCode Core::TA_INT_SMA( int startIdx, + int endIdx, + cli::array^ inReal, + int optInTimePeriod, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outReal) +#elif defined( _JAVA ) +RetCode TA_INT_SMA( int startIdx, + int endIdx, + INPUT_TYPE inReal[], + int optInTimePeriod, /* From 1 to TA_INTEGER_MAX */ + MInteger outBegIdx, + MInteger outNBElement, + double outReal[] ) +#else +TA_RetCode TA_PREFIX(INT_SMA)( int startIdx, + int endIdx, + const INPUT_TYPE *inReal, + int optInTimePeriod, /* From 1 to TA_INTEGER_MAX */ + int *outBegIdx, + int *outNBElement, + double *outReal ) +#endif +{ + double periodTotal, tempReal; + int i, outIdx, trailingIdx, lookbackTotal; + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the MA calculation using tight loops. */ + /* Add-up the initial period, except for the last value. */ + periodTotal = 0; + trailingIdx = startIdx-lookbackTotal; + + i=trailingIdx; + if( optInTimePeriod > 1 ) + { + while( i < startIdx ) + periodTotal += inReal[i++]; + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the inReal and + * outReal to be the same buffer. + */ + outIdx = 0; + do + { + periodTotal += inReal[i++]; + tempReal = periodTotal; + periodTotal -= inReal[trailingIdx++]; + outReal[outIdx++] = tempReal / optInTimePeriod; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_SMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ return FUNCTION_CALL(INT_SMA)( startIdx, endIdx, +/* Generated */ inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ } +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ enum class Core::RetCode Core::TA_INT_SMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TA_INT_SMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ RetCode TA_INT_SMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ INPUT_TYPE inReal[], +/* Generated */ int optInTimePeriod, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PREFIX(INT_SMA)( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const INPUT_TYPE *inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double *outReal ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double periodTotal, tempReal; +/* Generated */ int i, outIdx, trailingIdx, lookbackTotal; +/* Generated */ lookbackTotal = (optInTimePeriod-1); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ periodTotal = 0; +/* Generated */ trailingIdx = startIdx-lookbackTotal; +/* Generated */ i=trailingIdx; +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ { +/* Generated */ while( i < startIdx ) +/* Generated */ periodTotal += inReal[i++]; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ periodTotal += inReal[i++]; +/* Generated */ tempReal = periodTotal; +/* Generated */ periodTotal -= inReal[trailingIdx++]; +/* Generated */ outReal[outIdx++] = tempReal / optInTimePeriod; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_SQRT.c b/src/ta_func/ta_SQRT.c new file mode 100644 index 000000000..9ff4a15cb --- /dev/null +++ b/src/ta_func/ta_SQRT.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::SqrtLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int sqrtLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_SQRT_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_SQRT - Vector Square Root + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Sqrt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sqrt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sqrt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_SQRT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_sqrt(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sqrt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sqrt( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_SQRT( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_sqrt(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_STDDEV.c b/src/ta_func/ta_STDDEV.c new file mode 100644 index 000000000..bc7f894a2 --- /dev/null +++ b/src/ta_func/ta_STDDEV.c @@ -0,0 +1,497 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * JV Jesus Viver <324122@cienz.unizar.es> + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 100502 JV Speed optimization of the algorithm + * 052603 MF Adapt code to compile with .NET Managed C++ + * 090404 MF Fix #978056. Trap sqrt with negative zero values. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::StdDevLookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev ) /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int stdDevLookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev ) /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_STDDEV_Lookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev ) /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInNbDev == TA_REAL_DEFAULT ) +/* Generated */ optInNbDev = 1.000000e+0; +/* Generated */ else if( (optInNbDev < -3.000000e+37) ||/* Generated */ (optInNbDev > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* Lookback is driven by the variance. */ + return LOOKBACK_CALL(VAR)( optInTimePeriod, optInNbDev ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_STDDEV - Standard Deviation + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * optInNbDev:(From TA_REAL_MIN to TA_REAL_MAX) + * Nb of deviations + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::StdDev( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::StdDev( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode stdDev( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_STDDEV( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int i; + ENUM_DECLARATION(RetCode) retCode; + double tempReal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInNbDev == TA_REAL_DEFAULT ) +/* Generated */ optInNbDev = 1.000000e+0; +/* Generated */ else if( (optInNbDev < -3.000000e+37) ||/* Generated */ (optInNbDev > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Calculate the variance. */ + retCode = FUNCTION_CALL(INT_VAR)( startIdx, endIdx, + inReal, optInTimePeriod, + outBegIdx, outNBElement, outReal ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + return retCode; + + /* Calculate the square root of each variance, this + * is the standard deviation. + * + * Multiply also by the ratio specified. + */ + if( optInNbDev != 1.0 ) + { + for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) + { + tempReal = outReal[i]; + if( !TA_IS_ZERO_OR_NEG(tempReal) ) + outReal[i] = std_sqrt(tempReal) * optInNbDev; + else + outReal[i] = (double)0.0; + } + } + else + { + for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) + { + tempReal = outReal[i]; + if( !TA_IS_ZERO_OR_NEG(tempReal) ) + outReal[i] = std_sqrt(tempReal); + else + outReal[i] = (double)0.0; + } + } + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/* The inMovAvg is the moving average of the inReal. + * + * inMovAvgBegIdx is relative to inReal, in other word + * this is the 'outBegIdx' who was returned when doing the + * MA on the inReal. + * + * inMovAvgNbElement is the number of element who was returned + * when doing the MA on the inReal. + * + * Note: This function is not used by TA_STDDEV, since TA_STDDEV + * is optimized considering it uses always a simple moving + * average. Still the function is put here because it is + * closely related. + */ +#if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT) +void Core::TA_INT_stddev_using_precalc_ma( SubArray^ inReal, + cli::array^ inMovAvg, + int inMovAvgBegIdx, + int inMovAvgNbElement, + int timePeriod, + cli::array^ output) +#elif defined( _MANAGED ) +void Core::TA_INT_stddev_using_precalc_ma( cli::array^ inReal, + cli::array^ inMovAvg, + int inMovAvgBegIdx, + int inMovAvgNbElement, + int timePeriod, + cli::array^ output) +#elif defined( _JAVA ) +void TA_INT_stddev_using_precalc_ma( INPUT_TYPE inReal[], + double inMovAvg[], + int inMovAvgBegIdx, + int inMovAvgNbElement, + int timePeriod, + double output[] ) +#else +void TA_PREFIX(INT_stddev_using_precalc_ma)( const INPUT_TYPE *inReal, + const double *inMovAvg, + int inMovAvgBegIdx, + int inMovAvgNbElement, + int timePeriod, + double *output ) +#endif +{ + double tempReal, periodTotal2, meanValue2; + int outIdx; + + /* Start/end index for sumation. */ + int startSum, endSum; + + startSum = 1+inMovAvgBegIdx-timePeriod; + endSum = inMovAvgBegIdx; + + periodTotal2 = 0; + + for( outIdx = startSum; outIdx < endSum; outIdx++) + { + tempReal = inReal[outIdx]; + tempReal *= tempReal; + periodTotal2 += tempReal; + } + + for( outIdx=0; outIdx < inMovAvgNbElement; outIdx++, startSum++, endSum++ ) + { + tempReal = inReal[endSum]; + tempReal *= tempReal; + periodTotal2 += tempReal; + meanValue2 = periodTotal2/timePeriod; + + tempReal = inReal[startSum]; + tempReal *= tempReal; + periodTotal2 -= tempReal; + + tempReal = inMovAvg[outIdx]; + tempReal *= tempReal; + meanValue2 -= tempReal; + + if( !TA_IS_ZERO_OR_NEG(meanValue2) ) + output[outIdx] = std_sqrt(meanValue2); + else + output[outIdx] = (double)0.0; + } +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::StdDev( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode stdDev( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_STDDEV( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int i; +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ double tempReal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInNbDev == TA_REAL_DEFAULT ) +/* Generated */ optInNbDev = 1.000000e+0; +/* Generated */ else if( (optInNbDev < -3.000000e+37) || (optInNbDev > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ retCode = FUNCTION_CALL(INT_VAR)( startIdx, endIdx, +/* Generated */ inReal, optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ return retCode; +/* Generated */ if( optInNbDev != 1.0 ) +/* Generated */ { +/* Generated */ for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) +/* Generated */ { +/* Generated */ tempReal = outReal[i]; +/* Generated */ if( !TA_IS_ZERO_OR_NEG(tempReal) ) +/* Generated */ outReal[i] = std_sqrt(tempReal) * optInNbDev; +/* Generated */ else +/* Generated */ outReal[i] = (double)0.0; +/* Generated */ } +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ ) +/* Generated */ { +/* Generated */ tempReal = outReal[i]; +/* Generated */ if( !TA_IS_ZERO_OR_NEG(tempReal) ) +/* Generated */ outReal[i] = std_sqrt(tempReal); +/* Generated */ else +/* Generated */ outReal[i] = (double)0.0; +/* Generated */ } +/* Generated */ } +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ void Core::TA_INT_stddev_using_precalc_ma( SubArray^ inReal, +/* Generated */ cli::array^ inMovAvg, +/* Generated */ int inMovAvgBegIdx, +/* Generated */ int inMovAvgNbElement, +/* Generated */ int timePeriod, +/* Generated */ cli::array^ output) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ void Core::TA_INT_stddev_using_precalc_ma( cli::array^ inReal, +/* Generated */ cli::array^ inMovAvg, +/* Generated */ int inMovAvgBegIdx, +/* Generated */ int inMovAvgNbElement, +/* Generated */ int timePeriod, +/* Generated */ cli::array^ output) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ void TA_INT_stddev_using_precalc_ma( INPUT_TYPE inReal[], +/* Generated */ double inMovAvg[], +/* Generated */ int inMovAvgBegIdx, +/* Generated */ int inMovAvgNbElement, +/* Generated */ int timePeriod, +/* Generated */ double output[] ) +/* Generated */ #else +/* Generated */ void TA_PREFIX(INT_stddev_using_precalc_ma)( const INPUT_TYPE *inReal, +/* Generated */ const double *inMovAvg, +/* Generated */ int inMovAvgBegIdx, +/* Generated */ int inMovAvgNbElement, +/* Generated */ int timePeriod, +/* Generated */ double *output ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double tempReal, periodTotal2, meanValue2; +/* Generated */ int outIdx; +/* Generated */ int startSum, endSum; +/* Generated */ startSum = 1+inMovAvgBegIdx-timePeriod; +/* Generated */ endSum = inMovAvgBegIdx; +/* Generated */ periodTotal2 = 0; +/* Generated */ for( outIdx = startSum; outIdx < endSum; outIdx++) +/* Generated */ { +/* Generated */ tempReal = inReal[outIdx]; +/* Generated */ tempReal *= tempReal; +/* Generated */ periodTotal2 += tempReal; +/* Generated */ } +/* Generated */ for( outIdx=0; outIdx < inMovAvgNbElement; outIdx++, startSum++, endSum++ ) +/* Generated */ { +/* Generated */ tempReal = inReal[endSum]; +/* Generated */ tempReal *= tempReal; +/* Generated */ periodTotal2 += tempReal; +/* Generated */ meanValue2 = periodTotal2/timePeriod; +/* Generated */ tempReal = inReal[startSum]; +/* Generated */ tempReal *= tempReal; +/* Generated */ periodTotal2 -= tempReal; +/* Generated */ tempReal = inMovAvg[outIdx]; +/* Generated */ tempReal *= tempReal; +/* Generated */ meanValue2 -= tempReal; +/* Generated */ if( !TA_IS_ZERO_OR_NEG(meanValue2) ) +/* Generated */ output[outIdx] = std_sqrt(meanValue2); +/* Generated */ else +/* Generated */ output[outIdx] = (double)0.0; +/* Generated */ } +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_STOCH.c b/src/ta_func/ta_STOCH.c new file mode 100644 index 000000000..4c581fe70 --- /dev/null +++ b/src/ta_func/ta_STOCH.c @@ -0,0 +1,802 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::StochLookback( int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowD_MAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int stochLookback( int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowD_MAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_STOCH_Lookback( int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSlowD_MAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int retValue; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInFastK_Period. */ +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowK_Period. */ +/* Generated */ if( (int)optInSlowK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowK_Period = 3; +/* Generated */ else if( ((int)optInSlowK_Period < 1) || ((int)optInSlowK_Period > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowK_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowK_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowK_MAType < 0) || ((int)optInSlowK_MAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInSlowD_Period. */ +/* Generated */ if( (int)optInSlowD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowD_Period = 3; +/* Generated */ else if( ((int)optInSlowD_Period < 1) || ((int)optInSlowD_Period > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowD_MAType < 0) || ((int)optInSlowD_MAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* Account for the initial data needed for Fast-K. */ + retValue = (optInFastK_Period - 1); + + /* Add the smoothing being done for %K slow */ + retValue += LOOKBACK_CALL(MA)( optInSlowK_Period, optInSlowK_MAType ); + + /* Add the smoothing being done for %D slow. */ + retValue += LOOKBACK_CALL(MA)( optInSlowD_Period, optInSlowD_MAType ); + + return retValue; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_STOCH - Stochastic + * + * Input = High, Low, Close + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInFastK_Period:(From 1 to 100000) + * Time period for building the Fast-K line + * + * optInSlowK_Period:(From 1 to 100000) + * Smoothing for making the Slow-K line. Usually set to 3 + * + * optInSlowK_MAType: + * Type of Moving Average for Slow-K + * + * optInSlowD_Period:(From 1 to 100000) + * Smoothing for making the Slow-D line + * + * optInSlowD_MAType: + * Type of Moving Average for Slow-D + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Stoch( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outSlowK, +/* Generated */ cli::array^ outSlowD ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Stoch( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outSlowK, +/* Generated */ cli::array^ outSlowD ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode stoch( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowD_MAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outSlowK[], +/* Generated */ double outSlowD[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_STOCH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSlowD_MAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outSlowK[], +/* Generated */ double outSlowD[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ENUM_DECLARATION(RetCode) retCode; + double lowest, highest, tmp, diff; + ARRAY_REF( tempBuffer ); + int outIdx, lowestIdx, highestIdx; + int lookbackTotal, lookbackK, lookbackKSlow, lookbackDSlow; + int trailingIdx, today, i; + #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) &&!defined(_JAVA) + int bufferIsAllocated; + #endif + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInFastK_Period. */ +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInSlowK_Period. */ +/* Generated */ if( (int)optInSlowK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowK_Period = 3; +/* Generated */ else if( ((int)optInSlowK_Period < 1) || ((int)optInSlowK_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowK_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowK_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowK_MAType < 0) || ((int)optInSlowK_MAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInSlowD_Period. */ +/* Generated */ if( (int)optInSlowD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowD_Period = 3; +/* Generated */ else if( ((int)optInSlowD_Period < 1) || ((int)optInSlowD_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowD_MAType < 0) || ((int)optInSlowD_MAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outSlowK ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outSlowD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* With stochastic, there is a total of 4 different lines that + * are defined: FASTK, FASTD, SLOWK and SLOWD. + * + * The D is the signal line usually drawn over its + * corresponding K function. + * + * (Today's Close - LowestLow) + * FASTK(Kperiod) = --------------------------- * 100 + * (HighestHigh - LowestLow) + * + * FASTD(FastDperiod, MA type) = MA Smoothed FASTK over FastDperiod + * + * SLOWK(SlowKperiod, MA type) = MA Smoothed FASTK over SlowKperiod + * + * SLOWD(SlowDperiod, MA Type) = MA Smoothed SLOWK over SlowDperiod + * + * The HighestHigh and LowestLow are the extreme values among the + * last 'Kperiod'. + * + * SLOWK and FASTD are equivalent when using the same period. + * + * The following shows how these four lines are made available in TA-LIB: + * + * TA_STOCH : Returns the SLOWK and SLOWD + * TA_STOCHF : Returns the FASTK and FASTD + * + * The TA_STOCH function correspond to the more widely implemented version + * found in many software/charting package. The TA_STOCHF is more rarely + * used because its higher volatility cause often whipsaws. + */ + + /* Identify the lookback needed. */ + lookbackK = optInFastK_Period-1; + lookbackKSlow = LOOKBACK_CALL(MA)( optInSlowK_Period, optInSlowK_MAType ); + lookbackDSlow = LOOKBACK_CALL(MA)( optInSlowD_Period, optInSlowD_MAType ); + lookbackTotal = lookbackK + lookbackDSlow + lookbackKSlow; + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + /* Succeed... but no data in the output. */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the K calculation: + * + * Kt = 100 x ((Ct-Lt)/(Ht-Lt)) + * + * Kt is today stochastic + * Ct is today closing price. + * Lt is the lowest price of the last K Period (including today) + * Ht is the highest price of the last K Period (including today) + */ + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + + /* Calculate just enough K for ending up with the caller + * requested range. (The range of k must consider all + * the lookback involve with the smoothing). + */ + trailingIdx = startIdx-lookbackTotal; + today = trailingIdx+lookbackK; + lowestIdx = highestIdx = -1; + diff = highest = lowest = 0.0; + + /* Allocate a temporary buffer large enough to + * store the K. + * + * If the output is the same as the input, great + * we just save ourself one memory allocation. + */ + #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) && !defined( _JAVA ) + bufferIsAllocated = 0; + #endif + + #if defined(USE_SINGLE_PRECISION_INPUT) || defined( USE_SUBARRAY ) + /* Always alloc, since output is of different type and + * its allocated size is not guarantee to be as large as + * the input. + */ + ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); + #else + if( (outSlowK == inHigh) || + (outSlowK == inLow) || + (outSlowK == inClose) ) + { + tempBuffer = outSlowK; + } + else if( (outSlowD == inHigh) || + (outSlowD == inLow) || + (outSlowD == inClose) ) + { + tempBuffer = outSlowD; + } + else + { + #if !defined( _MANAGED ) && !defined(_JAVA) + bufferIsAllocated = 1; + #endif + ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); + } + #endif + + /* Do the K calculation */ + while( today <= endIdx ) + { + /* Set the lowest low */ + tmp = inLow[today]; + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inLow[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmp = inLow[i]; + if( tmp < lowest ) + { + lowestIdx = i; + lowest = tmp; + } + } + diff = (highest - lowest)/100.0; + } + else if( tmp <= lowest ) + { + lowestIdx = today; + lowest = tmp; + diff = (highest - lowest)/100.0; + } + + /* Set the highest high */ + tmp = inHigh[today]; + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inHigh[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmp = inHigh[i]; + if( tmp > highest ) + { + highestIdx = i; + highest = tmp; + } + } + diff = (highest - lowest)/100.0; + } + else if( tmp >= highest ) + { + highestIdx = today; + highest = tmp; + diff = (highest - lowest)/100.0; + } + + /* Calculate stochastic. */ + if( diff != 0.0 ) + tempBuffer[outIdx++] = (inClose[today]-lowest)/diff; + else + tempBuffer[outIdx++] = 0.0; + + trailingIdx++; + today++; + } + + /* Un-smoothed K calculation completed. This K calculation is not returned + * to the caller. It is always smoothed and then return. + * Some documentation will refer to the smoothed version as being + * "K-Slow", but often this end up to be shorten to "K". + */ + retCode = FUNCTION_CALL_DOUBLE(MA)( 0, outIdx-1, + tempBuffer, optInSlowK_Period, + optInSlowK_MAType, + outBegIdx, outNBElement, tempBuffer ); + + + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || ((int)VALUE_HANDLE_DEREF(outNBElement) == 0) ) + { + #if defined(USE_SINGLE_PRECISION_INPUT) + ARRAY_FREE( tempBuffer ); + #else + ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); + #endif + /* Something wrong happen? No further data? */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + /* Calculate the %D which is simply a moving average of + * the already smoothed %K. + */ + retCode = FUNCTION_CALL_DOUBLE(MA)( 0, (int)VALUE_HANDLE_DEREF(outNBElement)-1, + tempBuffer, optInSlowD_Period, + optInSlowD_MAType, + outBegIdx, outNBElement, outSlowD ); + + /* Copy tempBuffer into the caller buffer. + * (Calculation could not be done directly in the + * caller buffer because more input data then the + * requested range was needed for doing %D). + */ + ARRAY_MEMMOVE( outSlowK, 0, tempBuffer,lookbackDSlow,(int)VALUE_HANDLE_DEREF(outNBElement)); + + /* Don't need K anymore, free it if it was allocated here. */ + #if defined(USE_SINGLE_PRECISION_INPUT) + ARRAY_FREE( tempBuffer ); + #else + ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); + #endif + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + /* Something wrong happen while processing %D? */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + /* Note: Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Stoch( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outSlowK, +/* Generated */ cli::array^ outSlowD ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode stoch( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInSlowD_MAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outSlowK[], +/* Generated */ double outSlowD[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_STOCH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSlowK_MAType, +/* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInSlowD_MAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outSlowK[], +/* Generated */ double outSlowD[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ double lowest, highest, tmp, diff; +/* Generated */ ARRAY_REF( tempBuffer ); +/* Generated */ int outIdx, lowestIdx, highestIdx; +/* Generated */ int lookbackTotal, lookbackK, lookbackKSlow, lookbackDSlow; +/* Generated */ int trailingIdx, today, i; +/* Generated */ #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) &&!defined(_JAVA) +/* Generated */ int bufferIsAllocated; +/* Generated */ #endif +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInSlowK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowK_Period = 3; +/* Generated */ else if( ((int)optInSlowK_Period < 1) || ((int)optInSlowK_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowK_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowK_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowK_MAType < 0) || ((int)optInSlowK_MAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInSlowD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowD_Period = 3; +/* Generated */ else if( ((int)optInSlowD_Period < 1) || ((int)optInSlowD_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInSlowD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInSlowD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInSlowD_MAType < 0) || ((int)optInSlowD_MAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outSlowK ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outSlowD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackK = optInFastK_Period-1; +/* Generated */ lookbackKSlow = LOOKBACK_CALL(MA)( optInSlowK_Period, optInSlowK_MAType ); +/* Generated */ lookbackDSlow = LOOKBACK_CALL(MA)( optInSlowD_Period, optInSlowD_MAType ); +/* Generated */ lookbackTotal = lookbackK + lookbackDSlow + lookbackKSlow; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ trailingIdx = startIdx-lookbackTotal; +/* Generated */ today = trailingIdx+lookbackK; +/* Generated */ lowestIdx = highestIdx = -1; +/* Generated */ diff = highest = lowest = 0.0; +/* Generated */ #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) && !defined( _JAVA ) +/* Generated */ bufferIsAllocated = 0; +/* Generated */ #endif +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) || defined( USE_SUBARRAY ) +/* Generated */ ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); +/* Generated */ #else +/* Generated */ if( (outSlowK == inHigh) || +/* Generated */ (outSlowK == inLow) || +/* Generated */ (outSlowK == inClose) ) +/* Generated */ { +/* Generated */ tempBuffer = outSlowK; +/* Generated */ } +/* Generated */ else if( (outSlowD == inHigh) || +/* Generated */ (outSlowD == inLow) || +/* Generated */ (outSlowD == inClose) ) +/* Generated */ { +/* Generated */ tempBuffer = outSlowD; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ #if !defined( _MANAGED ) && !defined(_JAVA) +/* Generated */ bufferIsAllocated = 1; +/* Generated */ #endif +/* Generated */ ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); +/* Generated */ } +/* Generated */ #endif +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inLow[today]; +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inLow[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inLow[i]; +/* Generated */ if( tmp < lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ diff = (highest - lowest)/100.0; +/* Generated */ } +/* Generated */ else if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmp; +/* Generated */ diff = (highest - lowest)/100.0; +/* Generated */ } +/* Generated */ tmp = inHigh[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inHigh[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inHigh[i]; +/* Generated */ if( tmp > highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ diff = (highest - lowest)/100.0; +/* Generated */ } +/* Generated */ else if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmp; +/* Generated */ diff = (highest - lowest)/100.0; +/* Generated */ } +/* Generated */ if( diff != 0.0 ) +/* Generated */ tempBuffer[outIdx++] = (inClose[today]-lowest)/diff; +/* Generated */ else +/* Generated */ tempBuffer[outIdx++] = 0.0; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(MA)( 0, outIdx-1, +/* Generated */ tempBuffer, optInSlowK_Period, +/* Generated */ optInSlowK_MAType, +/* Generated */ outBegIdx, outNBElement, tempBuffer ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || ((int)VALUE_HANDLE_DEREF(outNBElement) == 0) ) +/* Generated */ { +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ #else +/* Generated */ ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(MA)( 0, (int)VALUE_HANDLE_DEREF(outNBElement)-1, +/* Generated */ tempBuffer, optInSlowD_Period, +/* Generated */ optInSlowD_MAType, +/* Generated */ outBegIdx, outNBElement, outSlowD ); +/* Generated */ ARRAY_MEMMOVE( outSlowK, 0, tempBuffer,lookbackDSlow,(int)VALUE_HANDLE_DEREF(outNBElement)); +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ #else +/* Generated */ ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); +/* Generated */ #endif +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_STOCHF.c b/src/ta_func/ta_STOCHF.c new file mode 100644 index 000000000..60ffeacda --- /dev/null +++ b/src/ta_func/ta_STOCHF.c @@ -0,0 +1,722 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * EKO echo999@ifrance.com + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 051103 EKO Found bug and fix related to outFastD. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::StochFLookback( int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int stochFLookback( int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_STOCHF_Lookback( int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInFastD_MAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int retValue; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInFastK_Period. */ +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInFastD_Period. */ +/* Generated */ if( (int)optInFastD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_Period = 3; +/* Generated */ else if( ((int)optInFastD_Period < 1) || ((int)optInFastD_Period > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastD_MAType < 0) || ((int)optInFastD_MAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* Account for the initial data needed for Fast-K. */ + retValue = (optInFastK_Period - 1); + + /* Add the smoothing being done for Fast-D */ + retValue += LOOKBACK_CALL(MA)( optInFastD_Period, optInFastD_MAType ); + + return retValue; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_STOCHF - Stochastic Fast + * + * Input = High, Low, Close + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInFastK_Period:(From 1 to 100000) + * Time period for building the Fast-K line + * + * optInFastD_Period:(From 1 to 100000) + * Smoothing for making the Fast-D line. Usually set to 3 + * + * optInFastD_MAType: + * Type of Moving Average for Fast-D + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::StochF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outFastK, +/* Generated */ cli::array^ outFastD ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::StochF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outFastK, +/* Generated */ cli::array^ outFastD ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode stochF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outFastK[], +/* Generated */ double outFastD[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_STOCHF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInFastD_MAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outFastK[], +/* Generated */ double outFastD[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + ENUM_DECLARATION(RetCode) retCode; + double lowest, highest, tmp, diff; + ARRAY_REF( tempBuffer ); + int outIdx, lowestIdx, highestIdx; + int lookbackTotal, lookbackK, lookbackFastD; + int trailingIdx, today, i; + + #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) && !defined( _JAVA ) + int bufferIsAllocated; + #endif + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInFastK_Period. */ +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInFastD_Period. */ +/* Generated */ if( (int)optInFastD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_Period = 3; +/* Generated */ else if( ((int)optInFastD_Period < 1) || ((int)optInFastD_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastD_MAType < 0) || ((int)optInFastD_MAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outFastK ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outFastD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* With stochastic, there is a total of 4 different lines that + * are defined: FASTK, FASTD, SLOWK and SLOWD. + * + * The D is the signal line usually drawn over its + * corresponding K function. + * + * (Today's Close - LowestLow) + * FASTK(Kperiod) = --------------------------- * 100 + * (HighestHigh - LowestLow) + * + * FASTD(FastDperiod, MA type) = MA Smoothed FASTK over FastDperiod + * + * SLOWK(SlowKperiod, MA type) = MA Smoothed FASTK over SlowKperiod + * + * SLOWD(SlowDperiod, MA Type) = MA Smoothed SLOWK over SlowDperiod + * + * The HighestHigh and LowestLow are the extreme values among the + * last 'Kperiod'. + * + * SLOWK and FASTD are equivalent when using the same period. + * + * The following shows how these four lines are made available in TA-LIB: + * + * TA_STOCH : Returns the SLOWK and SLOWD + * TA_STOCHF : Returns the FASTK and FASTD + * + * The TA_STOCH function correspond to the more widely implemented version + * found in many software/charting package. The TA_STOCHF is more rarely + * used because its higher volatility cause often whipsaws. + */ + + /* Identify the lookback needed. */ + lookbackK = optInFastK_Period-1; + lookbackFastD = LOOKBACK_CALL(MA)( optInFastD_Period, optInFastD_MAType ); + lookbackTotal = lookbackK + lookbackFastD; + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + /* Succeed... but no data in the output. */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the K calculation: + * + * Kt = 100 x ((Ct-Lt)/(Ht-Lt)) + * + * Kt is today stochastic + * Ct is today closing price. + * Lt is the lowest price of the last K Period (including today) + * Ht is the highest price of the last K Period (including today) + */ + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + + /* Calculate just enough K for ending up with the caller + * requested range. (The range of k must consider all + * the lookback involve with the smoothing). + */ + trailingIdx = startIdx-lookbackTotal; + today = trailingIdx+lookbackK; + lowestIdx = highestIdx = -1; + diff = highest = lowest = 0.0; + + /* Allocate a temporary buffer large enough to + * store the K. + * + * If the output is the same as the input, great + * we just save ourself one memory allocation. + */ + #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) && !defined( _JAVA ) + bufferIsAllocated = 0; + #endif + + #if defined(USE_SINGLE_PRECISION_INPUT) || defined( USE_SUBARRAY ) + /* Always alloc, since output is of different type and + * its allocated size is not guarantee to be as large as + * the input. + */ + ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); + #else + if( (outFastK == inHigh) || + (outFastK == inLow) || + (outFastK == inClose) ) + { + tempBuffer = outFastK; + } + else if( (outFastD == inHigh) || + (outFastD == inLow) || + (outFastD == inClose) ) + { + tempBuffer = outFastD; + } + else + { + #if !defined( _MANAGED ) && !defined( _JAVA ) + bufferIsAllocated = 1; + #endif + ARRAY_ALLOC(tempBuffer, endIdx-today+1 ); + } + #endif + + /* Do the K calculation */ + while( today <= endIdx ) + { + /* Set the lowest low */ + tmp = inLow[today]; + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inLow[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmp = inLow[i]; + if( tmp < lowest ) + { + lowestIdx = i; + lowest = tmp; + } + } + diff = (highest - lowest)/100.0; + } + else if( tmp <= lowest ) + { + lowestIdx = today; + lowest = tmp; + diff = (highest - lowest)/100.0; + } + + /* Set the highest high */ + tmp = inHigh[today]; + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inHigh[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmp = inHigh[i]; + if( tmp > highest ) + { + highestIdx = i; + highest = tmp; + } + } + diff = (highest - lowest)/100.0; + } + else if( tmp >= highest ) + { + highestIdx = today; + highest = tmp; + diff = (highest - lowest)/100.0; + } + + /* Calculate stochastic. */ + if( diff != 0.0 ) + tempBuffer[outIdx++] = (inClose[today]-lowest)/diff; + else + tempBuffer[outIdx++] = 0.0; + + trailingIdx++; + today++; + } + + /* Fast-K calculation completed. This K calculation is returned + * to the caller. It is smoothed to become Fast-D. + */ + retCode = FUNCTION_CALL_DOUBLE(MA)( 0, outIdx-1, + tempBuffer, optInFastD_Period, + optInFastD_MAType, + outBegIdx, outNBElement, outFastD ); + + + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || ((int)VALUE_HANDLE_DEREF(outNBElement)) == 0 ) + { + #if defined(USE_SINGLE_PRECISION_INPUT) + ARRAY_FREE( tempBuffer ); + #else + ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); + #endif + /* Something wrong happen? No further data? */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + /* Copy tempBuffer into the caller buffer. + * (Calculation could not be done directly in the + * caller buffer because more input data then the + * requested range was needed for doing %D). + */ + ARRAY_MEMMOVE( outFastK, 0, tempBuffer, lookbackFastD, (int)VALUE_HANDLE_DEREF(outNBElement) ); + + /* Don't need K anymore, free it if it was allocated here. */ + #if defined(USE_SINGLE_PRECISION_INPUT) + ARRAY_FREE( tempBuffer ); + #else + ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); + #endif + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) + { + /* Something wrong happen while processing %D? */ + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + /* Note: Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::StochF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outFastK, +/* Generated */ cli::array^ outFastD ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode stochF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outFastK[], +/* Generated */ double outFastD[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_STOCHF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInFastD_MAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outFastK[], +/* Generated */ double outFastD[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ double lowest, highest, tmp, diff; +/* Generated */ ARRAY_REF( tempBuffer ); +/* Generated */ int outIdx, lowestIdx, highestIdx; +/* Generated */ int lookbackTotal, lookbackK, lookbackFastD; +/* Generated */ int trailingIdx, today, i; +/* Generated */ #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) && !defined( _JAVA ) +/* Generated */ int bufferIsAllocated; +/* Generated */ #endif +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInFastD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_Period = 3; +/* Generated */ else if( ((int)optInFastD_Period < 1) || ((int)optInFastD_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastD_MAType < 0) || ((int)optInFastD_MAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outFastK ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outFastD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackK = optInFastK_Period-1; +/* Generated */ lookbackFastD = LOOKBACK_CALL(MA)( optInFastD_Period, optInFastD_MAType ); +/* Generated */ lookbackTotal = lookbackK + lookbackFastD; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ trailingIdx = startIdx-lookbackTotal; +/* Generated */ today = trailingIdx+lookbackK; +/* Generated */ lowestIdx = highestIdx = -1; +/* Generated */ diff = highest = lowest = 0.0; +/* Generated */ #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) && !defined( _JAVA ) +/* Generated */ bufferIsAllocated = 0; +/* Generated */ #endif +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) || defined( USE_SUBARRAY ) +/* Generated */ ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); +/* Generated */ #else +/* Generated */ if( (outFastK == inHigh) || +/* Generated */ (outFastK == inLow) || +/* Generated */ (outFastK == inClose) ) +/* Generated */ { +/* Generated */ tempBuffer = outFastK; +/* Generated */ } +/* Generated */ else if( (outFastD == inHigh) || +/* Generated */ (outFastD == inLow) || +/* Generated */ (outFastD == inClose) ) +/* Generated */ { +/* Generated */ tempBuffer = outFastD; +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ bufferIsAllocated = 1; +/* Generated */ #endif +/* Generated */ ARRAY_ALLOC(tempBuffer, endIdx-today+1 ); +/* Generated */ } +/* Generated */ #endif +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inLow[today]; +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inLow[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inLow[i]; +/* Generated */ if( tmp < lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ diff = (highest - lowest)/100.0; +/* Generated */ } +/* Generated */ else if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmp; +/* Generated */ diff = (highest - lowest)/100.0; +/* Generated */ } +/* Generated */ tmp = inHigh[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inHigh[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inHigh[i]; +/* Generated */ if( tmp > highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ diff = (highest - lowest)/100.0; +/* Generated */ } +/* Generated */ else if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmp; +/* Generated */ diff = (highest - lowest)/100.0; +/* Generated */ } +/* Generated */ if( diff != 0.0 ) +/* Generated */ tempBuffer[outIdx++] = (inClose[today]-lowest)/diff; +/* Generated */ else +/* Generated */ tempBuffer[outIdx++] = 0.0; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(MA)( 0, outIdx-1, +/* Generated */ tempBuffer, optInFastD_Period, +/* Generated */ optInFastD_MAType, +/* Generated */ outBegIdx, outNBElement, outFastD ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || ((int)VALUE_HANDLE_DEREF(outNBElement)) == 0 ) +/* Generated */ { +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ #else +/* Generated */ ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ ARRAY_MEMMOVE( outFastK, 0, tempBuffer, lookbackFastD, (int)VALUE_HANDLE_DEREF(outNBElement) ); +/* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ #else +/* Generated */ ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); +/* Generated */ #endif +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_STOCHRSI.c b/src/ta_func/ta_STOCHRSI.c new file mode 100644 index 000000000..bf11cdbef --- /dev/null +++ b/src/ta_func/ta_STOCHRSI.c @@ -0,0 +1,507 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * PP Peter Pudaite + * AA Andrew Atkinson + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 101103 PP Initial creation of code. + * 112603 MF Add independent control to the RSI period. + * 020605 AA Fix #1117656. NULL pointer assignement. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::StochRsiLookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType ) /* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int stochRsiLookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType ) /* Generated */ +/* Generated */ #else +/* Generated */ int TA_STOCHRSI_Lookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInFastD_MAType ) /* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int retValue; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInFastK_Period. */ +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInFastD_Period. */ +/* Generated */ if( (int)optInFastD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_Period = 3; +/* Generated */ else if( ((int)optInFastD_Period < 1) || ((int)optInFastD_Period > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastD_MAType < 0) || ((int)optInFastD_MAType > 8) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + retValue = LOOKBACK_CALL(RSI)( optInTimePeriod ) + LOOKBACK_CALL(STOCHF)( optInFastK_Period, optInFastD_Period, optInFastD_MAType ); + + return retValue; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_STOCHRSI - Stochastic Relative Strength Index + * + * Input = double + * Output = double, double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * optInFastK_Period:(From 1 to 100000) + * Time period for building the Fast-K line + * + * optInFastD_Period:(From 1 to 100000) + * Smoothing for making the Fast-D line. Usually set to 3 + * + * optInFastD_MAType: + * Type of Moving Average for Fast-D + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::StochRsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outFastK, +/* Generated */ cli::array^ outFastD ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::StochRsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outFastK, +/* Generated */ cli::array^ outFastD ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode stochRsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outFastK[], +/* Generated */ double outFastD[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_STOCHRSI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInFastD_MAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outFastK[], +/* Generated */ double outFastD[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + ARRAY_REF(tempRSIBuffer); + + ENUM_DECLARATION(RetCode) retCode; + int lookbackTotal, lookbackSTOCHF, tempArraySize; + VALUE_HANDLE_INT(outBegIdx1); + VALUE_HANDLE_INT(outBegIdx2); + VALUE_HANDLE_INT(outNbElement1); + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInFastK_Period. */ +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInFastD_Period. */ +/* Generated */ if( (int)optInFastD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_Period = 3; +/* Generated */ else if( ((int)optInFastD_Period < 1) || ((int)optInFastD_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastD_MAType < 0) || ((int)optInFastD_MAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_MANAGED) && !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outFastK ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( !outFastD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Stochastic RSI + * + * Reference: "Stochastic RSI and Dynamic Momentum Index" + * by Tushar Chande and Stanley Kroll + * Stock&Commodities V.11:5 (189-199) + * + * The TA-Lib version offer flexibility beyond what is explain + * in the Stock&Commodities article. + * + * To calculate the "Unsmoothed stochastic RSI" with symetry like + * explain in the article, keep the optInTimePeriod and optInFastK_Period + * equal. Example: + * + * unsmoothed stoch RSI 14 : optInTimePeriod = 14 + * optInFastK_Period = 14 + * optInFastD_Period = 'x' + * + * The outFastK is the unsmoothed RSI discuss in the article. + * + * You can set the optInFastD_Period to smooth the RSI. The smooth + * version will be found in outFastD. The outFastK will still contain + * the unsmoothed stoch RSI. If you do not care about the smoothing of + * the StochRSI, just leave optInFastD_Period to 1 and ignore outFastD. + */ + + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + + /* Adjust startIdx to account for the lookback period. */ + lookbackSTOCHF = LOOKBACK_CALL(STOCHF)( optInFastK_Period, optInFastD_Period, optInFastD_MAType ); + lookbackTotal = LOOKBACK_CALL(RSI)( optInTimePeriod ) + lookbackSTOCHF; + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + tempArraySize = (endIdx - startIdx) + 1 + lookbackSTOCHF; + + ARRAY_ALLOC( tempRSIBuffer, tempArraySize ); + + retCode = FUNCTION_CALL(RSI)(startIdx-lookbackSTOCHF, + endIdx, + inReal, + optInTimePeriod, + VALUE_HANDLE_OUT(outBegIdx1), + VALUE_HANDLE_OUT(outNbElement1), + tempRSIBuffer); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) || VALUE_HANDLE_GET(outNbElement1) == 0 ) + { + ARRAY_FREE( tempRSIBuffer ); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + retCode = FUNCTION_CALL_DOUBLE(STOCHF)(0, + tempArraySize-1, + tempRSIBuffer, + tempRSIBuffer, + tempRSIBuffer, + optInFastK_Period, + optInFastD_Period, + optInFastD_MAType, + VALUE_HANDLE_OUT(outBegIdx2), + outNBElement, + outFastK, + outFastD); + + ARRAY_FREE( tempRSIBuffer ); + + if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) || ((int)VALUE_HANDLE_DEREF(outNBElement)) == 0 ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return retCode; + } + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::StochRsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outFastK, +/* Generated */ cli::array^ outFastD ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode stochRsi( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ MAType optInFastD_MAType, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outFastK[], +/* Generated */ double outFastD[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_STOCHRSI( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int optInFastK_Period, /* From 1 to 100000 */ +/* Generated */ int optInFastD_Period, /* From 1 to 100000 */ +/* Generated */ TA_MAType optInFastD_MAType, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outFastK[], +/* Generated */ double outFastD[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF(tempRSIBuffer); +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int lookbackTotal, lookbackSTOCHF, tempArraySize; +/* Generated */ VALUE_HANDLE_INT(outBegIdx1); +/* Generated */ VALUE_HANDLE_INT(outBegIdx2); +/* Generated */ VALUE_HANDLE_INT(outNbElement1); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastK_Period = 5; +/* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInFastD_Period == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_Period = 3; +/* Generated */ else if( ((int)optInFastD_Period < 1) || ((int)optInFastD_Period > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) +/* Generated */ if( (int)optInFastD_MAType == TA_INTEGER_DEFAULT ) +/* Generated */ optInFastD_MAType = (TA_MAType)0; +/* Generated */ else if( ((int)optInFastD_MAType < 0) || ((int)optInFastD_MAType > 8) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outFastK ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !outFastD ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ lookbackSTOCHF = LOOKBACK_CALL(STOCHF)( optInFastK_Period, optInFastD_Period, optInFastD_MAType ); +/* Generated */ lookbackTotal = LOOKBACK_CALL(RSI)( optInTimePeriod ) + lookbackSTOCHF; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ tempArraySize = (endIdx - startIdx) + 1 + lookbackSTOCHF; +/* Generated */ ARRAY_ALLOC( tempRSIBuffer, tempArraySize ); +/* Generated */ retCode = FUNCTION_CALL(RSI)(startIdx-lookbackSTOCHF, +/* Generated */ endIdx, +/* Generated */ inReal, +/* Generated */ optInTimePeriod, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx1), +/* Generated */ VALUE_HANDLE_OUT(outNbElement1), +/* Generated */ tempRSIBuffer); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) || VALUE_HANDLE_GET(outNbElement1) == 0 ) +/* Generated */ { +/* Generated */ ARRAY_FREE( tempRSIBuffer ); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(STOCHF)(0, +/* Generated */ tempArraySize-1, +/* Generated */ tempRSIBuffer, +/* Generated */ tempRSIBuffer, +/* Generated */ tempRSIBuffer, +/* Generated */ optInFastK_Period, +/* Generated */ optInFastD_Period, +/* Generated */ optInFastD_MAType, +/* Generated */ VALUE_HANDLE_OUT(outBegIdx2), +/* Generated */ outNBElement, +/* Generated */ outFastK, +/* Generated */ outFastD); +/* Generated */ ARRAY_FREE( tempRSIBuffer ); +/* Generated */ if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) || ((int)VALUE_HANDLE_DEREF(outNBElement)) == 0 ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_SUB.c b/src/ta_func/ta_SUB.c new file mode 100644 index 000000000..5ae57ff25 --- /dev/null +++ b/src/ta_func/ta_SUB.c @@ -0,0 +1,250 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::SubLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int subLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_SUB_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_SUB - Vector Arithmetic Substraction + * + * Input = double, double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Sub( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal0, +/* Generated */ SubArray^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sub( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sub( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal0[], +/* Generated */ double inReal1[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_SUB( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal0[], +/* Generated */ const double inReal1[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = inReal0[i]-inReal1[i]; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sub( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal0, +/* Generated */ cli::array^ inReal1, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sub( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal0[], +/* Generated */ float inReal1[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_SUB( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal0[], +/* Generated */ const float inReal1[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal0 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( !inReal1 ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = inReal0[i]-inReal1[i]; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_SUM.c b/src/ta_func/ta_SUM.c new file mode 100644 index 000000000..1feb00efb --- /dev/null +++ b/src/ta_func/ta_SUM.c @@ -0,0 +1,333 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::SumLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int sumLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_SUM_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_SUM - Summation + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Sum( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sum( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sum( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_SUM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + double periodTotal, tempReal; + int i, outIdx, trailingIdx, lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the MA calculation using tight loops. */ + + /* Add-up the initial period, except for the last value. */ + periodTotal = 0; + trailingIdx = startIdx-lookbackTotal; + + i=trailingIdx; + if( optInTimePeriod > 1 ) + { + while( i < startIdx ) + periodTotal += inReal[i++]; + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the inReal and + * outReal to be the same buffer. + */ + outIdx = 0; + do + { + periodTotal += inReal[i++]; + tempReal = periodTotal; + periodTotal -= inReal[trailingIdx++]; + outReal[outIdx++] = tempReal; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Sum( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode sum( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_SUM( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double periodTotal, tempReal; +/* Generated */ int i, outIdx, trailingIdx, lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = (optInTimePeriod-1); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ periodTotal = 0; +/* Generated */ trailingIdx = startIdx-lookbackTotal; +/* Generated */ i=trailingIdx; +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ { +/* Generated */ while( i < startIdx ) +/* Generated */ periodTotal += inReal[i++]; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ periodTotal += inReal[i++]; +/* Generated */ tempReal = periodTotal; +/* Generated */ periodTotal -= inReal[trailingIdx++]; +/* Generated */ outReal[outIdx++] = tempReal; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_T3.c b/src/ta_func/ta_T3.c new file mode 100644 index 000000000..bf4285990 --- /dev/null +++ b/src/ta_func/ta_T3.c @@ -0,0 +1,524 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MHL Matthew Lindblom + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 120802 MF Template creation. + * 032003 MHL Implementation of T3 + * 040503 MF Adapt for compatibility with published code + * for TradeStation and Metastock. + * See "Smoothing Techniques For More Accurate Signals" + * from Tim Tillson in Stock&Commodities V16:1 Page 33-37 + * 052603 MF Adapt code to compile with .NET Managed C++ + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::T3Lookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor ) /* From 0 to 1 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int t3Lookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor ) /* From 0 to 1 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_T3_Lookback( int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor ) /* From 0 to 1 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInVFactor == TA_REAL_DEFAULT ) +/* Generated */ optInVFactor = 7.000000e-1; +/* Generated */ else if( (optInVFactor < 0.000000e+0) ||/* Generated */ (optInVFactor > 1.000000e+0) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInVFactor); + return 6 * (optInTimePeriod-1) + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_T3,T3); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_T3 - Triple Exponential Moving Average (T3) + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * optInVFactor:(From 0 to 1) + * Volume Factor + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::T3( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor, /* From 0 to 1 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::T3( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor, /* From 0 to 1 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode t3( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor, /* From 0 to 1 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_T3( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor, /* From 0 to 1 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + + int outIdx, lookbackTotal; + int today, i; + double k, one_minus_k; + double e1, e2, e3, e4, e5, e6; + double c1, c2, c3, c4; + double tempReal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInVFactor == TA_REAL_DEFAULT ) +/* Generated */ optInVFactor = 7.000000e-1; +/* Generated */ else if( (optInVFactor < 0.000000e+0) ||/* Generated */ (optInVFactor > 1.000000e+0) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* For an explanation of this function, please read: + * + * Magazine articles written by Tim Tillson + * + * Essentially, a T3 of time serie 't' is: + * EMA1(x,Period) = EMA(x,Period) + * EMA2(x,Period) = EMA(EMA1(x,Period),Period) + * GD(x,Period,vFactor) = (EMA1(x,Period)*(1+vFactor)) - (EMA2(x,Period)*vFactor) + * T3 = GD (GD ( GD(t, Period, vFactor), Period, vFactor), Period, vFactor); + * + * T3 offers a moving average with less lags then the + * traditional EMA. + * + * Do not confuse a T3 with EMA3. Both are called "Triple EMA" + * in the litterature. + * + */ + lookbackTotal = 6 * (optInTimePeriod - 1) + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_T3,T3); + if( startIdx <= lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + today = startIdx - lookbackTotal; + + k = 2.0/(optInTimePeriod+1.0); + one_minus_k = 1.0-k; + + /* Initialize e1 */ + tempReal = inReal[today++]; + for( i=optInTimePeriod-1; i > 0 ; i-- ) + tempReal += inReal[today++]; + e1 = tempReal / optInTimePeriod; + + /* Initialize e2 */ + tempReal = e1; + for( i=optInTimePeriod-1; i > 0 ; i-- ) + { + e1 = (k*inReal[today++])+(one_minus_k*e1); + tempReal += e1; + } + e2 = tempReal / optInTimePeriod; + + /* Initialize e3 */ + tempReal = e2; + for( i=optInTimePeriod-1; i > 0 ; i-- ) + { + e1 = (k*inReal[today++])+(one_minus_k*e1); + e2 = (k*e1)+(one_minus_k*e2); + tempReal += e2; + } + e3 = tempReal / optInTimePeriod; + + /* Initialize e4 */ + tempReal = e3; + for( i=optInTimePeriod-1; i > 0 ; i-- ) + { + e1 = (k*inReal[today++])+(one_minus_k*e1); + e2 = (k*e1)+(one_minus_k*e2); + e3 = (k*e2)+(one_minus_k*e3); + tempReal += e3; + } + e4 = tempReal / optInTimePeriod; + + /* Initialize e5 */ + tempReal = e4; + for( i=optInTimePeriod-1; i > 0 ; i-- ) + { + e1 = (k*inReal[today++])+(one_minus_k*e1); + e2 = (k*e1)+(one_minus_k*e2); + e3 = (k*e2)+(one_minus_k*e3); + e4 = (k*e3)+(one_minus_k*e4); + tempReal += e4; + } + e5 = tempReal / optInTimePeriod; + + /* Initialize e6 */ + tempReal = e5; + for( i=optInTimePeriod-1; i > 0 ; i-- ) + { + e1 = (k*inReal[today++])+(one_minus_k*e1); + e2 = (k*e1)+(one_minus_k*e2); + e3 = (k*e2)+(one_minus_k*e3); + e4 = (k*e3)+(one_minus_k*e4); + e5 = (k*e4)+(one_minus_k*e5); + tempReal += e5; + } + e6 = tempReal / optInTimePeriod; + + /* Skip the unstable period */ + while( today <= startIdx ) + { + /* Do the calculation but do not write the output */ + e1 = (k*inReal[today++])+(one_minus_k*e1); + e2 = (k*e1)+(one_minus_k*e2); + e3 = (k*e2)+(one_minus_k*e3); + e4 = (k*e3)+(one_minus_k*e4); + e5 = (k*e4)+(one_minus_k*e5); + e6 = (k*e5)+(one_minus_k*e6); + } + + /* Calculate the constants */ + tempReal = optInVFactor * optInVFactor; + c1 = -(tempReal * optInVFactor); + c2 = 3.0 * (tempReal - c1); + c3 = -6.0 * tempReal - 3.0 * (optInVFactor-c1); + c4 = 1.0 + 3.0 * optInVFactor - c1 + 3.0 * tempReal; + + /* Write the first output */ + outIdx = 0; + outReal[outIdx++] = c1*e6+c2*e5+c3*e4+c4*e3; + + /* Calculate and output the remaining of the range. */ + while( today <= endIdx ) + { + e1 = (k*inReal[today++])+(one_minus_k*e1); + e2 = (k*e1)+(one_minus_k*e2); + e3 = (k*e2)+(one_minus_k*e3); + e4 = (k*e3)+(one_minus_k*e4); + e5 = (k*e4)+(one_minus_k*e5); + e6 = (k*e5)+(one_minus_k*e6); + outReal[outIdx++] = c1*e6+c2*e5+c3*e4+c4*e3; + } + + /* Indicates to the caller the number of output + * successfully calculated. + */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::T3( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor, /* From 0 to 1 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode t3( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor, /* From 0 to 1 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_T3( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ double optInVFactor, /* From 0 to 1 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, lookbackTotal; +/* Generated */ int today, i; +/* Generated */ double k, one_minus_k; +/* Generated */ double e1, e2, e3, e4, e5, e6; +/* Generated */ double c1, c2, c3, c4; +/* Generated */ double tempReal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInVFactor == TA_REAL_DEFAULT ) +/* Generated */ optInVFactor = 7.000000e-1; +/* Generated */ else if( (optInVFactor < 0.000000e+0) || (optInVFactor > 1.000000e+0) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = 6 * (optInTimePeriod - 1) + TA_GLOBALS_UNSTABLE_PERIOD(TA_FUNC_UNST_T3,T3); +/* Generated */ if( startIdx <= lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ today = startIdx - lookbackTotal; +/* Generated */ k = 2.0/(optInTimePeriod+1.0); +/* Generated */ one_minus_k = 1.0-k; +/* Generated */ tempReal = inReal[today++]; +/* Generated */ for( i=optInTimePeriod-1; i > 0 ; i-- ) +/* Generated */ tempReal += inReal[today++]; +/* Generated */ e1 = tempReal / optInTimePeriod; +/* Generated */ tempReal = e1; +/* Generated */ for( i=optInTimePeriod-1; i > 0 ; i-- ) +/* Generated */ { +/* Generated */ e1 = (k*inReal[today++])+(one_minus_k*e1); +/* Generated */ tempReal += e1; +/* Generated */ } +/* Generated */ e2 = tempReal / optInTimePeriod; +/* Generated */ tempReal = e2; +/* Generated */ for( i=optInTimePeriod-1; i > 0 ; i-- ) +/* Generated */ { +/* Generated */ e1 = (k*inReal[today++])+(one_minus_k*e1); +/* Generated */ e2 = (k*e1)+(one_minus_k*e2); +/* Generated */ tempReal += e2; +/* Generated */ } +/* Generated */ e3 = tempReal / optInTimePeriod; +/* Generated */ tempReal = e3; +/* Generated */ for( i=optInTimePeriod-1; i > 0 ; i-- ) +/* Generated */ { +/* Generated */ e1 = (k*inReal[today++])+(one_minus_k*e1); +/* Generated */ e2 = (k*e1)+(one_minus_k*e2); +/* Generated */ e3 = (k*e2)+(one_minus_k*e3); +/* Generated */ tempReal += e3; +/* Generated */ } +/* Generated */ e4 = tempReal / optInTimePeriod; +/* Generated */ tempReal = e4; +/* Generated */ for( i=optInTimePeriod-1; i > 0 ; i-- ) +/* Generated */ { +/* Generated */ e1 = (k*inReal[today++])+(one_minus_k*e1); +/* Generated */ e2 = (k*e1)+(one_minus_k*e2); +/* Generated */ e3 = (k*e2)+(one_minus_k*e3); +/* Generated */ e4 = (k*e3)+(one_minus_k*e4); +/* Generated */ tempReal += e4; +/* Generated */ } +/* Generated */ e5 = tempReal / optInTimePeriod; +/* Generated */ tempReal = e5; +/* Generated */ for( i=optInTimePeriod-1; i > 0 ; i-- ) +/* Generated */ { +/* Generated */ e1 = (k*inReal[today++])+(one_minus_k*e1); +/* Generated */ e2 = (k*e1)+(one_minus_k*e2); +/* Generated */ e3 = (k*e2)+(one_minus_k*e3); +/* Generated */ e4 = (k*e3)+(one_minus_k*e4); +/* Generated */ e5 = (k*e4)+(one_minus_k*e5); +/* Generated */ tempReal += e5; +/* Generated */ } +/* Generated */ e6 = tempReal / optInTimePeriod; +/* Generated */ while( today <= startIdx ) +/* Generated */ { +/* Generated */ e1 = (k*inReal[today++])+(one_minus_k*e1); +/* Generated */ e2 = (k*e1)+(one_minus_k*e2); +/* Generated */ e3 = (k*e2)+(one_minus_k*e3); +/* Generated */ e4 = (k*e3)+(one_minus_k*e4); +/* Generated */ e5 = (k*e4)+(one_minus_k*e5); +/* Generated */ e6 = (k*e5)+(one_minus_k*e6); +/* Generated */ } +/* Generated */ tempReal = optInVFactor * optInVFactor; +/* Generated */ c1 = -(tempReal * optInVFactor); +/* Generated */ c2 = 3.0 * (tempReal - c1); +/* Generated */ c3 = -6.0 * tempReal - 3.0 * (optInVFactor-c1); +/* Generated */ c4 = 1.0 + 3.0 * optInVFactor - c1 + 3.0 * tempReal; +/* Generated */ outIdx = 0; +/* Generated */ outReal[outIdx++] = c1*e6+c2*e5+c3*e4+c4*e3; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ e1 = (k*inReal[today++])+(one_minus_k*e1); +/* Generated */ e2 = (k*e1)+(one_minus_k*e2); +/* Generated */ e3 = (k*e2)+(one_minus_k*e3); +/* Generated */ e4 = (k*e3)+(one_minus_k*e4); +/* Generated */ e5 = (k*e4)+(one_minus_k*e5); +/* Generated */ e6 = (k*e5)+(one_minus_k*e6); +/* Generated */ outReal[outIdx++] = c1*e6+c2*e5+c3*e4+c4*e3; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_TAN.c b/src/ta_func/ta_TAN.c new file mode 100644 index 000000000..dff966eaf --- /dev/null +++ b/src/ta_func/ta_TAN.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::TanLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int tanLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_TAN_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_TAN - Vector Trigonometric Tan + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Tan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Tan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode tan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_TAN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_tan(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Tan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode tan( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_TAN( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_tan(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_TANH.c b/src/ta_func/ta_TANH.c new file mode 100644 index 000000000..a1d0781d6 --- /dev/null +++ b/src/ta_func/ta_TANH.c @@ -0,0 +1,241 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090807 MF Initial Version + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::TanhLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int tanhLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_TANH_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_TANH - Vector Trigonometric Tanh + * + * Input = double + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Tanh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Tanh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode tanh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_TANH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + int i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Default return values */ + for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) + { + outReal[outIdx] = std_tanh(inReal[i]); + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Tanh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode tanh( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_TANH( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ for( i=startIdx, outIdx=0; i <= endIdx; i++, outIdx++ ) +/* Generated */ { +/* Generated */ outReal[outIdx] = std_tanh(inReal[i]); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_TEMA.c b/src/ta_func/ta_TEMA.c new file mode 100644 index 000000000..3bdec0c45 --- /dev/null +++ b/src/ta_func/ta_TEMA.c @@ -0,0 +1,481 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::TemaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int temaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_TEMA_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int retValue; + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* Get lookack for one EMA. */ + retValue = LOOKBACK_CALL(EMA)( optInTimePeriod ); + + return retValue * 3; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_TEMA - Triple Exponential Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Tema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Tema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode tema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_TEMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + ARRAY_REF(firstEMA); + ARRAY_REF(secondEMA); + double k; + + VALUE_HANDLE_INT(firstEMABegIdx); + VALUE_HANDLE_INT(firstEMANbElement); + VALUE_HANDLE_INT(secondEMABegIdx); + VALUE_HANDLE_INT(secondEMANbElement); + VALUE_HANDLE_INT(thirdEMABegIdx); + VALUE_HANDLE_INT(thirdEMANbElement); + + int tempInt, outIdx, lookbackTotal, lookbackEMA; + int firstEMAIdx, secondEMAIdx; + + ENUM_DECLARATION(RetCode) retCode; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* For an explanation of this function, please read: + * + * Stocks & Commodities V. 12:1 (11-19): + * Smoothing Data With Faster Moving Averages + * Stocks & Commodities V. 12:2 (72-80): + * Smoothing Data With Less Lag + * + * Both magazine articles written by Patrick G. Mulloy + * + * Essentially, a TEMA of time serie 't' is: + * EMA1 = EMA(t,period) + * EMA2 = EMA(EMA(t,period),period) + * EMA3 = EMA(EMA(EMA(t,period),period)) + * TEMA = 3*EMA1 - 3*EMA2 + EMA3 + * + * TEMA offers a moving average with less lags then the + * traditional EMA. + * + * Do not confuse a TEMA with EMA3. Both are called "Triple EMA" + * in the litterature. + * + * DEMA is very similar (and from the same author). + */ + + /* Will change only on success. */ + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + + /* Adjust startIdx to account for the lookback period. */ + lookbackEMA = LOOKBACK_CALL(EMA)( optInTimePeriod ); + lookbackTotal = lookbackEMA * 3; + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + + /* Allocate a temporary buffer for the firstEMA. */ + tempInt = lookbackTotal+(endIdx-startIdx)+1; + ARRAY_ALLOC(firstEMA,tempInt); + #if !defined( _JAVA ) + if( !firstEMA ) + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + #endif + + /* Calculate the first EMA */ + k = PER_TO_K(optInTimePeriod); + retCode = FUNCTION_CALL(INT_EMA)( startIdx-(lookbackEMA*2), endIdx, inReal, + optInTimePeriod, k, + VALUE_HANDLE_OUT(firstEMABegIdx), VALUE_HANDLE_OUT(firstEMANbElement), + firstEMA ); + + /* Verify for failure or if not enough data after + * calculating the first EMA. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(firstEMANbElement) == 0) ) + { + ARRAY_FREE( firstEMA ); + return retCode; + } + + /* Allocate a temporary buffer for storing the EMA2 */ + ARRAY_ALLOC(secondEMA,VALUE_HANDLE_GET(firstEMANbElement)); + #if !defined( _JAVA ) + if( !secondEMA ) + { + ARRAY_FREE( firstEMA ); + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + } + #endif + + retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, VALUE_HANDLE_GET(firstEMANbElement)-1, firstEMA, + optInTimePeriod, k, + VALUE_HANDLE_OUT(secondEMABegIdx), VALUE_HANDLE_OUT(secondEMANbElement), + secondEMA ); + + /* Return empty output on failure or if not enough data after + * calculating the second EMA. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(secondEMANbElement) == 0) ) + { + ARRAY_FREE( firstEMA ); + ARRAY_FREE( secondEMA ); + return retCode; + } + + /* Calculate the EMA3 into the caller provided output. */ + retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, VALUE_HANDLE_GET(secondEMANbElement)-1, secondEMA, + optInTimePeriod, k, + VALUE_HANDLE_OUT(thirdEMABegIdx), VALUE_HANDLE_OUT(thirdEMANbElement), + outReal ); + + /* Return empty output on failure or if not enough data after + * calculating the third EMA. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(thirdEMANbElement) == 0) ) + { + ARRAY_FREE( firstEMA ); + ARRAY_FREE( secondEMA ); + return retCode; + } + + /* Indicate where the output starts relative to + * the caller input. + */ + firstEMAIdx = VALUE_HANDLE_GET(thirdEMABegIdx) + VALUE_HANDLE_GET(secondEMABegIdx); + secondEMAIdx = VALUE_HANDLE_GET(thirdEMABegIdx); + VALUE_HANDLE_DEREF(outBegIdx) = firstEMAIdx + VALUE_HANDLE_GET(firstEMABegIdx); + + /* Do the TEMA: + * Iterate through the EMA3 (output buffer) and adjust + * the value by using the EMA2 and EMA1. + */ + outIdx = 0; + while( outIdx < VALUE_HANDLE_GET(thirdEMANbElement) ) + { + outReal[outIdx] += (3.0*firstEMA[firstEMAIdx++]) - (3.0*secondEMA[secondEMAIdx++]); + outIdx++; + } + + ARRAY_FREE( firstEMA ); + ARRAY_FREE( secondEMA ); + + /* Indicates to the caller the number of output + * successfully calculated. + */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Tema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode tema( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_TEMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ ARRAY_REF(firstEMA); +/* Generated */ ARRAY_REF(secondEMA); +/* Generated */ double k; +/* Generated */ VALUE_HANDLE_INT(firstEMABegIdx); +/* Generated */ VALUE_HANDLE_INT(firstEMANbElement); +/* Generated */ VALUE_HANDLE_INT(secondEMABegIdx); +/* Generated */ VALUE_HANDLE_INT(secondEMANbElement); +/* Generated */ VALUE_HANDLE_INT(thirdEMABegIdx); +/* Generated */ VALUE_HANDLE_INT(thirdEMANbElement); +/* Generated */ int tempInt, outIdx, lookbackTotal, lookbackEMA; +/* Generated */ int firstEMAIdx, secondEMAIdx; +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ lookbackEMA = LOOKBACK_CALL(EMA)( optInTimePeriod ); +/* Generated */ lookbackTotal = lookbackEMA * 3; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ tempInt = lookbackTotal+(endIdx-startIdx)+1; +/* Generated */ ARRAY_ALLOC(firstEMA,tempInt); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !firstEMA ) +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ #endif +/* Generated */ k = PER_TO_K(optInTimePeriod); +/* Generated */ retCode = FUNCTION_CALL(INT_EMA)( startIdx-(lookbackEMA*2), endIdx, inReal, +/* Generated */ optInTimePeriod, k, +/* Generated */ VALUE_HANDLE_OUT(firstEMABegIdx), VALUE_HANDLE_OUT(firstEMANbElement), +/* Generated */ firstEMA ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(firstEMANbElement) == 0) ) +/* Generated */ { +/* Generated */ ARRAY_FREE( firstEMA ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ ARRAY_ALLOC(secondEMA,VALUE_HANDLE_GET(firstEMANbElement)); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !secondEMA ) +/* Generated */ { +/* Generated */ ARRAY_FREE( firstEMA ); +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ } +/* Generated */ #endif +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, VALUE_HANDLE_GET(firstEMANbElement)-1, firstEMA, +/* Generated */ optInTimePeriod, k, +/* Generated */ VALUE_HANDLE_OUT(secondEMABegIdx), VALUE_HANDLE_OUT(secondEMANbElement), +/* Generated */ secondEMA ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(secondEMANbElement) == 0) ) +/* Generated */ { +/* Generated */ ARRAY_FREE( firstEMA ); +/* Generated */ ARRAY_FREE( secondEMA ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, VALUE_HANDLE_GET(secondEMANbElement)-1, secondEMA, +/* Generated */ optInTimePeriod, k, +/* Generated */ VALUE_HANDLE_OUT(thirdEMABegIdx), VALUE_HANDLE_OUT(thirdEMANbElement), +/* Generated */ outReal ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(thirdEMANbElement) == 0) ) +/* Generated */ { +/* Generated */ ARRAY_FREE( firstEMA ); +/* Generated */ ARRAY_FREE( secondEMA ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ firstEMAIdx = VALUE_HANDLE_GET(thirdEMABegIdx) + VALUE_HANDLE_GET(secondEMABegIdx); +/* Generated */ secondEMAIdx = VALUE_HANDLE_GET(thirdEMABegIdx); +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = firstEMAIdx + VALUE_HANDLE_GET(firstEMABegIdx); +/* Generated */ outIdx = 0; +/* Generated */ while( outIdx < VALUE_HANDLE_GET(thirdEMANbElement) ) +/* Generated */ { +/* Generated */ outReal[outIdx] += (3.0*firstEMA[firstEMAIdx++]) - (3.0*secondEMA[secondEMAIdx++]); +/* Generated */ outIdx++; +/* Generated */ } +/* Generated */ ARRAY_FREE( firstEMA ); +/* Generated */ ARRAY_FREE( secondEMA ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_TRANGE.c b/src/ta_func/ta_TRANGE.c new file mode 100644 index 000000000..31ac0ecf2 --- /dev/null +++ b/src/ta_func/ta_TRANGE.c @@ -0,0 +1,328 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::TrueRangeLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int trueRangeLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_TRANGE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_TRANGE - True Range + * + * Input = High, Low, Close + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::TrueRange( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TrueRange( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode trueRange( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_TRANGE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int today, outIdx; + double val2, val3, greatest; + double tempCY, tempLT, tempHT; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* True Range is the greatest of the following: + * + * val1 = distance from today's high to today's low. + * val2 = distance from yesterday's close to today's high. + * val3 = distance from yesterday's close to today's low. + * + * Some books and software makes the first TR value to be + * the (high - low) of the first bar. This function instead + * ignore the first price bar, and only output starting at the + * second price bar are valid. This is done for avoiding + * inconsistency. + */ + + /* Move up the start index if there is not + * enough initial data. + * Always one price bar gets consumed. + */ + if( startIdx < 1 ) + startIdx = 1; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + outIdx = 0; + today = startIdx; + while( today <= endIdx ) + { + + /* Find the greatest of the 3 values. */ + tempLT = inLow[today]; + tempHT = inHigh[today]; + tempCY = inClose[today-1]; + greatest = tempHT - tempLT; /* val1 */ + + val2 = std_fabs( tempCY - tempHT ); + if( val2 > greatest ) + greatest = val2; + + val3 = std_fabs( tempCY - tempLT ); + if( val3 > greatest ) + greatest = val3; + + outReal[outIdx++] = greatest; + today++; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TrueRange( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode trueRange( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_TRANGE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int today, outIdx; +/* Generated */ double val2, val3, greatest; +/* Generated */ double tempCY, tempLT, tempHT; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ if( startIdx < 1 ) +/* Generated */ startIdx = 1; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tempLT = inLow[today]; +/* Generated */ tempHT = inHigh[today]; +/* Generated */ tempCY = inClose[today-1]; +/* Generated */ greatest = tempHT - tempLT; +/* Generated */ val2 = std_fabs( tempCY - tempHT ); +/* Generated */ if( val2 > greatest ) +/* Generated */ greatest = val2; +/* Generated */ val3 = std_fabs( tempCY - tempLT ); +/* Generated */ if( val3 > greatest ) +/* Generated */ greatest = val3; +/* Generated */ outReal[outIdx++] = greatest; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_TRIMA.c b/src/ta_func/ta_TRIMA.c new file mode 100644 index 000000000..7da1b630a --- /dev/null +++ b/src/ta_func/ta_TRIMA.c @@ -0,0 +1,648 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * CR Chris (crokusek@hotmail.com) + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010503 MF Initial Coding + * 031703 MF Fix #701060. Correct logic when using a range with + * startIdx/endIdx. Thanks to Chris for reporting this. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::TrimaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int trimaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_TRIMA_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_TRIMA - Triangular Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Trima( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Trima( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode trima( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_TRIMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int lookbackTotal; + + double numerator; + double numeratorSub; + double numeratorAdd; + + int i, outIdx, todayIdx, trailingIdx, middleIdx; + double factor, tempReal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to calculate at least one output. + */ + lookbackTotal = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* TRIMA Description + * ================= + * The triangular MA is a weighted moving average. Instead of the + * TA_WMA who put more weigth on the latest price bar, the triangular + * put more weigth on the data in the middle of the specified period. + * + * Examples: + * For TimeSerie={a,b,c,d,e,f...} ('a' is the older price) + * + * 1st value for TRIMA 4-Period is: ((1*a)+(2*b)+(2*c)+(1*d)) / 6 + * 2nd value for TRIMA 4-Period is: ((1*b)+(2*c)+(2*d)+(1*e)) / 6 + * + * 1st value for TRIMA 5-Period is: ((1*a)+(2*b)+(3*c)+(2*d)+(1*e)) / 9 + * 2nd value for TRIMA 5-Period is: ((1*b)+(2*c)+(3*d)+(2*e)+(1*f)) / 9 + * + * Generally Accepted Implementation + * ================================== + * Using algebra, it can be demonstrated that the TRIMA is equivalent to + * doing a SMA of a SMA. The following explain the rules: + * + * (1) When the period is even, TRIMA(x,period)=SMA(SMA(x,period/2),(period/2)+1) + * (2) When the period is odd, TRIMA(x,period)=SMA(SMA(x,(period+1)/2),(period+1)/2) + * + * In other word: + * (1) A period of 4 becomes TRIMA(x,4) = SMA( SMA( x, 2), 3 ) + * (2) A period of 5 becomes TRIMA(x,5) = SMA( SMA( x, 3), 3 ) + * + * The SMA of a SMA is the algorithm generaly found in books. + * + * Tradestation Implementation + * =========================== + * Tradestation deviate from the generally accepted implementation by + * making the TRIMA to be as follow: + * TRIMA(x,period) = SMA( SMA( x, (int)(period/2)+1), (int)(period/2)+1 ); + * This formula is done regardless if the period is even or odd. + * + * In other word: + * (1) A period of 4 becomes TRIMA(x,4) = SMA( SMA( x, 3), 3 ) + * (2) A period of 5 becomes TRIMA(x,5) = SMA( SMA( x, 3), 3 ) + * (3) A period of 6 becomes TRIMA(x,5) = SMA( SMA( x, 4), 4 ) + * (4) A period of 7 becomes TRIMA(x,5) = SMA( SMA( x, 4), 4 ) + * + * It is not clear to me if the Tradestation approach is a bug or a deliberate + * decision to do things differently. + * + * Metastock Implementation + * ======================== + * Output is the same as the generally accepted implementation. + * + * TA-Lib Implementation + * ===================== + * Output is also the same as the generally accepted implementation. + * + * For speed optimization and avoid memory allocation, TA-Lib use + * a better algorithm than the usual SMA of a SMA. + * + * The calculation from one TRIMA value to the next is done by doing 4 + * little adjustment (the following show a TRIMA 4-period): + * + * TRIMA at time 'd': ((1*a)+(2*b)+(2*c)+(1*d)) / 6 + * TRIMA at time 'e': ((1*b)+(2*c)+(2*d)+(1*e)) / 6 + * + * To go from TRIMA 'd' to 'e', the following is done: + * 1) 'a' and 'b' are substract from the numerator. + * 2) 'd' is added to the numerator. + * 3) 'e' is added to the numerator. + * 4) Calculate TRIMA by doing numerator / 6 + * 5) Repeat sequence for next output + * + * These operations are the same steps done by TA-LIB: + * 1) is done by numeratorSub + * 2) is done by numeratorAdd. + * 3) is obtain from the latest input + * 4) Calculate and write TRIMA in the output + * 5) Repeat for next output. + * + * Of course, numerotrAdd and numeratorSub needs to be + * adjusted for each iteration. + * + * The update of numeratorSub needs values from the input at + * the trailingIdx and middleIdx position. + * + * The update of numeratorAdd needs values from the input at + * the middleIdx and todayIdx. + */ + + outIdx = 0; + + if( (optInTimePeriod % 2) == 1 ) + { + /* Logic for Odd period */ + + /* Calculate the factor which is 1 divided by the + * sumation of the weight. + * + * The sum of the weight is calculated as follow: + * + * The simple sumation serie 1+2+3... n can be + * express as n(n+1)/2 + * + * From this logic, a "triangular" sumation formula + * can be found depending if the period is odd or even. + * + * Odd Period Formula: + * period = 5 and with n=(int)(period/2) + * the formula for a "triangular" serie is: + * 1+2+3+2+1 = (n*(n+1))+n+1 + * = (n+1)*(n+1) + * = 3 * 3 = 9 + * + * Even period Formula: + * period = 6 and with n=(int)(period/2) + * the formula for a "triangular" serie is: + * 1+2+3+3+2+1 = n*(n+1) + * = 3 * 4 = 12 + */ + + /* Note: entirely done with int and becomes double only + * on assignement to the factor variable. + */ + i = (optInTimePeriod>>1); + factor = (i+1)*(i+1); + factor = 1.0/factor; + + /* Initialize all the variable before + * starting to iterate for each output. + */ + trailingIdx = startIdx-lookbackTotal; + middleIdx = trailingIdx + i; + todayIdx = middleIdx + i; + numerator = 0.0; + numeratorSub = 0.0; + for( i=middleIdx; i >= trailingIdx; i-- ) + { + tempReal = inReal[i]; + numeratorSub += tempReal; + numerator += numeratorSub; + } + numeratorAdd = 0.0; + middleIdx++; + for( i=middleIdx; i <= todayIdx; i++ ) + { + tempReal = inReal[i]; + numeratorAdd += tempReal; + numerator += numeratorAdd; + } + + /* Write the first output */ + outIdx = 0; + tempReal = inReal[trailingIdx++]; + outReal[outIdx++] = numerator * factor; + todayIdx++; + + /* Note: The value at the trailingIdx was saved + * in tempReal to account for the case where + * outReal and inReal are ptr on the same + * buffer. + */ + + /* Iterate for remaining output */ + while( todayIdx <= endIdx ) + { + /* Step (1) */ + numerator -= numeratorSub; + numeratorSub -= tempReal; + tempReal = inReal[middleIdx++]; + numeratorSub += tempReal; + + /* Step (2) */ + numerator += numeratorAdd; + numeratorAdd -= tempReal; + tempReal = inReal[todayIdx++]; + numeratorAdd += tempReal; + + /* Step (3) */ + numerator += tempReal; + + /* Step (4) */ + tempReal = inReal[trailingIdx++]; + outReal[outIdx++] = numerator * factor; + } + } + else + { + /* Even logic. + * + * Very similar to the odd logic, except: + * - calculation of the factor is different. + * - the coverage of the numeratorSub and numeratorAdd is + * slightly different. + * - Adjustment of numeratorAdd is different. See Step (2). + */ + i = (optInTimePeriod>>1); + factor = i*(i+1); + factor = 1.0/factor; + + /* Initialize all the variable before + * starting to iterate for each output. + */ + trailingIdx = startIdx-lookbackTotal; + middleIdx = trailingIdx + i - 1; + todayIdx = middleIdx + i; + numerator = 0.0; + + numeratorSub = 0.0; + + for( i=middleIdx; i >= trailingIdx; i-- ) + { + tempReal = inReal[i]; + numeratorSub += tempReal; + numerator += numeratorSub; + } + numeratorAdd = 0.0; + middleIdx++; + for( i=middleIdx; i <= todayIdx; i++ ) + { + tempReal = inReal[i]; + numeratorAdd += tempReal; + numerator += numeratorAdd; + } + + /* Write the first output */ + outIdx = 0; + tempReal = inReal[trailingIdx++]; + outReal[outIdx++] = numerator * factor; + todayIdx++; + + /* Note: The value at the trailingIdx was saved + * in tempReal to account for the case where + * outReal and inReal are ptr on the same + * buffer. + */ + + /* Iterate for remaining output */ + while( todayIdx <= endIdx ) + { + /* Step (1) */ + numerator -= numeratorSub; + numeratorSub -= tempReal; + tempReal = inReal[middleIdx++]; + numeratorSub += tempReal; + + /* Step (2) */ + numeratorAdd -= tempReal; + numerator += numeratorAdd; + tempReal = inReal[todayIdx++]; + numeratorAdd += tempReal; + + /* Step (3) */ + numerator += tempReal; + + /* Step (4) */ + tempReal = inReal[trailingIdx++]; + outReal[outIdx++] = numerator * factor; + } + + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Trima( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode trima( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_TRIMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int lookbackTotal; +/* Generated */ double numerator; +/* Generated */ double numeratorSub; +/* Generated */ double numeratorAdd; +/* Generated */ int i, outIdx, todayIdx, trailingIdx, middleIdx; +/* Generated */ double factor, tempReal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = (optInTimePeriod-1); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ if( (optInTimePeriod % 2) == 1 ) +/* Generated */ { +/* Generated */ i = (optInTimePeriod>>1); +/* Generated */ factor = (i+1)*(i+1); +/* Generated */ factor = 1.0/factor; +/* Generated */ trailingIdx = startIdx-lookbackTotal; +/* Generated */ middleIdx = trailingIdx + i; +/* Generated */ todayIdx = middleIdx + i; +/* Generated */ numerator = 0.0; +/* Generated */ numeratorSub = 0.0; +/* Generated */ for( i=middleIdx; i >= trailingIdx; i-- ) +/* Generated */ { +/* Generated */ tempReal = inReal[i]; +/* Generated */ numeratorSub += tempReal; +/* Generated */ numerator += numeratorSub; +/* Generated */ } +/* Generated */ numeratorAdd = 0.0; +/* Generated */ middleIdx++; +/* Generated */ for( i=middleIdx; i <= todayIdx; i++ ) +/* Generated */ { +/* Generated */ tempReal = inReal[i]; +/* Generated */ numeratorAdd += tempReal; +/* Generated */ numerator += numeratorAdd; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ outReal[outIdx++] = numerator * factor; +/* Generated */ todayIdx++; +/* Generated */ while( todayIdx <= endIdx ) +/* Generated */ { +/* Generated */ numerator -= numeratorSub; +/* Generated */ numeratorSub -= tempReal; +/* Generated */ tempReal = inReal[middleIdx++]; +/* Generated */ numeratorSub += tempReal; +/* Generated */ numerator += numeratorAdd; +/* Generated */ numeratorAdd -= tempReal; +/* Generated */ tempReal = inReal[todayIdx++]; +/* Generated */ numeratorAdd += tempReal; +/* Generated */ numerator += tempReal; +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ outReal[outIdx++] = numerator * factor; +/* Generated */ } +/* Generated */ } +/* Generated */ else +/* Generated */ { +/* Generated */ i = (optInTimePeriod>>1); +/* Generated */ factor = i*(i+1); +/* Generated */ factor = 1.0/factor; +/* Generated */ trailingIdx = startIdx-lookbackTotal; +/* Generated */ middleIdx = trailingIdx + i - 1; +/* Generated */ todayIdx = middleIdx + i; +/* Generated */ numerator = 0.0; +/* Generated */ numeratorSub = 0.0; +/* Generated */ for( i=middleIdx; i >= trailingIdx; i-- ) +/* Generated */ { +/* Generated */ tempReal = inReal[i]; +/* Generated */ numeratorSub += tempReal; +/* Generated */ numerator += numeratorSub; +/* Generated */ } +/* Generated */ numeratorAdd = 0.0; +/* Generated */ middleIdx++; +/* Generated */ for( i=middleIdx; i <= todayIdx; i++ ) +/* Generated */ { +/* Generated */ tempReal = inReal[i]; +/* Generated */ numeratorAdd += tempReal; +/* Generated */ numerator += numeratorAdd; +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ outReal[outIdx++] = numerator * factor; +/* Generated */ todayIdx++; +/* Generated */ while( todayIdx <= endIdx ) +/* Generated */ { +/* Generated */ numerator -= numeratorSub; +/* Generated */ numeratorSub -= tempReal; +/* Generated */ tempReal = inReal[middleIdx++]; +/* Generated */ numeratorSub += tempReal; +/* Generated */ numeratorAdd -= tempReal; +/* Generated */ numerator += numeratorAdd; +/* Generated */ tempReal = inReal[todayIdx++]; +/* Generated */ numeratorAdd += tempReal; +/* Generated */ numerator += tempReal; +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ outReal[outIdx++] = numerator * factor; +/* Generated */ } +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_TRIX.c b/src/ta_func/ta_TRIX.c new file mode 100644 index 000000000..4466a7bb2 --- /dev/null +++ b/src/ta_func/ta_TRIX.c @@ -0,0 +1,449 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AA Andrew Atkinson + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 020605 AA Fix #1117656. NULL pointer assignement. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::TrixLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int trixLookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_TRIX_Lookback( int optInTimePeriod ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int emaLookback; +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + emaLookback = LOOKBACK_CALL(EMA)( optInTimePeriod ); + return (emaLookback*3) + LOOKBACK_CALL(ROCR)( 1 ); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_TRIX - 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Trix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Trix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode trix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_TRIX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + double k; + ARRAY_REF(tempBuffer); + VALUE_HANDLE_INT(nbElement); + VALUE_HANDLE_INT(begIdx); + int totalLookback; + int emaLookback, rocLookback; + ENUM_DECLARATION(RetCode) retCode; + int nbElementToOutput; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Adjust the startIdx to account for the lookback. */ + emaLookback = LOOKBACK_CALL(EMA)( optInTimePeriod ); + rocLookback = LOOKBACK_CALL(ROCR)( 1 ); + totalLookback = (emaLookback*3) + rocLookback; + + if( startIdx < totalLookback ) + startIdx = totalLookback; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + nbElementToOutput = (endIdx-startIdx)+1+totalLookback; + + /* Allocate a temporary buffer for performing + * the calculation. + */ + ARRAY_ALLOC(tempBuffer, nbElementToOutput ); + #if !defined( _JAVA ) + if( !tempBuffer ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); + } + #endif + + /* Calculate the first EMA */ + k = PER_TO_K(optInTimePeriod); + retCode = FUNCTION_CALL(INT_EMA)( (startIdx-totalLookback), endIdx, inReal, + optInTimePeriod, k, + VALUE_HANDLE_OUT(begIdx), VALUE_HANDLE_OUT(nbElement), + tempBuffer ); + + /* Verify for failure or if not enough data after + * calculating the EMA. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(nbElement) == 0) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + ARRAY_FREE( tempBuffer ); + return retCode; + } + + nbElementToOutput--; /* Make this variable zero base from now on. */ + + /* Calculate the second EMA */ + nbElementToOutput -= emaLookback; + retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, nbElementToOutput, tempBuffer, + optInTimePeriod, k, + VALUE_HANDLE_OUT(begIdx), VALUE_HANDLE_OUT(nbElement), + tempBuffer ); + + /* Verify for failure or if not enough data after + * calculating the EMA. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(nbElement) == 0) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + ARRAY_FREE( tempBuffer ); + return retCode; + } + + /* Calculate the third EMA */ + nbElementToOutput -= emaLookback; + retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, nbElementToOutput, tempBuffer, + optInTimePeriod, k, + VALUE_HANDLE_OUT(begIdx), VALUE_HANDLE_OUT(nbElement), + tempBuffer ); + + /* Verify for failure or if not enough data after + * calculating the EMA. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(nbElement) == 0) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + ARRAY_FREE( tempBuffer ); + return retCode; + } + + /* Calculate the 1-day Rate-Of-Change */ + nbElementToOutput -= emaLookback; + retCode = FUNCTION_CALL_DOUBLE(ROC)( 0, nbElementToOutput, + tempBuffer, + 1, VALUE_HANDLE_OUT(begIdx), outNBElement, + outReal ); + + ARRAY_FREE( tempBuffer ); + /* Verify for failure or if not enough data after + * calculating the rate-of-change. + */ + if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || ((int)VALUE_HANDLE_DEREF(outNBElement) == 0) ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + return retCode; + } + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Trix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode trix( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_TRIX( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double k; +/* Generated */ ARRAY_REF(tempBuffer); +/* Generated */ VALUE_HANDLE_INT(nbElement); +/* Generated */ VALUE_HANDLE_INT(begIdx); +/* Generated */ int totalLookback; +/* Generated */ int emaLookback, rocLookback; +/* Generated */ ENUM_DECLARATION(RetCode) retCode; +/* Generated */ int nbElementToOutput; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ emaLookback = LOOKBACK_CALL(EMA)( optInTimePeriod ); +/* Generated */ rocLookback = LOOKBACK_CALL(ROCR)( 1 ); +/* Generated */ totalLookback = (emaLookback*3) + rocLookback; +/* Generated */ if( startIdx < totalLookback ) +/* Generated */ startIdx = totalLookback; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ nbElementToOutput = (endIdx-startIdx)+1+totalLookback; +/* Generated */ ARRAY_ALLOC(tempBuffer, nbElementToOutput ); +/* Generated */ #if !defined( _JAVA ) +/* Generated */ if( !tempBuffer ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ return ENUM_VALUE(RetCode,TA_ALLOC_ERR,AllocErr); +/* Generated */ } +/* Generated */ #endif +/* Generated */ k = PER_TO_K(optInTimePeriod); +/* Generated */ retCode = FUNCTION_CALL(INT_EMA)( (startIdx-totalLookback), endIdx, inReal, +/* Generated */ optInTimePeriod, k, +/* Generated */ VALUE_HANDLE_OUT(begIdx), VALUE_HANDLE_OUT(nbElement), +/* Generated */ tempBuffer ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(nbElement) == 0) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ nbElementToOutput--; +/* Generated */ nbElementToOutput -= emaLookback; +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, nbElementToOutput, tempBuffer, +/* Generated */ optInTimePeriod, k, +/* Generated */ VALUE_HANDLE_OUT(begIdx), VALUE_HANDLE_OUT(nbElement), +/* Generated */ tempBuffer ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(nbElement) == 0) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ nbElementToOutput -= emaLookback; +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(INT_EMA)( 0, nbElementToOutput, tempBuffer, +/* Generated */ optInTimePeriod, k, +/* Generated */ VALUE_HANDLE_OUT(begIdx), VALUE_HANDLE_OUT(nbElement), +/* Generated */ tempBuffer ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || (VALUE_HANDLE_GET(nbElement) == 0) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ nbElementToOutput -= emaLookback; +/* Generated */ retCode = FUNCTION_CALL_DOUBLE(ROC)( 0, nbElementToOutput, +/* Generated */ tempBuffer, +/* Generated */ 1, VALUE_HANDLE_OUT(begIdx), outNBElement, +/* Generated */ outReal ); +/* Generated */ ARRAY_FREE( tempBuffer ); +/* Generated */ if( (retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) ) || ((int)VALUE_HANDLE_DEREF(outNBElement) == 0) ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ return retCode; +/* Generated */ } +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_TSF.c b/src/ta_func/ta_TSF.c new file mode 100644 index 000000000..6015c1ccc --- /dev/null +++ b/src/ta_func/ta_TSF.c @@ -0,0 +1,354 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 090103 MF Initial coding re-using the existing TA_LinearReg + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::TsfLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int tsfLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_TSF_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_TSF - Time Series Forecast + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Tsf( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Tsf( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode tsf( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_TSF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int outIdx; + + int today, lookbackTotal; + double SumX, SumXY, SumY, SumXSqr, Divisor; + + double m, b; + int i; + + double tempValue1; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Linear Regression is a concept also known as the + * "least squares method" or "best fit." Linear + * Regression attempts to fit a straight line between + * several data points in such a way that distance + * between each data point and the line is minimized. + * + * For each point, a straight line over the specified + * previous bar period is determined in terms + * of y = b + m*x: + * + * TA_LINEARREG : Returns b+m*(period-1) + * TA_LINEARREG_SLOPE : Returns 'm' + * TA_LINEARREG_ANGLE : Returns 'm' in degree. + * TA_LINEARREG_INTERCEPT: Returns 'b' + * TA_TSF : Returns b+m*(period) + */ + + /* Adjust startIdx to account for the lookback period. */ + lookbackTotal = LOOKBACK_CALL(TSF)( optInTimePeriod ); + + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + outIdx = 0; /* Index into the output. */ + today = startIdx; + + SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; + SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; + Divisor = SumX * SumX - optInTimePeriod * SumXSqr; + + while( today <= endIdx ) + { + SumXY = 0; + SumY = 0; + for( i = optInTimePeriod; i-- != 0; ) + { + SumY += tempValue1 = inReal[today - i]; + SumXY += (double)i * tempValue1; + } + m = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; + b = ( SumY - m * SumX ) / (double)optInTimePeriod; + outReal[outIdx++] = b + m * (double)optInTimePeriod; + today++; + } + + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Tsf( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode tsf( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_TSF( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx; +/* Generated */ int today, lookbackTotal; +/* Generated */ double SumX, SumXY, SumY, SumXSqr, Divisor; +/* Generated */ double m, b; +/* Generated */ int i; +/* Generated */ double tempValue1; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = LOOKBACK_CALL(TSF)( optInTimePeriod ); +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ SumX = optInTimePeriod * ( optInTimePeriod - 1 ) * 0.5; +/* Generated */ SumXSqr = optInTimePeriod * ( optInTimePeriod - 1 ) * ( 2 * optInTimePeriod - 1 ) / 6; +/* Generated */ Divisor = SumX * SumX - optInTimePeriod * SumXSqr; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ SumXY = 0; +/* Generated */ SumY = 0; +/* Generated */ for( i = optInTimePeriod; i-- != 0; ) +/* Generated */ { +/* Generated */ SumY += tempValue1 = inReal[today - i]; +/* Generated */ SumXY += (double)i * tempValue1; +/* Generated */ } +/* Generated */ m = ( optInTimePeriod * SumXY - SumX * SumY) / Divisor; +/* Generated */ b = ( SumY - m * SumX ) / (double)optInTimePeriod; +/* Generated */ outReal[outIdx++] = b + m * (double)optInTimePeriod; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_TYPPRICE.c b/src/ta_func/ta_TYPPRICE.c new file mode 100644 index 000000000..147c4dfe5 --- /dev/null +++ b/src/ta_func/ta_TYPPRICE.c @@ -0,0 +1,271 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 112605 MF Fix outBegIdx when startIdx != 0 + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::TypPriceLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int typPriceLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_TYPPRICE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* This function have no lookback needed. */ + + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_TYPPRICE - Typical Price + * + * Input = High, Low, Close + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::TypPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TypPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode typPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_TYPPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int outIdx, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Typical price = (High + Low + Close ) / 3 */ + outIdx = 0; + + for( i= startIdx; i <= endIdx; i++ ) + { + outReal[outIdx++] = ( inHigh [i] + + inLow [i] + + inClose[i] ) / 3.0; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TypPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode typPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_TYPPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ outIdx = 0; +/* Generated */ for( i= startIdx; i <= endIdx; i++ ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = ( inHigh [i] + +/* Generated */ inLow [i] + +/* Generated */ inClose[i] ) / 3.0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_ULTOSC.c b/src/ta_func/ta_ULTOSC.c new file mode 100644 index 000000000..d2bbfdfb1 --- /dev/null +++ b/src/ta_func/ta_ULTOSC.c @@ -0,0 +1,579 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * DM Drew McCormack (http://www.trade-strategist.com) + * MF Mario Fortier + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 281206 DM Initial Implementation + * 010606 MF Abstract local arrays. Detect divide by zero. + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::UltOscLookback( int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3 ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int ultOscLookback( int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3 ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_ULTOSC_Lookback( int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3 ) /* From 1 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + int maxPeriod; +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod1. */ +/* Generated */ if( (int)optInTimePeriod1 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod1 = 7; +/* Generated */ else if( ((int)optInTimePeriod1 < 1) || ((int)optInTimePeriod1 > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInTimePeriod2. */ +/* Generated */ if( (int)optInTimePeriod2 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod2 = 14; +/* Generated */ else if( ((int)optInTimePeriod2 < 1) || ((int)optInTimePeriod2 > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ /* min/max are checked for optInTimePeriod3. */ +/* Generated */ if( (int)optInTimePeriod3 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod3 = 28; +/* Generated */ else if( ((int)optInTimePeriod3 < 1) || ((int)optInTimePeriod3 > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* Lookback for the Ultimate Oscillator is the lookback of the SMA with the longest + * time period, plus 1 for the True Range. + */ + maxPeriod = max( max(optInTimePeriod1, optInTimePeriod2), optInTimePeriod3); + return LOOKBACK_CALL(SMA)( maxPeriod ) + 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_ULTOSC - Ultimate Oscillator + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod1:(From 1 to 100000) + * Number of bars for 1st period. + * + * optInTimePeriod2:(From 1 to 100000) + * Number of bars fro 2nd period + * + * optInTimePeriod3:(From 1 to 100000) + * Number of bars for 3rd period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::UltOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::UltOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ultOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_ULTOSC( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + double a1Total, a2Total, a3Total; + double b1Total, b2Total, b3Total; + double trueLow, trueRange, closeMinusTrueLow; + double tempDouble, output, tempHT, tempLT, tempCY; + int lookbackTotal; + int longestPeriod, longestIndex; + int i,j,today,outIdx; + int trailingIdx1, trailingIdx2, trailingIdx3; + + ARRAY_INT_LOCAL(usedFlag,3); + ARRAY_INT_LOCAL(periods,3); + ARRAY_INT_LOCAL(sortedPeriods,3); + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod1. */ +/* Generated */ if( (int)optInTimePeriod1 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod1 = 7; +/* Generated */ else if( ((int)optInTimePeriod1 < 1) || ((int)optInTimePeriod1 > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInTimePeriod2. */ +/* Generated */ if( (int)optInTimePeriod2 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod2 = 14; +/* Generated */ else if( ((int)optInTimePeriod2 < 1) || ((int)optInTimePeriod2 > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ /* min/max are checked for optInTimePeriod3. */ +/* Generated */ if( (int)optInTimePeriod3 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod3 = 28; +/* Generated */ else if( ((int)optInTimePeriod3 < 1) || ((int)optInTimePeriod3 > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + + /* Ensure that the time periods are ordered from shortest to longest. + * Sort. */ + periods[0] = optInTimePeriod1; + periods[1] = optInTimePeriod2; + periods[2] = optInTimePeriod3; + usedFlag[0] = 0; + usedFlag[1] = 0; + usedFlag[2] = 0; + for ( i = 0; i < 3; ++i ) + { + longestPeriod = 0; + longestIndex = 0; + for ( j = 0; j < 3; ++j ) + { + if ( (usedFlag[j] == 0) && (periods[j] > longestPeriod) ) + { + longestPeriod = periods[j]; + longestIndex = j; + } + } + usedFlag[longestIndex] = 1; + sortedPeriods[i] = longestPeriod; + } + optInTimePeriod1 = sortedPeriods[2]; + optInTimePeriod2 = sortedPeriods[1]; + optInTimePeriod3 = sortedPeriods[0]; + + /* Adjust startIdx for lookback period. */ + lookbackTotal = LOOKBACK_CALL(ULTOSC)( optInTimePeriod1, optInTimePeriod2, optInTimePeriod3 ); + if( startIdx < lookbackTotal ) startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + + /* Prime running totals used in moving averages */ + #define CALC_TERMS(day) \ + { \ + tempLT = inLow[day]; \ + tempHT = inHigh[day]; \ + tempCY = inClose[day-1]; \ + trueLow = min( tempLT, tempCY ); \ + closeMinusTrueLow = inClose[day] - trueLow; \ + trueRange = tempHT - tempLT; \ + tempDouble = std_fabs( tempCY - tempHT ); \ + if( tempDouble > trueRange ) \ + trueRange = tempDouble; \ + tempDouble = std_fabs( tempCY - tempLT ); \ + if( tempDouble > trueRange ) \ + trueRange = tempDouble; \ + } + + #define PRIME_TOTALS(aTotal, bTotal, period) \ + { \ + aTotal = 0; \ + bTotal = 0; \ + for ( i = startIdx-period+1; i < startIdx; ++i ) \ + { \ + CALC_TERMS(i); \ + aTotal += closeMinusTrueLow; \ + bTotal += trueRange; \ + } \ + } + + PRIME_TOTALS(a1Total, b1Total, optInTimePeriod1); + PRIME_TOTALS(a2Total, b2Total, optInTimePeriod2); + PRIME_TOTALS(a3Total, b3Total, optInTimePeriod3); + + #undef PRIME_TOTALS + + /* Calculate oscillator */ + today = startIdx; + outIdx = 0; + trailingIdx1 = today - optInTimePeriod1 + 1; + trailingIdx2 = today - optInTimePeriod2 + 1; + trailingIdx3 = today - optInTimePeriod3 + 1; + while( today <= endIdx ) + { + /* Add on today's terms */ + CALC_TERMS(today); + a1Total += closeMinusTrueLow; + a2Total += closeMinusTrueLow; + a3Total += closeMinusTrueLow; + b1Total += trueRange; + b2Total += trueRange; + b3Total += trueRange; + + /* Calculate the oscillator value for today */ + output = 0.0; + + if( !TA_IS_ZERO(b1Total) ) output += 4.0*(a1Total/b1Total); + if( !TA_IS_ZERO(b2Total) ) output += 2.0*(a2Total/b2Total); + if( !TA_IS_ZERO(b3Total) ) output += a3Total/b3Total; + + /* Remove the trailing terms to prepare for next day */ + CALC_TERMS(trailingIdx1); + a1Total -= closeMinusTrueLow; + b1Total -= trueRange; + + CALC_TERMS(trailingIdx2); + a2Total -= closeMinusTrueLow; + b2Total -= trueRange; + + CALC_TERMS(trailingIdx3); + a3Total -= closeMinusTrueLow; + b3Total -= trueRange; + + /* Last operation is to write the output. Must + * be done after the trailing index have all been + * taken care of because the caller is allowed + * to have the input array to be also the output + * array. + */ + outReal[outIdx] = 100.0 * (output / 7.0); + + /* Increment indexes */ + outIdx++; + today++; + trailingIdx1++; + trailingIdx2++; + trailingIdx3++; + } + #undef CALC_TERMS + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::UltOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3, /* From 1 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode ultOsc( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3, /* From 1 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_ULTOSC( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod1, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod2, /* From 1 to 100000 */ +/* Generated */ int optInTimePeriod3, /* From 1 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double a1Total, a2Total, a3Total; +/* Generated */ double b1Total, b2Total, b3Total; +/* Generated */ double trueLow, trueRange, closeMinusTrueLow; +/* Generated */ double tempDouble, output, tempHT, tempLT, tempCY; +/* Generated */ int lookbackTotal; +/* Generated */ int longestPeriod, longestIndex; +/* Generated */ int i,j,today,outIdx; +/* Generated */ int trailingIdx1, trailingIdx2, trailingIdx3; +/* Generated */ ARRAY_INT_LOCAL(usedFlag,3); +/* Generated */ ARRAY_INT_LOCAL(periods,3); +/* Generated */ ARRAY_INT_LOCAL(sortedPeriods,3); +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod1 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod1 = 7; +/* Generated */ else if( ((int)optInTimePeriod1 < 1) || ((int)optInTimePeriod1 > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInTimePeriod2 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod2 = 14; +/* Generated */ else if( ((int)optInTimePeriod2 < 1) || ((int)optInTimePeriod2 > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( (int)optInTimePeriod3 == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod3 = 28; +/* Generated */ else if( ((int)optInTimePeriod3 < 1) || ((int)optInTimePeriod3 > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ periods[0] = optInTimePeriod1; +/* Generated */ periods[1] = optInTimePeriod2; +/* Generated */ periods[2] = optInTimePeriod3; +/* Generated */ usedFlag[0] = 0; +/* Generated */ usedFlag[1] = 0; +/* Generated */ usedFlag[2] = 0; +/* Generated */ for ( i = 0; i < 3; ++i ) +/* Generated */ { +/* Generated */ longestPeriod = 0; +/* Generated */ longestIndex = 0; +/* Generated */ for ( j = 0; j < 3; ++j ) +/* Generated */ { +/* Generated */ if ( (usedFlag[j] == 0) && (periods[j] > longestPeriod) ) +/* Generated */ { +/* Generated */ longestPeriod = periods[j]; +/* Generated */ longestIndex = j; +/* Generated */ } +/* Generated */ } +/* Generated */ usedFlag[longestIndex] = 1; +/* Generated */ sortedPeriods[i] = longestPeriod; +/* Generated */ } +/* Generated */ optInTimePeriod1 = sortedPeriods[2]; +/* Generated */ optInTimePeriod2 = sortedPeriods[1]; +/* Generated */ optInTimePeriod3 = sortedPeriods[0]; +/* Generated */ lookbackTotal = LOOKBACK_CALL(ULTOSC)( optInTimePeriod1, optInTimePeriod2, optInTimePeriod3 ); +/* Generated */ if( startIdx < lookbackTotal ) startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ #define CALC_TERMS(day) \ +/* Generated */ { \ +/* Generated */ tempLT = inLow[day]; \ +/* Generated */ tempHT = inHigh[day]; \ +/* Generated */ tempCY = inClose[day-1]; \ +/* Generated */ trueLow = min( tempLT, tempCY ); \ +/* Generated */ closeMinusTrueLow = inClose[day] - trueLow; \ +/* Generated */ trueRange = tempHT - tempLT; \ +/* Generated */ tempDouble = std_fabs( tempCY - tempHT ); \ +/* Generated */ if( tempDouble > trueRange ) \ +/* Generated */ trueRange = tempDouble; \ +/* Generated */ tempDouble = std_fabs( tempCY - tempLT ); \ +/* Generated */ if( tempDouble > trueRange ) \ +/* Generated */ trueRange = tempDouble; \ +/* Generated */ } +/* Generated */ #define PRIME_TOTALS(aTotal, bTotal, period) \ +/* Generated */ { \ +/* Generated */ aTotal = 0; \ +/* Generated */ bTotal = 0; \ +/* Generated */ for ( i = startIdx-period+1; i < startIdx; ++i ) \ +/* Generated */ { \ +/* Generated */ CALC_TERMS(i); \ +/* Generated */ aTotal += closeMinusTrueLow; \ +/* Generated */ bTotal += trueRange; \ +/* Generated */ } \ +/* Generated */ } +/* Generated */ PRIME_TOTALS(a1Total, b1Total, optInTimePeriod1); +/* Generated */ PRIME_TOTALS(a2Total, b2Total, optInTimePeriod2); +/* Generated */ PRIME_TOTALS(a3Total, b3Total, optInTimePeriod3); +/* Generated */ #undef PRIME_TOTALS +/* Generated */ today = startIdx; +/* Generated */ outIdx = 0; +/* Generated */ trailingIdx1 = today - optInTimePeriod1 + 1; +/* Generated */ trailingIdx2 = today - optInTimePeriod2 + 1; +/* Generated */ trailingIdx3 = today - optInTimePeriod3 + 1; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ CALC_TERMS(today); +/* Generated */ a1Total += closeMinusTrueLow; +/* Generated */ a2Total += closeMinusTrueLow; +/* Generated */ a3Total += closeMinusTrueLow; +/* Generated */ b1Total += trueRange; +/* Generated */ b2Total += trueRange; +/* Generated */ b3Total += trueRange; +/* Generated */ output = 0.0; +/* Generated */ if( !TA_IS_ZERO(b1Total) ) output += 4.0*(a1Total/b1Total); +/* Generated */ if( !TA_IS_ZERO(b2Total) ) output += 2.0*(a2Total/b2Total); +/* Generated */ if( !TA_IS_ZERO(b3Total) ) output += a3Total/b3Total; +/* Generated */ CALC_TERMS(trailingIdx1); +/* Generated */ a1Total -= closeMinusTrueLow; +/* Generated */ b1Total -= trueRange; +/* Generated */ CALC_TERMS(trailingIdx2); +/* Generated */ a2Total -= closeMinusTrueLow; +/* Generated */ b2Total -= trueRange; +/* Generated */ CALC_TERMS(trailingIdx3); +/* Generated */ a3Total -= closeMinusTrueLow; +/* Generated */ b3Total -= trueRange; +/* Generated */ outReal[outIdx] = 100.0 * (output / 7.0); +/* Generated */ outIdx++; +/* Generated */ today++; +/* Generated */ trailingIdx1++; +/* Generated */ trailingIdx2++; +/* Generated */ trailingIdx3++; +/* Generated */ } +/* Generated */ #undef CALC_TERMS +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_VAR.c b/src/ta_func/ta_VAR.c new file mode 100644 index 000000000..e70330c3d --- /dev/null +++ b/src/ta_func/ta_VAR.c @@ -0,0 +1,477 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * JV Jesus Viver <324122@cienz.unizar.es> + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 100502 JV Speed optimization of the algorithm + * 052603 MF Adapt code to compile with .NET Managed C++ + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::VarianceLookback( int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev ) /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int varianceLookback( int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev ) /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_VAR_Lookback( int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev ) /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ if( optInNbDev == TA_REAL_DEFAULT ) +/* Generated */ optInNbDev = 1.000000e+0; +/* Generated */ else if( (optInNbDev < -3.000000e+37) ||/* Generated */ (optInNbDev > 3.000000e+37) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + UNUSED_VARIABLE(optInNbDev); + + return optInTimePeriod-1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_VAR - Variance + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 1 to 100000) + * Number of period + * + * optInNbDev:(From TA_REAL_MIN to TA_REAL_MAX) + * Nb of deviations + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Variance( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Variance( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode variance( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_VAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ if( optInNbDev == TA_REAL_DEFAULT ) +/* Generated */ optInNbDev = 1.000000e+0; +/* Generated */ else if( (optInNbDev < -3.000000e+37) ||/* Generated */ (optInNbDev > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + return FUNCTION_CALL(INT_VAR)( startIdx, endIdx, inReal, + optInTimePeriod, /* From 1 to TA_INTEGER_MAX */ + outBegIdx, outNBElement, outReal ); +} + + +#if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) +enum class Core::RetCode Core::TA_INT_VAR( int startIdx, + int endIdx, + SubArray^ inReal, + int optInTimePeriod, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outReal ) +#elif defined( _MANAGED ) +enum class Core::RetCode Core::TA_INT_VAR( int startIdx, + int endIdx, + cli::array^ inReal, + int optInTimePeriod, + [Out]int% outBegIdx, + [Out]int% outNBElement, + cli::array^ outReal ) +#elif defined( _JAVA ) +public RetCode TA_INT_VAR( int startIdx, + int endIdx, + INPUT_TYPE inReal[], + int optInTimePeriod, /* From 1 to TA_INTEGER_MAX */ + MInteger outBegIdx, + MInteger outNBElement, + double outReal[] ) +#else +TA_RetCode TA_PREFIX(INT_VAR)( int startIdx, + int endIdx, + const INPUT_TYPE *inReal, + int optInTimePeriod, /* From 1 to TA_INTEGER_MAX */ + int *outBegIdx, + int *outNBElement, + double *outReal ) +#endif +{ + double tempReal, periodTotal1, periodTotal2, meanValue1, meanValue2; + int i, outIdx, trailingIdx, nbInitialElementNeeded; + + /* Validate the calculation method type and + * identify the minimum number of price bar needed + * to calculate at least one output. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Do the MA calculation using tight loops. */ + /* Add-up the initial periods, except for the last value. */ + periodTotal1 = 0; + periodTotal2 = 0; + trailingIdx = startIdx-nbInitialElementNeeded; + + i=trailingIdx; + if( optInTimePeriod > 1 ) + { + while( i < startIdx ) { + tempReal = inReal[i++]; + periodTotal1 += tempReal; + tempReal *= tempReal; + periodTotal2 += tempReal; + } + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the inReal and + * outReal to be the same buffer. + */ + outIdx = 0; + do + { + tempReal = inReal[i++]; + + /* Square and add all the deviation over + * the same periods. + */ + + periodTotal1 += tempReal; + tempReal *= tempReal; + periodTotal2 += tempReal; + + /* Square and add all the deviation over + * the same period. + */ + + meanValue1 = periodTotal1 / optInTimePeriod; + meanValue2 = periodTotal2 / optInTimePeriod; + + tempReal = inReal[trailingIdx++]; + periodTotal1 -= tempReal; + tempReal *= tempReal; + periodTotal2 -= tempReal; + + outReal[outIdx++] = meanValue2-meanValue1*meanValue1; + } while( i <= endIdx ); + + /* All done. Indicate the output limits and return. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Variance( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode variance( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_VAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 1 to 100000 */ +/* Generated */ double optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 5; +/* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ if( optInNbDev == TA_REAL_DEFAULT ) +/* Generated */ optInNbDev = 1.000000e+0; +/* Generated */ else if( (optInNbDev < -3.000000e+37) || (optInNbDev > 3.000000e+37) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ return FUNCTION_CALL(INT_VAR)( startIdx, endIdx, inReal, +/* Generated */ optInTimePeriod, +/* Generated */ outBegIdx, outNBElement, outReal ); +/* Generated */ } +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) +/* Generated */ enum class Core::RetCode Core::TA_INT_VAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::TA_INT_VAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode TA_INT_VAR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ INPUT_TYPE inReal[], +/* Generated */ int optInTimePeriod, +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_PREFIX(INT_VAR)( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const INPUT_TYPE *inReal, +/* Generated */ int optInTimePeriod, +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double *outReal ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double tempReal, periodTotal1, periodTotal2, meanValue1, meanValue2; +/* Generated */ int i, outIdx, trailingIdx, nbInitialElementNeeded; +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ periodTotal1 = 0; +/* Generated */ periodTotal2 = 0; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ i=trailingIdx; +/* Generated */ if( optInTimePeriod > 1 ) +/* Generated */ { +/* Generated */ while( i < startIdx ) { +/* Generated */ tempReal = inReal[i++]; +/* Generated */ periodTotal1 += tempReal; +/* Generated */ tempReal *= tempReal; +/* Generated */ periodTotal2 += tempReal; +/* Generated */ } +/* Generated */ } +/* Generated */ outIdx = 0; +/* Generated */ do +/* Generated */ { +/* Generated */ tempReal = inReal[i++]; +/* Generated */ periodTotal1 += tempReal; +/* Generated */ tempReal *= tempReal; +/* Generated */ periodTotal2 += tempReal; +/* Generated */ meanValue1 = periodTotal1 / optInTimePeriod; +/* Generated */ meanValue2 = periodTotal2 / optInTimePeriod; +/* Generated */ tempReal = inReal[trailingIdx++]; +/* Generated */ periodTotal1 -= tempReal; +/* Generated */ tempReal *= tempReal; +/* Generated */ periodTotal2 -= tempReal; +/* Generated */ outReal[outIdx++] = meanValue2-meanValue1*meanValue1; +/* Generated */ } while( i <= endIdx ); +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_WCLPRICE.c b/src/ta_func/ta_WCLPRICE.c new file mode 100644 index 000000000..77a97771d --- /dev/null +++ b/src/ta_func/ta_WCLPRICE.c @@ -0,0 +1,270 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * 112605 MF Fix outBegIdx when startIdx != 0 + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::WclPriceLookback( void ) +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int wclPriceLookback( ) +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_WCLPRICE_Lookback( void ) +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ /* No parameters to validate. */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + /* This function have no lookback needed. */ + return 0; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_WCLPRICE - Weighted Close Price + * + * Input = High, Low, Close + * Output = double + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::WclPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::WclPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode wclPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_WCLPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int outIdx, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Weighted Close Price = (High + Low + (Close*2) ) / 4 */ + + outIdx = 0; + + for( i= startIdx; i <= endIdx; i++ ) + { + outReal[outIdx++] = ( inHigh [i] + + inLow [i] + + (inClose[i]*2.0) ) / 4.0; + } + + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::WclPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode wclPrice( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_WCLPRICE( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int outIdx, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ outIdx = 0; +/* Generated */ for( i= startIdx; i <= endIdx; i++ ) +/* Generated */ { +/* Generated */ outReal[outIdx++] = ( inHigh [i] + +/* Generated */ inLow [i] + +/* Generated */ (inClose[i]*2.0) ) / 4.0; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_WILLR.c b/src/ta_func/ta_WILLR.c new file mode 100644 index 000000000..34b040f49 --- /dev/null +++ b/src/ta_func/ta_WILLR.c @@ -0,0 +1,453 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 010802 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::WillRLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int willRLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_WILLR_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + + return (optInTimePeriod-1); +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_WILLR - Williams' %R + * + * Input = High, Low, Close + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::WillR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inHigh, +/* Generated */ SubArray^ inLow, +/* Generated */ SubArray^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::WillR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode willR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inHigh[], +/* Generated */ double inLow[], +/* Generated */ double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_WILLR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inHigh[], +/* Generated */ const double inLow[], +/* Generated */ const double inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + double lowest, highest, tmp, diff; + int outIdx, nbInitialElementNeeded; + int trailingIdx, lowestIdx, highestIdx; + int today, i; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ /* Verify required price component. */ +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Initialize 'diff', just to avoid warning. */ + diff = 0.0; + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + lowestIdx = highestIdx = -1; + diff = highest = lowest = 0.0; + + while( today <= endIdx ) + { + /* Set the lowest low */ + tmp = inLow[today]; + if( lowestIdx < trailingIdx ) + { + lowestIdx = trailingIdx; + lowest = inLow[lowestIdx]; + i = lowestIdx; + while( ++i<=today ) + { + tmp = inLow[i]; + if( tmp < lowest ) + { + lowestIdx = i; + lowest = tmp; + } + } + diff = (highest - lowest)/(-100.0); + } + else if( tmp <= lowest ) + { + lowestIdx = today; + lowest = tmp; + diff = (highest - lowest)/(-100.0); + } + + /* Set the highest high */ + tmp = inHigh[today]; + if( highestIdx < trailingIdx ) + { + highestIdx = trailingIdx; + highest = inHigh[highestIdx]; + i = highestIdx; + while( ++i<=today ) + { + tmp = inHigh[i]; + if( tmp > highest ) + { + highestIdx = i; + highest = tmp; + } + } + diff = (highest - lowest)/(-100.0); + } + else if( tmp >= highest ) + { + highestIdx = today; + highest = tmp; + diff = (highest - lowest)/(-100.0); + } + + if( diff != 0.0 ) + outReal[outIdx++] = (highest-inClose[today])/diff; + else + outReal[outIdx++] = 0.0; + + trailingIdx++; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::WillR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inHigh, +/* Generated */ cli::array^ inLow, +/* Generated */ cli::array^ inClose, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode willR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inHigh[], +/* Generated */ float inLow[], +/* Generated */ float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_WILLR( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inHigh[], +/* Generated */ const float inLow[], +/* Generated */ const float inClose[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ double lowest, highest, tmp, diff; +/* Generated */ int outIdx, nbInitialElementNeeded; +/* Generated */ int trailingIdx, lowestIdx, highestIdx; +/* Generated */ int today, i; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if(!inHigh||!inLow||!inClose) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 14; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ nbInitialElementNeeded = (optInTimePeriod-1); +/* Generated */ if( startIdx < nbInitialElementNeeded ) +/* Generated */ startIdx = nbInitialElementNeeded; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ diff = 0.0; +/* Generated */ outIdx = 0; +/* Generated */ today = startIdx; +/* Generated */ trailingIdx = startIdx-nbInitialElementNeeded; +/* Generated */ lowestIdx = highestIdx = -1; +/* Generated */ diff = highest = lowest = 0.0; +/* Generated */ while( today <= endIdx ) +/* Generated */ { +/* Generated */ tmp = inLow[today]; +/* Generated */ if( lowestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ lowestIdx = trailingIdx; +/* Generated */ lowest = inLow[lowestIdx]; +/* Generated */ i = lowestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inLow[i]; +/* Generated */ if( tmp < lowest ) +/* Generated */ { +/* Generated */ lowestIdx = i; +/* Generated */ lowest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ diff = (highest - lowest)/(-100.0); +/* Generated */ } +/* Generated */ else if( tmp <= lowest ) +/* Generated */ { +/* Generated */ lowestIdx = today; +/* Generated */ lowest = tmp; +/* Generated */ diff = (highest - lowest)/(-100.0); +/* Generated */ } +/* Generated */ tmp = inHigh[today]; +/* Generated */ if( highestIdx < trailingIdx ) +/* Generated */ { +/* Generated */ highestIdx = trailingIdx; +/* Generated */ highest = inHigh[highestIdx]; +/* Generated */ i = highestIdx; +/* Generated */ while( ++i<=today ) +/* Generated */ { +/* Generated */ tmp = inHigh[i]; +/* Generated */ if( tmp > highest ) +/* Generated */ { +/* Generated */ highestIdx = i; +/* Generated */ highest = tmp; +/* Generated */ } +/* Generated */ } +/* Generated */ diff = (highest - lowest)/(-100.0); +/* Generated */ } +/* Generated */ else if( tmp >= highest ) +/* Generated */ { +/* Generated */ highestIdx = today; +/* Generated */ highest = tmp; +/* Generated */ diff = (highest - lowest)/(-100.0); +/* Generated */ } +/* Generated */ if( diff != 0.0 ) +/* Generated */ outReal[outIdx++] = (highest-inClose[today])/diff; +/* Generated */ else +/* Generated */ outReal[outIdx++] = 0.0; +/* Generated */ trailingIdx++; +/* Generated */ today++; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_WMA.c b/src/ta_func/ta_WMA.c new file mode 100644 index 000000000..e3bf4aca4 --- /dev/null +++ b/src/ta_func/ta_WMA.c @@ -0,0 +1,418 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF Template creation. + * 052603 MF Adapt code to compile with .NET Managed C++ + * + */ + +/**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +/* All code within this section is automatically + * generated by gen_code. Any modification will be lost + * next time gen_code is run. + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ #include "TA-Lib-Core.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError) +/* Generated */ namespace TicTacTec { namespace TA { namespace Library { +/* Generated */ #elif defined( _JAVA ) +/* Generated */ #include "ta_defs.h" +/* Generated */ #include "ta_java_defs.h" +/* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError) +/* Generated */ #else +/* Generated */ #include +/* Generated */ #include +/* Generated */ #include "ta_func.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_UTILITY_H +/* Generated */ #include "ta_utility.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #ifndef TA_MEMORY_H +/* Generated */ #include "ta_memory.h" +/* Generated */ #endif +/* Generated */ +/* Generated */ #define TA_PREFIX(x) TA_##x +/* Generated */ #define INPUT_TYPE double +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ int Core::WmaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public int wmaLookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #else +/* Generated */ int TA_WMA_Lookback( int optInTimePeriod ) /* From 2 to 100000 */ +/* Generated */ +/* Generated */ #endif +/**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/ +{ + /* insert local variable here */ + +/**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return -1; +/* Generated */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/ + + /* insert lookback code here. */ + return optInTimePeriod - 1; +} + +/**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +/* + * TA_WMA - Weighted Moving Average + * + * Input = double + * Output = double + * + * Optional Parameters + * ------------------- + * optInTimePeriod:(From 2 to 100000) + * Number of period + * + * + */ +/* Generated */ +/* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) +/* Generated */ enum class Core::RetCode Core::Wma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ SubArray^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Wma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode wma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_WMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const double inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/ +{ + /* Insert local variables here. */ + int inIdx, outIdx, i, trailingIdx, divider; + double periodSum, periodSub, tempReal, trailingValue; + int lookbackTotal; + +/**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ +/* Generated */ /* Validate the requested output range. */ +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif /* !defined(_JAVA)*/ +/* Generated */ /* min/max are checked for optInTimePeriod. */ +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ +/* Generated */ #endif /* !defined(_JAVA) */ +/* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */ +/* Generated */ +/**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/ + + /* Insert TA function code here. */ + lookbackTotal = optInTimePeriod-1; + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); + VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* To make the rest more efficient, handle exception + * case where the user is asking for a period of '1'. + * In that case outputs equals inputs for the requested + * range. + */ + if( optInTimePeriod == 1 ) + { + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + VALUE_HANDLE_DEREF(outNBElement) = endIdx-startIdx+1; + + #if defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) + ARRAY_MEMMOVE( outReal, 0, (inReal->mDataArray), (inReal->mOffset)+startIdx, (int)VALUE_HANDLE_DEREF(outNBElement) ); + #else + ARRAY_MEMMOVE( outReal, 0, inReal, startIdx, (int)VALUE_HANDLE_DEREF(outNBElement) ); + #endif + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); + } + + /* Calculate the divider (always an integer value). + * By induction: 1+2+3+4+'n' = n(n+1)/2 + * '>>1' is usually faster than '/2' for unsigned. + */ + divider = (optInTimePeriod*(optInTimePeriod+1))>>1; + + /* The algo used here use a very basic property of + * multiplication/addition: (x*2) = x+x + * + * As an example, a 3 period weighted can be + * interpreted in two way: + * (x1*1)+(x2*2)+(x3*3) + * OR + * x1+x2+x2+x3+x3+x3 (this is the periodSum) + * + * When you move forward in the time serie + * you can quickly adjust the periodSum for the + * period by substracting: + * x1+x2+x3 (This is the periodSub) + * Making the new periodSum equals to: + * x2+x3+x3 + * + * You can then add the new price bar + * which is x4+x4+x4 giving: + * x2+x3+x3+x4+x4+x4 + * + * At this point one iteration is completed and you can + * see that we are back to the step 1 of this example. + * + * Why making it so un-intuitive? The number of memory + * access and floating point operations are kept to a + * minimum with this algo. + */ + outIdx = 0; + trailingIdx = startIdx - lookbackTotal; + + /* Evaluate the initial periodSum/periodSub and trailingValue. */ + periodSum = periodSub = (double)0.0; + inIdx=trailingIdx; + i = 1; + while( inIdx < startIdx ) + { + tempReal = inReal[inIdx++]; + periodSub += tempReal; + periodSum += tempReal*i; + i++; + } + trailingValue = 0.0; + + /* Tight loop for the requested range. */ + while( inIdx <= endIdx ) + { + /* Add the current price bar to the sum + * who are carried through the iterations. + */ + tempReal = inReal[inIdx++]; + periodSub += tempReal; + periodSub -= trailingValue; + periodSum += tempReal*optInTimePeriod; + + /* Save the trailing value for being substract at + * the next iteration. + * (must be saved here just in case outReal and + * inReal are the same buffer). + */ + trailingValue = inReal[trailingIdx++]; + + /* Calculate the WMA for this price bar. */ + outReal[outIdx++] = periodSum / divider; + + /* Prepare the periodSum for the next iteration. */ + periodSum -= periodSub; + } + + /* Set output limits. */ + VALUE_HANDLE_DEREF(outNBElement) = outIdx; + VALUE_HANDLE_DEREF(outBegIdx) = startIdx; + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ +/* Generated */ +/* Generated */ #define USE_SINGLE_PRECISION_INPUT +/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA ) +/* Generated */ #undef TA_PREFIX +/* Generated */ #define TA_PREFIX(x) TA_S_##x +/* Generated */ #endif +/* Generated */ #undef INPUT_TYPE +/* Generated */ #define INPUT_TYPE float +/* Generated */ #if defined( _MANAGED ) +/* Generated */ enum class Core::RetCode Core::Wma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ cli::array^ inReal, +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ [Out]int% outBegIdx, +/* Generated */ [Out]int% outNBElement, +/* Generated */ cli::array^ outReal ) +/* Generated */ #elif defined( _JAVA ) +/* Generated */ public RetCode wma( int startIdx, +/* Generated */ int endIdx, +/* Generated */ float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ MInteger outBegIdx, +/* Generated */ MInteger outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #else +/* Generated */ TA_RetCode TA_S_WMA( int startIdx, +/* Generated */ int endIdx, +/* Generated */ const float inReal[], +/* Generated */ int optInTimePeriod, /* From 2 to 100000 */ +/* Generated */ int *outBegIdx, +/* Generated */ int *outNBElement, +/* Generated */ double outReal[] ) +/* Generated */ #endif +/* Generated */ { +/* Generated */ int inIdx, outIdx, i, trailingIdx, divider; +/* Generated */ double periodSum, periodSub, tempReal, trailingValue; +/* Generated */ int lookbackTotal; +/* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK +/* Generated */ if( startIdx < 0 ) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); +/* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) +/* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) +/* Generated */ optInTimePeriod = 30; +/* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #if !defined(_JAVA) +/* Generated */ if( !outReal ) +/* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); +/* Generated */ #endif +/* Generated */ #endif +/* Generated */ lookbackTotal = optInTimePeriod-1; +/* Generated */ if( startIdx < lookbackTotal ) +/* Generated */ startIdx = lookbackTotal; +/* Generated */ if( startIdx > endIdx ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); +/* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNBElement); +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ if( optInTimePeriod == 1 ) +/* Generated */ { +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = endIdx-startIdx+1; +/* Generated */ #if defined( USE_SUBARRAY ) && !defined( USE_SINGLE_PRECISION_INPUT ) +/* Generated */ ARRAY_MEMMOVE( outReal, 0, (inReal->mDataArray), (inReal->mOffset)+startIdx, (int)VALUE_HANDLE_DEREF(outNBElement) ); +/* Generated */ #else +/* Generated */ ARRAY_MEMMOVE( outReal, 0, inReal, startIdx, (int)VALUE_HANDLE_DEREF(outNBElement) ); +/* Generated */ #endif +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ divider = (optInTimePeriod*(optInTimePeriod+1))>>1; +/* Generated */ outIdx = 0; +/* Generated */ trailingIdx = startIdx - lookbackTotal; +/* Generated */ periodSum = periodSub = (double)0.0; +/* Generated */ inIdx=trailingIdx; +/* Generated */ i = 1; +/* Generated */ while( inIdx < startIdx ) +/* Generated */ { +/* Generated */ tempReal = inReal[inIdx++]; +/* Generated */ periodSub += tempReal; +/* Generated */ periodSum += tempReal*i; +/* Generated */ i++; +/* Generated */ } +/* Generated */ trailingValue = 0.0; +/* Generated */ while( inIdx <= endIdx ) +/* Generated */ { +/* Generated */ tempReal = inReal[inIdx++]; +/* Generated */ periodSub += tempReal; +/* Generated */ periodSub -= trailingValue; +/* Generated */ periodSum += tempReal*optInTimePeriod; +/* Generated */ trailingValue = inReal[trailingIdx++]; +/* Generated */ outReal[outIdx++] = periodSum / divider; +/* Generated */ periodSum -= periodSub; +/* Generated */ } +/* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; +/* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; +/* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +/* Generated */ } +/* Generated */ +/* Generated */ #if defined( _MANAGED ) +/* Generated */ }}} // Close namespace TicTacTec.TA.Lib +/* Generated */ #endif +/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/ + diff --git a/src/ta_func/ta_utility.c b/src/ta_func/ta_utility.c new file mode 100644 index 000000000..aea018783 --- /dev/null +++ b/src/ta_func/ta_utility.c @@ -0,0 +1,134 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * RM Robert Meier (talib@meierlim.com http://www.meierlim.com) + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 052603 MF Adapt code to compile with .NET Managed C++ + * 123004 RM,MF Adapt code to work with Visual Studio 2005 + * + */ + +#if defined( _MANAGED ) + #using + #include "TA-Lib-Core.h" + #include "ta_memory.h" +namespace TicTacTec { namespace TA { namespace Library { +#else + #include "ta_utility.h" + #include "ta_func.h" + #include "ta_memory.h" +#endif + +#if defined( _MANAGED ) + enum class Core::RetCode Core::SetUnstablePeriod( enum class FuncUnstId id, + unsigned int unstablePeriod ) +#else +TA_RetCode TA_SetUnstablePeriod( TA_FuncUnstId id, + unsigned int unstablePeriod ) +#endif +{ + int i; + + if( id > ENUM_VALUE(FuncUnstId,TA_FUNC_UNST_ALL,FuncUnstAll) ) + return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); + + if( id == ENUM_VALUE(FuncUnstId,TA_FUNC_UNST_ALL,FuncUnstAll) ) + { + for( i=0; i < (int)ENUM_VALUE(FuncUnstId,TA_FUNC_UNST_ALL,FuncUnstAll); i++ ) + { + #if defined( _MANAGED ) + Globals->unstablePeriod[(int)i] = unstablePeriod; + #else + TA_Globals->unstablePeriod[i] = unstablePeriod; + #endif + } + } + else + { + #if defined( _MANAGED ) + Globals->unstablePeriod[(int)id] = unstablePeriod; + #else + TA_Globals->unstablePeriod[id] = unstablePeriod; + #endif + } + + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +#if defined( _MANAGED ) +unsigned int Core::GetUnstablePeriod( enum class FuncUnstId id ) +#else +unsigned int TA_GetUnstablePeriod( TA_FuncUnstId id ) +#endif +{ + if( id >= ENUM_VALUE(FuncUnstId,TA_FUNC_UNST_ALL,FuncUnstAll) ) + return 0; + + #if defined( _MANAGED ) + return Globals->unstablePeriod[(int)id]; + #else + return TA_Globals->unstablePeriod[id]; + #endif +} + +#if defined( _MANAGED ) + enum class Core::RetCode Core::SetCompatibility( enum class Compatibility value ) +#else +TA_RetCode TA_SetCompatibility( TA_Compatibility value ) +#endif +{ + TA_GLOBALS_COMPATIBILITY = value; + return ENUM_VALUE(RetCode,TA_SUCCESS,Success); +} + +#if defined( _MANAGED ) + enum class Core::Compatibility Core::GetCompatibility( void ) +#else +TA_Compatibility TA_GetCompatibility( void ) +#endif +{ + return TA_GLOBALS_COMPATIBILITY; +} + +#if defined( _MANAGED ) +}}} // Close namespace TicTacTec::TA::Lib +#endif diff --git a/src/ta_func/ta_utility.h b/src/ta_func/ta_utility.h new file mode 100644 index 000000000..70fff4b40 --- /dev/null +++ b/src/ta_func/ta_utility.h @@ -0,0 +1,365 @@ +/* Provides common mathematical or analysis functions. + * + * These functions are all PRIVATE to ta-lib and should + * never be called directly by the user of the TA-LIB. + */ + +#ifndef TA_UTILITY_H +#define TA_UTILITY_H + +#if !defined( _MANAGED ) && !defined( _JAVA ) + #ifndef TA_FUNC_H + #include "ta_func.h" + #endif + + #ifndef TA_GLOBAL_H + #include "ta_global.h" + #endif +#endif + +#if defined( _MANAGED ) + #ifndef NULL + #define NULL 0 + #endif +#endif + +/* Calculate a Simple Moving Average. + * This is an internal version, parameter are assumed validated. + * (startIdx and endIdx cannot be -1). + */ +#if !defined( _MANAGED ) && !defined( _JAVA ) +TA_RetCode TA_INT_SMA( int startIdx, + int endIdx, + const double *inReal, + int optInTimePeriod, + int *outBegIdx, + int *outNBElement, + double *outReal ); + +TA_RetCode TA_S_INT_SMA( int startIdx, + int endIdx, + const float *inReal, + int optInTimePeriod, + int *outBegIdx, + int *outNBElement, + double *outReal ); +#endif + +/* Calculate an Exponential Moving Average. + * This is an internal version, parameter are assumed validated. + * (startIdx and endIdx cannot be -1). + */ +#if !defined( _MANAGED ) && !defined( _JAVA ) +TA_RetCode TA_INT_EMA( int startIdx, + int endIdx, + const double *inReal, + int optInTimePeriod, + double optInK_1, + int *outBegIdx, + int *outNBElement, + double *outReal ); + +TA_RetCode TA_S_INT_EMA( int startIdx, + int endIdx, + const float *inReal, + int optInTimePeriod, + double optInK_1, + int *outBegIdx, + int *outNBElement, + double *outReal ); +#endif + +/* Calculate a MACD + * This is an internal version, parameter are assumed validated. + * (startIdx and endIdx cannot be -1). + */ +#if !defined( _MANAGED ) && !defined( _JAVA ) +TA_RetCode TA_INT_MACD( int startIdx, + int endIdx, + const double inReal[], + int optInFastPeriod, /* 0 is fix 12 */ + int optInSlowPeriod, /* 0 is fix 26 */ + int optInSignalPeriod_2, + int *outBegIdx, + int *outNBElement, + double outRealMACD_0[], + double outRealMACDSignal_1[], + double outRealMACDHist_2[] ); + +TA_RetCode TA_S_INT_MACD( int startIdx, + int endIdx, + const float inReal[], + int optInFastPeriod, /* 0 is fix 12 */ + int optInSlowPeriod, /* 0 is fix 26 */ + int optInSignalPeriod_2, + int *outBegIdx, + int *outNBElement, + double outRealMACD_0[], + double outRealMACDSignal_1[], + double outRealMACDHist_2[] ); +#endif + +/* Internal Price Oscillator function. + * + * A buffer must be provided for intermediate processing + * 'tempBuffer' must be of at least (endIdx-startIdx+1) + */ +#if !defined( _MANAGED ) && !defined( _JAVA ) +TA_RetCode TA_INT_PO( int startIdx, + int endIdx, + const double *inReal, + int optInFastPeriod, + int optInSlowPeriod, + TA_MAType optInMethod_2, + int *outBegIdx, + int *outNBElement, + double *outReal, + double *tempBuffer, + int doPercentageOutput ); + +TA_RetCode TA_S_INT_PO( int startIdx, + int endIdx, + const float *inReal, + int optInFastPeriod, + int optInSlowPeriod, + TA_MAType optInMethod_2, + int *outBegIdx, + int *outNBElement, + double *outReal, + double *tempBuffer, + int doPercentageOutput ); +#endif + +/* Internal variance function. */ +#if !defined( _MANAGED ) && !defined( _JAVA ) +TA_RetCode TA_INT_VAR( int startIdx, + int endIdx, + const double *inReal, + int optInTimePeriod, + int *outBegIdx, + int *outNBElement, + double *outReal ); + +TA_RetCode TA_S_INT_VAR( int startIdx, + int endIdx, + const float *inReal, + int optInTimePeriod, + int *outBegIdx, + int *outNBElement, + double *outReal ); +#endif + +/* A function to calculate a standard deviation. + * + * This function allows speed optimization when the + * moving average series is already calculated. + */ +#if !defined( _MANAGED ) && !defined( _JAVA ) +void TA_INT_stddev_using_precalc_ma( const double *inReal, + const double *inMovAvg, + int inMovAvgBegIdx, + int inMovAvgNbElement, + int timePeriod, + double *output ); + +void TA_S_INT_stddev_using_precalc_ma( const float *inReal, + const double *inMovAvg, + int inMovAvgBegIdx, + int inMovAvgNbElement, + int timePeriod, + double *output ); +#endif + + /* Provides an equivalent to standard "math.h" functions. */ +#if defined( _MANAGED ) + #define std_floor Math::Floor + #define std_ceil Math::Ceiling + #define std_fabs Math::Abs + #define std_atan Math::Atan + #define std_cos Math::Cos + #define std_sin Math::Sin + #define std_sqrt Math::Sqrt + #define std_tanh Math::Tanh + #define std_tan Math::Tan + #define std_sinh Math::Sinh + #define std_log10 Math::Log10 + #define std_log Math::Log + #define std_exp Math::Exp + #define std_cosh Math::Cosh + #define std_asin Math::Asin + #define std_acos Math::Acos +#elif defined( _JAVA ) + #define std_floor Math.floor + #define std_ceil Math.ceil + #define std_fabs Math.abs + #define std_atan Math.atan + #define std_cos Math.cos + #define std_sin Math.sin + #define std_sqrt Math.sqrt + #define std_tanh Math.tanh + #define std_tan Math.tan + #define std_sinh Math.sinh + #define std_log10 Math.log10 + #define std_log Math.log + #define std_exp Math.exp + #define std_cosh Math.cosh + #define std_asin Math.asin + #define std_acos Math.acos +#else + #define std_floor floor + #define std_ceil ceil + #define std_fabs fabs + #define std_atan atan + #define std_cos cos + #define std_sin sin + #define std_sqrt sqrt + #define std_tanh tanh + #define std_tan tan + #define std_sinh sinh + #define std_log10 log10 + #define std_log log + #define std_exp exp + #define std_cosh cosh + #define std_asin asin + #define std_acos acos +#endif + +/* Rounding macro for doubles. Works only with positive numbers. */ +#define round_pos(x) (std_floor((x)+0.5)) + +/* Rounding macro for doubles. Works only with negative numbers. */ +#define round_neg(x) (std_ceil((x)-0.5)) + +/* Rounding with a precision of 2 digit after the dot */ +#define round_pos_2(x) ((std_floor((x*100.0)+0.5))/100.0) +#define round_neg_2(x) ((std_ceil((x*100.0)-0.5))/100.0) + +/* In the context of TA-Lib, floating point are often + * compared within an acceptable error range. + * + * As an example,a TA oscillator ranging from 0 to 100 can + * fairly be considered equal if their difference is less + * than 0.000001. + * + * Ranging around zero also allows to work around limit + * cases where floating point minimal step (EPSILON) causes + * unexpected cummulative effect (ending with "negative zero" + * being one example). + * + * FLT_EPSILON == 1.192092896e-07 for float type on intel with msvc. + * DBL_EPSILON == 2.2204460492503131e-016 for the double type. + * + * Warning: These macro are not intended as "general purpose" floating + * point comparison. TA_REAL_EQ is not even transitive. The "ep" parameter + * must be carefully choosen to work in the domain of the tested values. + * Do a search on Google for a more generalize algo. + */ +#define TA_REAL_EQ(x,v,ep) (((v-ep) (b)) ? (a) : (b)) +#endif + +/* Candlestick macros (used by candlestick functions, where the parameters are always called inClose, inOpen, etc. + * Don't use i++ or func(i) with these macros ! + */ + +#define TA_REALBODY(IDX) ( std_fabs( inClose[IDX] - inOpen[IDX] ) ) +#define TA_UPPERSHADOW(IDX) ( inHigh[IDX] - ( inClose[IDX] >= inOpen[IDX] ? inClose[IDX] : inOpen[IDX] ) ) +#define TA_LOWERSHADOW(IDX) ( ( inClose[IDX] >= inOpen[IDX] ? inOpen[IDX] : inClose[IDX] ) - inLow[IDX] ) +#define TA_HIGHLOWRANGE(IDX) ( inHigh[IDX] - inLow[IDX] ) +#define TA_CANDLECOLOR(IDX) ( inClose[IDX] >= inOpen[IDX] ? 1 : -1 ) + +#if defined( _MANAGED ) + #define TA_CANDLERANGETYPE(SET) (Globals->candleSettings[(int)CandleSettingType::SET]->rangeType) + #define TA_CANDLEAVGPERIOD(SET) (Globals->candleSettings[(int)CandleSettingType::SET]->avgPeriod) + #define TA_CANDLEFACTOR(SET) (Globals->candleSettings[(int)CandleSettingType::SET]->factor) +#elif defined( _JAVA ) + #define TA_CANDLERANGETYPE(SET) (this.candleSettings[CandleSettingType.SET.ordinal()].rangeType) + #define TA_CANDLEAVGPERIOD(SET) (this.candleSettings[CandleSettingType.SET.ordinal()].avgPeriod) + #define TA_CANDLEFACTOR(SET) (this.candleSettings[CandleSettingType.SET.ordinal()].factor) +#else + #define TA_CANDLERANGETYPE(SET) (TA_Globals->candleSettings[TA_##SET].rangeType) + #define TA_CANDLEAVGPERIOD(SET) (TA_Globals->candleSettings[TA_##SET].avgPeriod) + #define TA_CANDLEFACTOR(SET) (TA_Globals->candleSettings[TA_##SET].factor) +#endif + +#define TA_CANDLERANGE(SET,IDX) \ + ( TA_CANDLERANGETYPE(SET) == ENUM_VALUE(RangeType,TA_RangeType_RealBody,RealBody) ? TA_REALBODY(IDX) : \ + ( TA_CANDLERANGETYPE(SET) == ENUM_VALUE(RangeType,TA_RangeType_HighLow,HighLow) ? TA_HIGHLOWRANGE(IDX) : \ + ( TA_CANDLERANGETYPE(SET) == ENUM_VALUE(RangeType,TA_RangeType_Shadows,Shadows) ? TA_UPPERSHADOW(IDX) + TA_LOWERSHADOW(IDX) : \ + 0 ) ) ) +#define TA_CANDLEAVERAGE(SET,SUM,IDX) \ + ( TA_CANDLEFACTOR(SET) \ + * ( TA_CANDLEAVGPERIOD(SET) != 0.0? SUM / TA_CANDLEAVGPERIOD(SET) : TA_CANDLERANGE(SET,IDX) ) \ + / ( TA_CANDLERANGETYPE(SET) == ENUM_VALUE(RangeType,TA_RangeType_Shadows,Shadows) ? 2.0 : 1.0 ) \ + ) +#define TA_REALBODYGAPUP(IDX2,IDX1) ( min(inOpen[IDX2],inClose[IDX2]) > max(inOpen[IDX1],inClose[IDX1]) ) +#define TA_REALBODYGAPDOWN(IDX2,IDX1) ( max(inOpen[IDX2],inClose[IDX2]) < min(inOpen[IDX1],inClose[IDX1]) ) +#define TA_CANDLEGAPUP(IDX2,IDX1) ( inLow[IDX2] > inHigh[IDX1] ) +#define TA_CANDLEGAPDOWN(IDX2,IDX1) ( inHigh[IDX2] < inLow[IDX1] ) + +#ifdef TA_LIB_PRO +/* Section for code distributed with TA-Lib Pro only. */ +#endif + +#endif diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am new file mode 100644 index 000000000..e3bfc9182 --- /dev/null +++ b/src/tools/Makefile.am @@ -0,0 +1,2 @@ +AUTOMAKE_OPTIONS = foreign 1.4 +SUBDIRS = gen_code ta_regtest diff --git a/src/tools/Makefile.in b/src/tools/Makefile.in new file mode 100644 index 000000000..223b50d88 --- /dev/null +++ b/src/tools/Makefile.in @@ -0,0 +1,482 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/tools +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/ta_config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TALIB_LIBRARY_VERSION = @TALIB_LIBRARY_VERSION@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign 1.4 +SUBDIRS = gen_code ta_regtest +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/tools/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/tools/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/tools/gen_code/Makefile.am b/src/tools/gen_code/Makefile.am new file mode 100644 index 000000000..cb839c231 --- /dev/null +++ b/src/tools/gen_code/Makefile.am @@ -0,0 +1,14 @@ + +# ta_regrest is used for testing and should +# not be installed. +noinst_PROGRAMS = gen_code + +gen_code_SOURCES = gen_code.c + +gen_code_CPPFLAGS = -I../../ta_common +gen_code_LDFLAGS = -L../../ta_common -L../../ta_abstract -L../../ta_func +gen_code_LDADD = -lta_common -lta_abstract_gc -lta_func -lm + +all-local: + $(MAKE) $(AM_MAKEFLAGS) gen_code + cp gen_code ../../../bin diff --git a/src/tools/gen_code/Makefile.in b/src/tools/gen_code/Makefile.in new file mode 100644 index 000000000..2265500ab --- /dev/null +++ b/src/tools/gen_code/Makefile.in @@ -0,0 +1,456 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = gen_code$(EXEEXT) +subdir = src/tools/gen_code +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/ta_config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_gen_code_OBJECTS = gen_code-gen_code.$(OBJEXT) +gen_code_OBJECTS = $(am_gen_code_OBJECTS) +gen_code_DEPENDENCIES = +gen_code_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(gen_code_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir)/include@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(gen_code_SOURCES) +DIST_SOURCES = $(gen_code_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TALIB_LIBRARY_VERSION = @TALIB_LIBRARY_VERSION@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +gen_code_SOURCES = gen_code.c +gen_code_CPPFLAGS = -I../../ta_common +gen_code_LDFLAGS = -L../../ta_common -L../../ta_abstract -L../../ta_func +gen_code_LDADD = -lta_common -lta_abstract_gc -lta_func -lm +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tools/gen_code/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/tools/gen_code/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +gen_code$(EXEEXT): $(gen_code_OBJECTS) $(gen_code_DEPENDENCIES) + @rm -f gen_code$(EXEEXT) + $(gen_code_LINK) $(gen_code_OBJECTS) $(gen_code_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_code-gen_code.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +gen_code-gen_code.o: gen_code.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gen_code_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gen_code-gen_code.o -MD -MP -MF $(DEPDIR)/gen_code-gen_code.Tpo -c -o gen_code-gen_code.o `test -f 'gen_code.c' || echo '$(srcdir)/'`gen_code.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gen_code-gen_code.Tpo $(DEPDIR)/gen_code-gen_code.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gen_code.c' object='gen_code-gen_code.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gen_code_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gen_code-gen_code.o `test -f 'gen_code.c' || echo '$(srcdir)/'`gen_code.c + +gen_code-gen_code.obj: gen_code.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gen_code_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gen_code-gen_code.obj -MD -MP -MF $(DEPDIR)/gen_code-gen_code.Tpo -c -o gen_code-gen_code.obj `if test -f 'gen_code.c'; then $(CYGPATH_W) 'gen_code.c'; else $(CYGPATH_W) '$(srcdir)/gen_code.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gen_code-gen_code.Tpo $(DEPDIR)/gen_code-gen_code.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gen_code.c' object='gen_code-gen_code.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gen_code_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gen_code-gen_code.obj `if test -f 'gen_code.c'; then $(CYGPATH_W) 'gen_code.c'; else $(CYGPATH_W) '$(srcdir)/gen_code.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +all-local: + $(MAKE) $(AM_MAKEFLAGS) gen_code + cp gen_code ../../../bin +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/tools/gen_code/gen_code.c b/src/tools/gen_code/gen_code.c new file mode 100644 index 000000000..9a8792394 --- /dev/null +++ b/src/tools/gen_code/gen_code.c @@ -0,0 +1,4648 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier (mfortier@ta-lib.org) + * ST Steve Thames (steve@softlife.com) + * AC Angelo Ciceri + * RM Robert Meier (talib@meierlim.com) + * CM Craig Miller (c-miller@users.sourceforge.net) + * RG Richard Gomes + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * 052403 MF Many modifications related to generate code that works + * with the windows .NET Managed C++ compiler. + * 092103 MF Now touch files only when there is really a change. + * 101303 MF Remove underscore from names. + * 020804 MF,ST Fixes to make it work on Linux (Bug#873879). + * 022904 MF Add TA_GetLookback + * 030604 MF Add generation of "ta_func.swg" + * 082004 AC Add generation of candlestick functions declaration + * 010405 RM Change createProjTemplate to work with VS03 and VS05 + * 031805 MF Add generation of MSVC project file. + * 061805 MF Changes related to .NET verifiable code. + * 062505 MF Fix 'out' attribute for .NET verifiable code. + * 121705 MF Complete Java port. + * 012806 MF Add call to Java post-processing. + * 093006 MF Add code generation for TA_FunctionDescription + * 110206 AC Change volume and open interest to double + * 120106 MF Add generation of java_defs.h + * 122406 MF Add generation of Makefile.am + * 011707 CM Add ta_pragma.h handles VC8 warnings, type conversion of strlen handles VC warning + * 021807 MF Add generation of VS2005 project file + * 040107 MF,RG Add generation of CoreAnnotated.java + */ + +/* Description: + * Generates a lot of source code. Run "gen_code ?" for + * the list of file. + * + * The generator use as input the interface definition + * of each of the TA functions. The interface is provided + * from static data in the TA-Abstract module. + * (See the 'table_x.c' files) + * + * This utility is intended only to people integrating new + * TA functions in TA-Lib. + * + * Note: All directory in this code is relative to the 'bin' + * directory. You must run "gen_code" from ta-lib/c/bin. + * + */ +#include "ta_pragma.h" /* this must be the first inclusion */ +#include +#include +#include +#include +#include +#include + +#if !defined(__WIN32__) && !defined(__MSDOS__) && !defined(WIN32) + #include +#endif + +#if defined (WIN32) + #include +#endif + +#include "ta_common.h" +#include "ta_abstract.h" +#include "ta_memory.h" + +extern int mcpp_main( int argc, char ** argv); + +#define BUFFER_SIZE 16000 + +#define FILE_WRITE 0 +#define WRITE_ON_CHANGE_ONLY 0 + +#define FILE_READ 0x00000001 +#define WRITE_ALWAYS 0x00000002 + +#ifndef min + #define min(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef max + #define max(a, b) (((a) > (b)) ? (a) : (b)) +#endif + +typedef struct +{ + FILE *file; + FILE *fileTarget; + FILE *templateFile; + char f1_name[BUFFER_SIZE]; + char f2_name[BUFFER_SIZE]; + + int flags; +} FileHandle; + +FileHandle *gOutFunc_H; /* For "ta_func.h" */ +FileHandle *gOutFrame_H; /* For "ta_frame.h" */ +FileHandle *gOutFrame_C; /* For "ta_frame.c" */ +FileHandle *gOutGroupIdx_C; /* For "ta_group_idx.c" */ +FileHandle *gOutFunc_C; /* For "ta_x.c" where 'x' is TA function name. */ +FileHandle *gOutRetCode_C; /* For "ta_retcode.c" */ +FileHandle *gOutRetCode_CSV; /* For "ta_retcode.csv" */ +FileHandle *gOutFuncList_TXT; /* For "ta_func_list.txt" */ +FileHandle *gOutDefs_H; /* For "ta_defs.h" */ +FileHandle *gOutFunc_SWG; /* For SWIG */ +FileHandle *gOutFunc_XML; /* For "ta_func_api.xml" */ +FileHandle *gOutFuncAPI_C; /* For "ta_func_api.c" */ +FileHandle *gOutMakefile_AM; /* For "Makefile.am" */ + +#ifdef _MSC_VER +/* The following files are generated only on Windows platform. */ +FileHandle *gOutDotNet_H; /* For .NET interface file */ +FileHandle *gOutCore_Java; /* For Core.Java */ +FileHandle *gOutProjFile; /* For .NET project file */ +FileHandle *gOutMSVCProjFile; /* For MSVC project file */ +FileHandle *gOutVS2005ProjFile; /* For VS2005 project file */ +FileHandle *gOutExcelGlue_C; /* For "excel_glue.c" */ +FileHandle *gOutJavaDefs_H; /* For "java_defs.h" */ +FileHandle *gOutFunc_Annotation; /* For "CoreAnnotated.java" */ + +/* Why these file are not generated from a unix platform? + * + * The reason is obvious for .NET, Excel and MSVC related files. + * + * For the Java code, the reason is that I use a C preprocessor + * called MCPP and for now I have ported it only on windows. + * (see the mcpp.exe included in the package). + * If someone get the mcpp or an equivalent to be integrated + * in gen_code, then Java code could also be generated from unix. + */ +static void printExcelGlueCode( FILE *out, const TA_FuncInfo *funcInfo ); +static void genJavaCodePhase1( const TA_FuncInfo *funcInfo ); +static void genJavaCodePhase2( const TA_FuncInfo *funcInfo ); + +/* To generate CoreAnnotated.java */ +static void printJavaFunctionAnnotation(const TA_FuncInfo *funcInfo); +#endif + + +typedef void (*TA_ForEachGroup)( const char *groupName, + unsigned int index, + unsigned int isFirst, /* Boolean */ + unsigned int isLast /* Boolean */ + ); + +static unsigned int forEachGroup( TA_ForEachGroup forEachGroupfunc, + void *opaqueData ); + +static void doForEachFunctionPhase1( const TA_FuncInfo *funcInfo, + void *opaqueData ); + +static void doForEachFunctionPhase2( const TA_FuncInfo *funcInfo, + void *opaqueData ); + +static void doForEachFunctionXml( const TA_FuncInfo *funcInfo, + void *opaqueData ); + +static void doForEachUnstableFunction( const TA_FuncInfo *funcInfo, + void *opaqueData ); + +static void doDefsFile( void ); + +static int gen_retcode( void ); + +static void printIndent( FILE *out, unsigned int indent ); + +static void printFunc( FILE *out, + const char *prefix, /* Can be NULL */ + const TA_FuncInfo *funcInfo, + unsigned int prototype, /* Boolean */ + unsigned int frame, /* Boolean */ + unsigned int semiColonNeeded, /* Boolean */ + unsigned int validationCode, /* Boolean */ + unsigned int lookbackSignature, /* Boolean */ + unsigned int managedCPPCode, /* Boolean */ + unsigned int managedCPPDeclaration, /* Boolean */ + unsigned int inputIsSinglePrecision, /* Boolean */ + unsigned int outputForSWIG, /* Boolean */ + unsigned int outputForJava, /* Boolean */ + unsigned int lookbackValidationCode, /* Boolean */ + unsigned int useSubArrayObject, /* Boolean */ + unsigned int arrayToSubArrayCnvt /* Boolean */ + ); + +static void printCallFrame ( FILE *out, const TA_FuncInfo *funcInfo ); +static void printFrameHeader( FILE *out, const TA_FuncInfo *funcInfo, unsigned int lookbackSignature ); + +static void printExternReferenceForEachFunction( const TA_FuncInfo *info, + void *opaqueData ); + +static void printFunctionAddress( const TA_FuncInfo *info, + void *opaqueData ); + +static void printPerGroupList( const char *groupName, + unsigned int index, + unsigned int isFirst, + unsigned int isLast + ); + +static void printGroupListAddress( const char *groupName, + unsigned int index, + unsigned int isFirst, + unsigned int isLast + ); +static void printGroupSize( const char *groupName, + unsigned int index, + unsigned int isFirst, + unsigned int isLast + ); +static void printGroupSizeAddition( const char *groupName, + unsigned int index, + unsigned int isFirst, + unsigned int isLast + ); + +static int addUnstablePeriodEnum( FILE *out ); + +static int createTemplate( FileHandle *in, FileHandle *out ); + +static int generateFuncAPI_C( void ); + +#ifdef _MSC_VER +static int createProjTemplate( FileHandle *in, FileHandle *out ); +static int createMSVCProjTemplate( FileHandle *in, FileHandle *out ); +static int createVS2005ProjTemplate( FileHandle *in, FileHandle *out ); +static void printVS2005FileNode( FILE *out, const char *name ); +#endif + +static void writeFuncFile( const TA_FuncInfo *funcInfo ); +static void doFuncFile( const TA_FuncInfo *funcInfo ); +static void printOptInputValidation( FILE *out, + const char *name, + const TA_OptInputParameterInfo *optInputParamInfo, + int lookbackValidationCode /* Boolean */ ); +static int skipToGenCode( const char *dstName, FILE *out, FILE *templateFile ); +static void printDefines( FILE *out, const TA_FuncInfo *funcInfo ); + +static void printFuncHeaderDoc( FILE *out, + const TA_FuncInfo *funcInfo, + const char *prefix ); + + +static void extractTALogic( FILE *inFile, FILE *outFile ); + +static void cnvtToUpperCase( char *str ); +static void cnvtChar( char *str, char from, char to ); +static char *trimWhitespace( char *str ); + +/* Return 1 on success */ +static int copyFile( const char *src, const char *dest ); + +/* Return 1 when identical */ +static int areFileSame( const char *file1, const char *file2 ); + +static void fileDelete( const char *fileToDelete ); + +static void appendToFunc( FILE *out ); + +static void convertFileToCArray( FILE *in, FILE *out ); + +static void ReplaceReservedXmlCharacters(const char *input, char *output ); + +char gToOpen[BUFFER_SIZE]; +char gTempBuf[BUFFER_SIZE]; +char gTempBuf2[BUFFER_SIZE]; +char gTempBuf3[BUFFER_SIZE]; +char gTempBufForPrint[BUFFER_SIZE]; +char gTempDoubleToStr[200]; + +/* Because Microsoft and Borland does not display + * the value of a double in the same way (%e), this + * function attempts to eliminate difference. This + * is done to avoid annoying difference with CVS. + */ +const char *doubleToStr( double value ); + +const char *gCurrentGroupName; + +static int genCode(int argc, char* argv[]); + +extern const TA_OptInputParameterInfo TA_DEF_UI_MA_Method; + +/* Set this variable to 1 whenever you wish to output a + * prefix to all generated line. + */ +int genPrefix = 0; + +void print( FILE *out, const char *text, ... ) +{ + va_list arglist; + memset(gTempBufForPrint,0,sizeof(gTempBufForPrint)); + + va_start(arglist,text); + vsprintf(gTempBufForPrint,text,arglist); + va_end(arglist); + + if( strlen(gTempBufForPrint) >= BUFFER_SIZE-strlen("/* Generated */ ") ) + { + printf( "Lines length exceed internal buffers (%lu,%lu)\n", + (unsigned long)strlen(gTempBufForPrint), + (unsigned long)(BUFFER_SIZE-strlen("/* Generated */ ")) ); + exit(-1); + } + if( genPrefix ) + fprintf( out, "/* Generated */ %s", gTempBufForPrint ); + else + fprintf( out, "%s", gTempBufForPrint ); +} + +static void printIndent( FILE *out, unsigned int indent ) +{ + unsigned int i; + + if( genPrefix ) + fprintf( out, "/* Generated */ " ); + + for( i=0; i < indent; i++ ) + { + fprintf( out, " " ); + } +} + + +int main(int argc, char* argv[]) +{ + int retValue; + TA_RetCode retCode; + + if( argc > 1 ) + { + /* There is no parameter needed for this tool. */ + printf( "\n" ); + printf( "gen_code V%s - Updates many TA-Lib source files\n", TA_GetVersionString() ); + printf( "\n" ); + printf( "Usage: gen_code\n"); + printf( "\n" ); + printf( " No parameter needed.\n" ); + printf( "\n" ); + printf( " This utility is useful only for developers adding new TA\n" ); + printf( " functions to TA-Lib.\n" ); + printf( "\n" ); + printf( " The interface definitions in c/src/ta_abstract/tables\n" ); + printf( " are used to generate code, documentation and some more.\n" ); + printf( "\n" ); + printf( " The following files are updated or regenerated:\n" ); + printf( " 1) ta-lib/c/include/ta_func.h\n" ); + printf( " 2) ta-lib/c/include/ta_defs.h\n" ); + printf( " 3) ta-lib/ta_func_list.txt\n" ); + printf( " 4) ta-lib/c/src/ta_common/ta_retcode.*\n" ); + printf( " 5) ta-lib/c/src/ta_abstract/ta_group_idx.c\n"); + printf( " 6) ta-lib/c/src/ta_abstract/frames/*.*\n"); + printf( " 7) ta-lib/swig/src/interface/ta_func.swg\n" ); + printf( " 8) ta-lib/dotnet/src/Core/TA-Lib-Core.vcproj (Win32 only)\n" ); + printf( " 9) ta-lib/dotnet/src/Core/TA-Lib-Core.h (Win32 only)\n" ); + printf( " 10) ta-lib/c/src/ta_abstract/excel_glue.c (Win32 only)\n" ); + printf( " 11) ta-lib/c/src/ta_abstract/java_defs.h (Win32 only)\n" ); + printf( " 12) ta-lib/c/ide/msvc/lib_proj/ta_func/ta_func.dsp (Win32 only)\n" ); + printf( " 13) ta-lib/java/src/com/tictactec/ta/lib/Core.java (Win32 only)\n" ); + printf( " 14) ta-lib/java/src/com/tictactec/ta/lib/CoreAnnotated.java (Win32 only)\n" ); + printf( " 15) ta-lib/ta_func_api.xml\n" ); + printf( " 16) ta-lib/c/src/ta_abstract/ta_func_api.c\n" ); + printf( "\n" ); + printf( " The function header, parameters and validation code of all TA\n" ); + printf( " function in c/src/ta_func are also updated.\n" ); + printf( "\n" ); + printf( "** Must be directly run from the 'bin' directory.\n" ); + exit(-1); + } + + printf( "gen_code V%s\n", TA_GetVersionString() ); + + retCode = TA_Initialize(); + if( retCode != TA_SUCCESS ) + { + printf( "\nCannot initialize the library\n"); + return -1; + } + + printf( "Now updating source code...\n" ); + + retValue = genCode( argc, argv ); + + retCode = TA_Shutdown(); + if( retCode != TA_SUCCESS ) + { + printf( "Shutdown failed (%d)\n", retCode ); + } + + return retValue; +} + + +/* The following I/O function allows to manipulate + * more easily files. + * + * When opening the file, the caller can specifiy a + * path relative to the position of the binary. + * That is: ta-lib\c\bin + * + * 'templateFile' allows to create a new file using + * a template. This template must contain one + * line starting with '%%%GENCODE%%%'. + * All character before this string are added to the output + * file on fileOpen, and all character after this string are + * added to the output file on fileClose. Obviously, all + * character added to the file between fileOpen/fileClose + * will replace the "%%%GENCODE%%%" line. + * + * 'templateFile' is ignored when FILE_READ is specified. + * + * Another advantage to use fileOpen and fileClose is that + * the writing to the file is done "silently" in a temporary + * file and the target file is touch only if there was actually + * a modification to it. + * + * On failure, simply exit the software. + */ +static void init_gToOpen( const char *filePath, const char *suffix ) +{ + + char *ptr; + #ifdef WIN32 + const int sepChar = (int)'\\'; + #else + const int sepChar = (int)'/'; + #endif + + + strcpy( gToOpen, filePath ); + if( suffix ) + strcat( gToOpen, suffix ); + + /* Replace all directory separator with the + * one applicable for this OS. + */ + ptr = gToOpen; + while( *ptr != '\0' ) + { + if( (*ptr == '\\') || (*ptr == '/') ) + *ptr = (char)sepChar; + ptr++; + } +} + + +static FileHandle *fileOpen( const char *fileToOpen, + const char *templateFile, + int flags ) +{ + FileHandle *retValue; + + if( (fileToOpen == NULL) || + ((flags&FILE_READ) && (templateFile != NULL)) ) + { + printf( "Internal error line %d", __LINE__ ); + return (FileHandle *)NULL; + } + + retValue = TA_Malloc( sizeof(FileHandle) ); + if( !retValue ) + { + printf( "Memmory alloc error line %d", __LINE__ ); + return (FileHandle *)NULL; + } + + memset( retValue, 0, sizeof(FileHandle) ); + + retValue->flags = flags; + + init_gToOpen( fileToOpen, NULL ); + strcpy( retValue->f1_name, gToOpen ); + + /* First let's try to open the file. Might fail when + * for writing but that is ok. (the file might not exist). + */ + if( flags&FILE_READ ) + { + retValue->file = fopen( gToOpen, "r" ); + if( retValue->file == NULL ) + { + memset( retValue, 0, sizeof(FileHandle) ); + TA_Free( retValue ); + return (FileHandle *)NULL; + } + } + else if( flags&WRITE_ALWAYS ) + { + retValue->file = fopen( gToOpen, "w" ); + if( retValue->file == NULL ) + { + memset( retValue, 0, sizeof(FileHandle) ); + TA_Free( retValue ); + return (FileHandle *)NULL; + } + } + else + { + retValue->file = fopen( gToOpen, "r" ); + + if( retValue->file ) + { + /* Move pointer to fileTarget. The file + * ptr will become the temporary file who + * is going to be truly write enabled. + */ + retValue->fileTarget = retValue->file; + init_gToOpen( fileToOpen, ".tmp" ); + strcpy( retValue->f2_name, gToOpen ); + retValue->file = fopen( gToOpen, "w" ); + if( !retValue->file ) + { + fclose( retValue->fileTarget ); + memset( retValue, 0, sizeof(FileHandle) ); + TA_Free( retValue ); + return (FileHandle *)NULL; + } + } + else + { + /* File does not exist, directly open for write + * no temporary will be used. + */ + retValue->fileTarget = NULL; + retValue->file = fopen( gToOpen, "w" ); + + if( retValue->file == NULL ) + { + memset( retValue, 0, sizeof(FileHandle) ); + TA_Free( retValue ); + return (FileHandle *)NULL; + } + } + } + + if( !(flags&FILE_READ) ) + { + /* Handle the template. */ + if( templateFile ) + { + init_gToOpen( templateFile, NULL ); + retValue->templateFile = fopen( gToOpen, "r" ); + if( retValue->templateFile == NULL ) + { + if(retValue->fileTarget) fclose( retValue->fileTarget ); + if(retValue->file) fclose( retValue->file ); + if(retValue->templateFile) fclose( retValue->templateFile ); + memset( retValue, 0, sizeof(FileHandle) ); + TA_Free( retValue ); + printf( "\nCannot open template [%s]\n", gToOpen ); + return (FileHandle *)NULL; + } + + /* Copy the header part of the template. */ + if( skipToGenCode( fileToOpen, retValue->file, retValue->templateFile ) != 0 ) + { + if(retValue->fileTarget) fclose( retValue->fileTarget ); + if(retValue->file) fclose( retValue->file ); + if(retValue->templateFile) fclose( retValue->templateFile ); + memset( retValue, 0, sizeof(FileHandle) ); + TA_Free( retValue ); + return (FileHandle *)NULL; + } + } + } + + return retValue; +} + +static void fileClose( FileHandle *handle ) +{ + if( !handle ) return; + + /* Write remaining template info. */ + if( handle->templateFile && handle->file ) + { + while( fgets( gTempBuf, BUFFER_SIZE, handle->templateFile ) != NULL ) + { + if( fputs( gTempBuf, handle->file ) == EOF ) + { + printf( "Cannot write to output file! Disk Full? " ); + break; + } + } + + #if 0 + /* Make sure the last line of the output + * finish with a carriage return. This may + * avoid warning from some compilers. + */ + if( gTempBuf[0] != '\n' ) + { + fprintf( handle->file, "\n" ); + } + #endif + } + + if(handle->fileTarget) fclose( handle->fileTarget ); + if(handle->templateFile) fclose( handle->templateFile ); + if(handle->file) fclose( handle->file ); + + if( !(handle->flags&FILE_READ) && !(handle->flags&WRITE_ALWAYS) && (handle->fileTarget != NULL)) + { + if( !areFileSame( handle->f1_name, handle->f2_name ) ) + copyFile( handle->f2_name, handle->f1_name ); + + fileDelete( handle->f2_name ); + } + + memset( handle, 0, sizeof(FileHandle) ); + TA_Free( handle ); +} + +static void fileDelete( const char *fileToDelete ) +{ + init_gToOpen( fileToDelete, NULL ); + + #if defined (WIN32) + DeleteFile (fileToDelete); + #else + unlink (fileToDelete); + #endif +} + +static int genCode(int argc, char* argv[]) +{ + TA_RetCode retCode; + unsigned int nbGroup; + + #ifdef _MSC_VER + FileHandle *tempFile; + FileHandle *tempFileOut; + #endif + + (void)argc; /* Get ride of compiler warning */ + (void)argv; /* Get ride of compiler warning */ + + #ifdef _MSC_VER + /* Create .NET project files template */ + #define FILE_NET_PROJ "..\\..\\dotnet\\src\\Core\\TA-Lib-Core.vcproj" + #define FILE_NET_PROJ_TMP "..\\temp\\dotnetproj.tmp" + gOutProjFile = fileOpen( FILE_NET_PROJ, NULL, FILE_READ ); + if( gOutProjFile == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + tempFile = fileOpen( FILE_NET_PROJ_TMP, NULL, FILE_WRITE|WRITE_ALWAYS ); + if( tempFile == NULL ) + { + printf( "Cannot create temporary .NET project file!\n" ); + return -1; + } + if( createProjTemplate( gOutProjFile, tempFile ) != 0 ) + { + printf( "Failed to parse and write the temporary .NET project file!\n" ); + return -1; + } + fileClose(gOutProjFile); + fileClose(tempFile); + + /* Create MSVC project files template */ + #define FILE_MSVC_PROJ "..\\..\\c\\ide\\msvc\\lib_proj\\ta_func\\ta_func.dsp" + #define FILE_MSVC_PROJ_TMP "..\\temp\\ta_func_dsp.tmp" + gOutMSVCProjFile = fileOpen( FILE_MSVC_PROJ, NULL, FILE_READ ); + if( gOutMSVCProjFile == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + tempFile = fileOpen( FILE_MSVC_PROJ_TMP, NULL, FILE_WRITE|WRITE_ALWAYS ); + if( tempFile == NULL ) + { + printf( "Cannot create temporary MSVC project file!\n" ); + return -1; + } + if( createMSVCProjTemplate( gOutMSVCProjFile, tempFile ) != 0 ) + { + printf( "Failed to parse and write the temporary MSVC project file!\n" ); + return -1; + } + fileClose(gOutMSVCProjFile); + fileClose(tempFile); + + /* Create VS2005 project files template */ + #define FILE_VS2005_PROJ "..\\..\\c\\ide\\vs2005\\lib_proj\\ta_func\\ta_func.vcproj" + #define FILE_VS2005_PROJ_TMP "..\\temp\\ta_func_vcproj.tmp" + gOutVS2005ProjFile = fileOpen( FILE_VS2005_PROJ, NULL, FILE_READ ); + if( gOutVS2005ProjFile == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + tempFile = fileOpen( FILE_VS2005_PROJ_TMP, NULL, FILE_WRITE|WRITE_ALWAYS ); + if( tempFile == NULL ) + { + printf( "Cannot create temporary VS2005 project file!\n" ); + return -1; + } + if( createVS2005ProjTemplate( gOutVS2005ProjFile, tempFile ) != 0 ) + { + printf( "Failed to parse and write the temporary VS2005 project file!\n" ); + return -1; + } + fileClose(gOutVS2005ProjFile); + fileClose(tempFile); + #endif + + #ifdef _MSC_VER + /* Create Java template for Core.java */ + #define FILE_CORE_JAVA "..\\..\\java\\src\\com\\tictactec\\ta\\lib\\Core.java" + #define FILE_CORE_JAVA_TMP "..\\temp\\CoreJava.tmp" + #define FILE_CORE_JAVA_UNF "..\\temp\\CoreJavaUnformated.tmp" + gOutCore_Java = fileOpen( FILE_CORE_JAVA, NULL, FILE_READ ); + if( gOutCore_Java == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + tempFile = fileOpen( FILE_CORE_JAVA_TMP, NULL, FILE_WRITE|WRITE_ALWAYS ); + if( tempFile == NULL ) + { + printf( "Cannot create temporary Core.java project file!\n" ); + return -1; + } + if( createTemplate( gOutCore_Java, tempFile ) != 0 ) + { + printf( "Failed to parse and write the temporary Core.java project file!\n" ); + return -1; + } + fileClose(gOutCore_Java); + fileClose(tempFile); + #endif + + /* Create the .NET interface file template */ + #ifdef _MSC_VER + #define FILE_NET_HEADER "..\\..\\dotnet\\src\\Core\\TA-Lib-Core.h" + #define FILE_NET_HEADER_TMP "..\\temp\\dotneth.tmp" + gOutDotNet_H = fileOpen( FILE_NET_HEADER, NULL, FILE_READ ); + if( gOutDotNet_H == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + tempFile = fileOpen( FILE_NET_HEADER_TMP, NULL, FILE_WRITE|WRITE_ALWAYS ); + if( tempFile == NULL ) + { + printf( "Cannot create temporary .NET header file!\n" ); + return -1; + } + if( createTemplate( gOutDotNet_H, tempFile ) != 0 ) + { + printf( "Failed to parse and write the temporary .NET header file!\n" ); + return -1; + } + fileClose(gOutDotNet_H); + fileClose(tempFile); + #endif + + /* Create ta_retcode.c */ + if( gen_retcode() != 0 ) + { + printf( "\nCannot generate src/ta_common/ta_retcode.c\n" ); + return -1; + } + + /* Create "ta_func.h" */ + gOutFunc_H = fileOpen( "..\\include\\ta_func.h", + "..\\src\\ta_abstract\\templates\\ta_func.h.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutFunc_H == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + gOutFunc_XML = fileOpen( "..\\..\\ta_func_api.xml", NULL, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + if(gOutFunc_XML == NULL) + { + printf( "\nCannot access ta_func_api.xml" ); + } + + + /* Create "ta_func.swg" */ + gOutFunc_SWG = fileOpen( "..\\..\\swig\\src\\interface\\ta_func.swg", + "..\\src\\ta_abstract\\templates\\ta_func.swg.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutFunc_SWG == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + /* Create the "ta_func_list.txt" */ + gOutFuncList_TXT = fileOpen( "..\\..\\ta_func_list.txt", + NULL, + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutFuncList_TXT == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + + /* Create the "ta_frame.h" */ + gOutFrame_H = fileOpen( "..\\src\\ta_abstract\\frames\\ta_frame.h", + "..\\src\\ta_abstract\\templates\\ta_frame.h.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutFrame_H == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + /* Create the "ta_frame.c" */ + gOutFrame_C = fileOpen( "..\\src\\ta_abstract\\frames\\ta_frame.c", + "..\\src\\ta_abstract\\templates\\ta_frame.c.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutFrame_C == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + /* Create the "Makefile.am" */ + gOutMakefile_AM = fileOpen( "..\\src\\ta_func\\Makefile.am", + "..\\src\\ta_abstract\\templates\\Makefile.am.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutMakefile_AM == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + + #ifdef _MSC_VER + /* Create "excel_glue.c" */ + gOutExcelGlue_C = fileOpen( "..\\src\\ta_abstract\\excel_glue.c", + "..\\src\\ta_abstract\\templates\\excel_glue.c.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutExcelGlue_C == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + /* Create "java_defs.h" */ + gOutJavaDefs_H = fileOpen( "..\\src\\ta_abstract\\ta_java_defs.h", + "..\\src\\ta_abstract\\templates\\ta_java_defs.h.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + + if( gOutJavaDefs_H == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + /* Re-open the .NET project template. */ + gOutProjFile = fileOpen( FILE_NET_PROJ, FILE_NET_PROJ_TMP, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + if( gOutProjFile == NULL ) + { + printf( "Cannot update [%s]\n", FILE_NET_PROJ ); + return -1; + } + + /* Re-open the MSVC project template. */ + gOutMSVCProjFile = fileOpen( FILE_MSVC_PROJ, FILE_MSVC_PROJ_TMP, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + if( gOutMSVCProjFile == NULL ) + { + printf( "Cannot update [%s]\n", FILE_MSVC_PROJ ); + return -1; + } + + /* Re-open the VS2005 project template. */ + gOutVS2005ProjFile = fileOpen( FILE_VS2005_PROJ, FILE_VS2005_PROJ_TMP, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + if( gOutVS2005ProjFile == NULL ) + { + printf( "Cannot update [%s]\n", FILE_VS2005_PROJ ); + return -1; + } + + /* Create "CoreAnnotated.java" */ + gOutFunc_Annotation = fileOpen( "..\\..\\java\\src\\com\\tictactec\\ta\\lib\\CoreAnnotated.java", + "..\\src\\ta_abstract\\templates\\CoreAnnotated.java.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if(gOutFunc_Annotation == NULL) + { + printf( "\nCannot access CoreAnnotated.java" ); + } + + #endif + + #ifdef _MSC_VER + /* Re-open the Core.java template. */ + gOutCore_Java = fileOpen( FILE_CORE_JAVA_UNF, FILE_CORE_JAVA_TMP, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + if( gOutCore_Java == NULL ) + { + printf( "Cannot update [%s]\n", FILE_CORE_JAVA_UNF ); + return -1; + } + #endif + + /* Re-open the .NET interface template. */ + #ifdef _MSC_VER + gOutDotNet_H = fileOpen( FILE_NET_HEADER, FILE_NET_HEADER_TMP, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + if( gOutDotNet_H == NULL ) + { + printf( "Cannot update [%s]\n", FILE_NET_HEADER ); + return -1; + } + #endif + + /* Process each functions. Two phase. */ + TA_ForEachFunc( doForEachFunctionPhase1, NULL ); + TA_ForEachFunc( doForEachFunctionPhase2, NULL ); + + /* Leave empty line for Makefile.am */ + fprintf( gOutMakefile_AM->file, "\n" ); + + /* Seperate generation of xml description file */ + fprintf(gOutFunc_XML->file, "\n"); + fprintf(gOutFunc_XML->file, "\n"); + retCode = TA_ForEachFunc( doForEachFunctionXml, NULL ); + fprintf(gOutFunc_XML->file, "\n"); + + /* Append some "hard coded" prototype for ta_func */ + appendToFunc( gOutFunc_H->file ); + appendToFunc( gOutFunc_SWG->file ); + + /* Close all files who were updated with the list of TA functions. */ + fileClose( gOutFuncList_TXT ); + fileClose( gOutFunc_H ); + fileClose( gOutFunc_SWG ); + fileClose( gOutFrame_H ); + fileClose( gOutFrame_C ); + fileClose( gOutFunc_XML ); + fileClose( gOutMakefile_AM ); + + #ifdef _MSC_VER + fileClose( gOutDotNet_H ); + fileClose( gOutCore_Java ); + fileClose( gOutProjFile ); + fileClose( gOutMSVCProjFile ); + fileClose( gOutVS2005ProjFile ); + fileClose( gOutExcelGlue_C ); + fileClose( gOutJavaDefs_H ); + fileClose( gOutFunc_Annotation ); + fileDelete( FILE_CORE_JAVA_TMP ); + #endif + + if( retCode != TA_SUCCESS ) + { + printf( "Failed [%d]\n", retCode ); + return -1; + } + + /* Create the "ta_group_idx.c" file. */ + genPrefix = 1; + gOutGroupIdx_C = fileOpen( "..\\src\\ta_abstract\\ta_group_idx.c", + "..\\src\\ta_abstract\\templates\\ta_group_idx.c.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutGroupIdx_C == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + retCode = TA_ForEachFunc( printExternReferenceForEachFunction, NULL ); + if( retCode != TA_SUCCESS ) + { + fileClose( gOutGroupIdx_C ); + return -1; + } + + nbGroup = forEachGroup( printPerGroupList, NULL ); + + print( gOutGroupIdx_C->file, "const TA_FuncDef **TA_PerGroupFuncDef[%d] = {\n", nbGroup ); + forEachGroup( printGroupListAddress, NULL ); + print( gOutGroupIdx_C->file, "};\n\n" ); + + print( gOutGroupIdx_C->file, "const unsigned int TA_PerGroupSize[%d] = {\n", nbGroup ); + forEachGroup( printGroupSize, NULL ); + print( gOutGroupIdx_C->file, "};\n\n" ); + + print( gOutGroupIdx_C->file, "const unsigned int TA_TotalNbFunction =\n" ); + forEachGroup( printGroupSizeAddition, NULL ); + + fileClose( gOutGroupIdx_C ); + genPrefix = 0; + + /* Update "ta_defs.h" */ + doDefsFile(); + + /* Convert the xml description file into a format embedded in the library. */ + if( generateFuncAPI_C() != 1 ) + { + return -1; /* Failed. */ + } + + + /* Run Java Post-Processing. + * On Success, the Java program create a file named "java_success". + */ + #ifndef _MSC_VER + printf( "\nWarning: Java code update supported only for MSVC compiler for now.\n" ); + #else + printf( "\nPost-Processing Java Code\n" ); + #define JAVA_SUCCESS_FILE "..\\temp\\java_success" + #define JAVA_PRETTY_TEMP_FILE "..\\temp\\CoreJavaPretty.tmp" + fileDelete( JAVA_SUCCESS_FILE ); + system( "javac -cp . -d . \"..\\src\\tools\\gen_code\\java\\PrettyCode.java" ); + system( "javac -cp . -d . \"..\\src\\tools\\gen_code\\java\\Main.java" ); + system( "java -cp . Main" ); + tempFile = fileOpen(JAVA_SUCCESS_FILE,NULL,FILE_READ ); + fileDelete( FILE_CORE_JAVA_UNF ); + + if( tempFile == NULL ) + { + printf( "\nWarning: Java code NOT updated.\n" ); + } + else + { + + fileClose( tempFile ); + + /* Java processing done. Overwrite the original Core.java ONLY if there + * is changes (re-use fileOpen/fileClose even if not efficient). + */ + tempFile = fileOpen( JAVA_PRETTY_TEMP_FILE, NULL, FILE_READ ); + tempFileOut = fileOpen( FILE_CORE_JAVA, NULL, + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( (tempFile == NULL) || (tempFileOut == NULL) ) + { + printf( "\nError: Java code update failed.\n" ); + return -1; + } + else + { + + while( fgets( gTempBuf, BUFFER_SIZE, tempFile->file ) ) + fputs(gTempBuf,tempFileOut->file); + + fileClose(tempFile); + fileClose(tempFileOut); + } + } + fileDelete( JAVA_SUCCESS_FILE ); + fileDelete( JAVA_PRETTY_TEMP_FILE ); + #endif + + /* Remove temporary files. */ + #ifdef _MSC_VER + fileDelete( FILE_NET_PROJ_TMP ); + fileDelete( FILE_MSVC_PROJ_TMP ); + fileDelete( FILE_NET_HEADER_TMP ); + #endif + + printf( "\n** Update completed with success **\n"); + + return 0; +} + +static unsigned int forEachGroup( TA_ForEachGroup forEachGroupFunc, + void *opaqueData ) +{ + TA_RetCode retCode; + TA_StringTable *table; + unsigned int i; + + (void)opaqueData; /* Get ride of compiler warning */ + + retCode = TA_GroupTableAlloc( &table ); + if( retCode != TA_SUCCESS ) + return 0; + + for( i=0; i < table->size; i++ ) + { + forEachGroupFunc( table->string[i], + i, + i==0? 1:0, + i==(table->size-1)? 1:0 ); + } + + retCode = TA_GroupTableFree( table ); + if( retCode != TA_SUCCESS ) + return 0; + + return i; +} + +/* Replaces reserved xml characters with the appropriate escape sequence. */ +static void ReplaceReservedXmlCharacters(const char *input, char *output ) +{ + char *currentPosition; + char tempString[8*1024]; + + if((input == NULL) || (output == NULL)) + { + return; + } + + strcpy(output, input); + + /*Replace '&' with "&" + *Note1: '&' has to be processed first as otherwise we replace the + * '&' in the escaped characters. + *Note2: We assume that the input string does not have any escaped + * characters already. + */ + currentPosition = output; + while((currentPosition = strchr(currentPosition, '&')) != NULL) + { + tempString[0] = '\0'; + if(strlen(currentPosition) > 1) + { + strcpy(tempString, currentPosition+1); + } + sprintf(currentPosition, "&%s", tempString); + } + + /* Replace '<' with "<" */ + currentPosition = output; + while((currentPosition = strchr(currentPosition, '<')) != NULL) + { + tempString[0] = '\0'; + if(strlen(currentPosition) > 1) + { + strcpy(tempString, currentPosition+1); + } + sprintf(currentPosition, "<%s", tempString); + } + + /* Replace '>' with ">" */ + currentPosition = output; + while((currentPosition = strchr(currentPosition, '>')) != NULL) + { + tempString[0] = '\0'; + if(strlen(currentPosition) > 1) + { + strcpy(tempString, currentPosition+1); + } + sprintf(currentPosition, ">%s", tempString); + } + + /* Replace ''' with "'" */ + currentPosition = output; + while((currentPosition = strchr(currentPosition, '\'')) != NULL) + { + tempString[0] = '\0'; + if(strlen(currentPosition) > 1) + { + strcpy(tempString, currentPosition+1); + } + sprintf(currentPosition, "'%s", tempString); + } + + /* Replace '"' with """ */ + currentPosition = output; + while((currentPosition = strchr(currentPosition, '"')) != NULL) + { + tempString[0] = '\0'; + if(strlen(currentPosition) > 1) + { + strcpy(tempString, currentPosition+1); + } + sprintf(currentPosition, ""%s", tempString); + } +} + +static void doForEachFunctionXml(const TA_FuncInfo *funcInfo, + void *opaqueData) +{ + TA_RetCode retCode; + const TA_InputParameterInfo *inputInfo; + const TA_OptInputParameterInfo *optInputInfo; + const TA_OutputParameterInfo *outputInfo; + char tempString[8*1024]; + unsigned int i; + + (void)opaqueData; + + /* General stuff about function */ + fprintf(gOutFunc_XML->file, " \n", funcInfo->name); + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " %s\n", (funcInfo->name == NULL)? "" : funcInfo->name); + fprintf(gOutFunc_XML->file, " %s\n", (funcInfo->camelCaseName == NULL)? "" : funcInfo->camelCaseName); + ReplaceReservedXmlCharacters(funcInfo->hint, tempString); + fprintf(gOutFunc_XML->file, " %s\n", (funcInfo->hint == NULL)? "" : tempString); + fprintf(gOutFunc_XML->file, " %s\n", funcInfo->group); + + /* Optional function flags */ + if(funcInfo->flags & (TA_FUNC_FLG_OVERLAP | TA_FUNC_FLG_VOLUME | TA_FUNC_FLG_CANDLESTICK | TA_FUNC_FLG_UNST_PER)) + { + fprintf(gOutFunc_XML->file, " \n"); + if(funcInfo->flags & TA_FUNC_FLG_OVERLAP) + { + fprintf(gOutFunc_XML->file, " Overlap\n"); + } + if(funcInfo->flags & TA_FUNC_FLG_VOLUME) + { + fprintf(gOutFunc_XML->file, " Volume\n"); + } + if(funcInfo->flags & TA_FUNC_FLG_CANDLESTICK) + { + fprintf(gOutFunc_XML->file, " Candlestick\n"); + } + if(funcInfo->flags & TA_FUNC_FLG_UNST_PER) + { + fprintf(gOutFunc_XML->file, " Unstable Period\n"); + } + + fprintf(gOutFunc_XML->file, " \n"); + } + + + /* Required input arguments */ + fprintf(gOutFunc_XML->file, " \n"); + for(i=0; inbInput; i++) + { + retCode = TA_GetInputParameterInfo( funcInfo->handle, i, &inputInfo); + if(inputInfo->type == TA_Input_Price) + { + if(inputInfo->flags & TA_IN_PRICE_OPEN) + { + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " Open\n"); + fprintf(gOutFunc_XML->file, " Open\n"); + fprintf(gOutFunc_XML->file, " \n"); + } + if(inputInfo->flags & TA_IN_PRICE_HIGH) + { + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " High\n"); + fprintf(gOutFunc_XML->file, " High\n"); + fprintf(gOutFunc_XML->file, " \n"); + } + if(inputInfo->flags & TA_IN_PRICE_LOW) + { + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " Low\n"); + fprintf(gOutFunc_XML->file, " Low\n"); + fprintf(gOutFunc_XML->file, " \n"); + } + if(inputInfo->flags & TA_IN_PRICE_CLOSE) + { + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " Close\n"); + fprintf(gOutFunc_XML->file, " Close\n"); + fprintf(gOutFunc_XML->file, " \n"); + } + if(inputInfo->flags & TA_IN_PRICE_VOLUME) + { + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " Volume\n"); + fprintf(gOutFunc_XML->file, " Volume\n"); + fprintf(gOutFunc_XML->file, " \n"); + } + if(inputInfo->flags & TA_IN_PRICE_OPENINTEREST) + { + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " Open Interest\n"); + fprintf(gOutFunc_XML->file, " Open Interest\n"); + fprintf(gOutFunc_XML->file, " \n"); + } + if(inputInfo->flags & TA_IN_PRICE_TIMESTAMP) + { + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " Timestamp\n"); + fprintf(gOutFunc_XML->file, " Timestamp\n"); + fprintf(gOutFunc_XML->file, " \n"); + } + } + else + { + fprintf(gOutFunc_XML->file, " \n"); + if(inputInfo->type == TA_Input_Real) + { + fprintf(gOutFunc_XML->file, " Double Array\n"); + } + else if(inputInfo->type == TA_Input_Integer) + { + fprintf(gOutFunc_XML->file, " Integer Array\n"); + } + else + { + printf("Unknown input type detected.\n"); + } + fprintf(gOutFunc_XML->file, " %s\n", inputInfo->paramName); + fprintf(gOutFunc_XML->file, " \n"); + } + } + fprintf(gOutFunc_XML->file, " \n"); + + /* Optional input arguments */ + if(funcInfo->nbOptInput > 0) + { + + fprintf(gOutFunc_XML->file, " \n"); + for(i=0; inbOptInput; i++) + { + retCode = TA_GetOptInputParameterInfo( funcInfo->handle, i, &optInputInfo ); + + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " %s\n", optInputInfo->displayName); + ReplaceReservedXmlCharacters(optInputInfo->hint, tempString); + fprintf(gOutFunc_XML->file, " %s\n", (optInputInfo->hint == NULL)? "" : tempString); + if(optInputInfo->flags != 0) + { + fprintf(gOutFunc_XML->file, " \n"); + + if(optInputInfo->flags & TA_OPTIN_IS_PERCENT) + { + fprintf(gOutFunc_XML->file, " Percent\n"); + } + if(optInputInfo->flags & TA_OPTIN_IS_DEGREE) + { + fprintf(gOutFunc_XML->file, " Degree\n"); + } + if(optInputInfo->flags & TA_OPTIN_IS_CURRENCY) + { + fprintf(gOutFunc_XML->file, " Currency\n"); + } + if(optInputInfo->flags & TA_OPTIN_ADVANCED) + { + fprintf(gOutFunc_XML->file, " Advanced\n"); + } + + fprintf(gOutFunc_XML->file, " \n"); + } + + if(optInputInfo->type == TA_OptInput_RealRange) + { + TA_RealRange *doubleRange; + + doubleRange= (TA_RealRange*)optInputInfo->dataSet; + fprintf(gOutFunc_XML->file, " Double\n"); + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " %s\n", doubleToStr(doubleRange->min)); + fprintf(gOutFunc_XML->file, " %s\n", doubleToStr(doubleRange->max)); + fprintf(gOutFunc_XML->file, " %d\n", doubleRange->precision); + fprintf(gOutFunc_XML->file, " %s\n", doubleToStr(doubleRange->suggested_start)); + fprintf(gOutFunc_XML->file, " %s\n", doubleToStr(doubleRange->suggested_end)); + fprintf(gOutFunc_XML->file, " %s\n", doubleToStr(doubleRange->suggested_increment)); + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " %s\n", doubleToStr(optInputInfo->defaultValue)); + } + else if(optInputInfo->type == TA_OptInput_IntegerRange) + { + TA_IntegerRange *integerRange; + + integerRange = (TA_IntegerRange*)optInputInfo->dataSet; + fprintf(gOutFunc_XML->file, " Integer\n"); + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " %d\n", integerRange->min); + fprintf(gOutFunc_XML->file, " %d\n", integerRange->max); + fprintf(gOutFunc_XML->file, " %d\n", integerRange->max); + fprintf(gOutFunc_XML->file, " %d\n", integerRange->max); + fprintf(gOutFunc_XML->file, " %d\n", integerRange->max); + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " %d\n", (int)optInputInfo->defaultValue); + } + else if(optInputInfo->type == TA_OptInput_IntegerList) + { + TA_IntegerList *intList; + + intList = (TA_IntegerList*) optInputInfo->dataSet; + fprintf(gOutFunc_XML->file, " MA Type\n"); + fprintf(gOutFunc_XML->file, " %d\n", (int)optInputInfo->defaultValue); + if( intList != (TA_IntegerList*) TA_DEF_UI_MA_Method.dataSet ) + { + printf("Integer lists are not supported.\n"); + } + } + else + { + printf("Unknown optional input type detected.\n"); + } + + fprintf(gOutFunc_XML->file, " \n"); + } + fprintf(gOutFunc_XML->file, " \n"); + } + + /* Output arguments */ + fprintf(gOutFunc_XML->file, " \n"); + for(i=0; inbOutput; i++) + { + retCode = TA_GetOutputParameterInfo( funcInfo->handle, i, &outputInfo ); + fprintf(gOutFunc_XML->file, " \n"); + if(outputInfo->type == TA_Output_Integer) + { + fprintf(gOutFunc_XML->file, " Integer Array\n"); + } + else if(outputInfo->type == TA_Output_Real) + { + fprintf(gOutFunc_XML->file, " Double Array\n"); + } + else + { + printf("Unknown output type detected.\n"); + } + fprintf(gOutFunc_XML->file, " %s\n", outputInfo->paramName); + if(outputInfo->flags != 0) + { + fprintf(gOutFunc_XML->file, " \n"); + + if(outputInfo->flags & TA_OUT_LINE) + { + fprintf(gOutFunc_XML->file, " Line\n"); + } + if(outputInfo->flags & TA_OUT_DOT_LINE) + { + fprintf(gOutFunc_XML->file, " Dotted Line\n"); + } + if(outputInfo->flags & TA_OUT_DASH_LINE) + { + fprintf(gOutFunc_XML->file, " Dashed Line\n"); + } + if(outputInfo->flags & TA_OUT_DOT) + { + fprintf(gOutFunc_XML->file, " Dots\n"); + } + if(outputInfo->flags & TA_OUT_HISTO) + { + fprintf(gOutFunc_XML->file, " Histogram\n"); + } + if(outputInfo->flags & TA_OUT_PATTERN_BOOL) + { + fprintf(gOutFunc_XML->file, " Pattern Bool\n"); + } + if(outputInfo->flags & TA_OUT_PATTERN_BULL_BEAR) + { + fprintf(gOutFunc_XML->file, " Pattern Bull Bear\n"); + } + if(outputInfo->flags & TA_OUT_PATTERN_STRENGTH) + { + fprintf(gOutFunc_XML->file, " Pattern Strength\n"); + } + if(outputInfo->flags & TA_OUT_POSITIVE) + { + fprintf(gOutFunc_XML->file, " Positive\n"); + } + if(outputInfo->flags & TA_OUT_NEGATIVE) + { + fprintf(gOutFunc_XML->file, " Negative\n"); + } + if(outputInfo->flags & TA_OUT_ZERO) + { + fprintf(gOutFunc_XML->file, " Zero\n"); + } + if(outputInfo->flags & TA_OUT_UPPER_LIMIT) + { + fprintf(gOutFunc_XML->file, " Upper Limit\n"); + } + if(outputInfo->flags & TA_OUT_LOWER_LIMIT) + { + fprintf(gOutFunc_XML->file, " Lower Limit\n"); + } + + fprintf(gOutFunc_XML->file, " \n"); + } + fprintf(gOutFunc_XML->file, " \n"); + } + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, " \n"); + fprintf(gOutFunc_XML->file, "\n"); + fprintf(gOutFunc_XML->file, "\n"); +} + +static void doForEachFunctionPhase1( const TA_FuncInfo *funcInfo, + void *opaqueData ) +{ + (void)opaqueData; + + #ifdef _MSC_VER + /* Run the func file through the pre-processor to generate the Java code. */ + genJavaCodePhase1( funcInfo ); + #else + (void)funcInfo; + #endif +} + +static void doForEachFunctionPhase2( const TA_FuncInfo *funcInfo, + void *opaqueData ) +{ + static int firstTime = 1; + + (void)opaqueData; /* Get ride of compiler warning */ + + /* Add this function to the "ta_func_list.txt" */ + genPrefix = 0; + fprintf( gOutFuncList_TXT->file, "%-20s%s\n", funcInfo->name, funcInfo->hint ); + + fprintf( gOutFunc_H->file, "\n" ); + fprintf( gOutFunc_SWG->file, "\n" ); + + printf( "Processing [TA_%s]\n", funcInfo->name ); + + fprintf( gOutFunc_H->file, "/*\n" ); + printFuncHeaderDoc( gOutFunc_H->file, funcInfo, " * " ); + fprintf( gOutFunc_H->file, " */\n" ); + + fprintf( gOutFunc_SWG->file, "/*\n" ); + printFuncHeaderDoc( gOutFunc_SWG->file, funcInfo, " * " ); + fprintf( gOutFunc_SWG->file, " */\n" ); + + /* Generate the defines corresponding to this function. */ + printDefines( gOutFunc_H->file, funcInfo ); + printDefines( gOutFunc_SWG->file, funcInfo ); + + /* Generate the function prototype. */ + printFunc( gOutFunc_H->file, NULL, funcInfo, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); + fprintf( gOutFunc_H->file, "\n" ); + + printFunc( gOutFunc_H->file, NULL, funcInfo, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ); + fprintf( gOutFunc_H->file, "\n" ); + + /* Generate the SWIG interface. */ + printFunc( gOutFunc_SWG->file, NULL, funcInfo, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); + fprintf( gOutFunc_SWG->file, "\n" ); + + /* Generate the corresponding lookback function prototype. */ + printFunc( gOutFunc_H->file, NULL, funcInfo, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); + printFunc( gOutFunc_SWG->file, NULL, funcInfo, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); + + /* Create the frame definition (ta_frame.c) and declaration (ta_frame.h) */ + genPrefix = 1; + printFrameHeader( gOutFrame_H->file, funcInfo, 0 ); + fprintf( gOutFrame_H->file, ";\n" ); + printFrameHeader( gOutFrame_H->file, funcInfo, 1 ); + fprintf( gOutFrame_H->file, ";\n\n" ); + printCallFrame( gOutFrame_C->file, funcInfo ); + + /* Add this function to the Makefile.am */ + if( firstTime ) + fprintf( gOutMakefile_AM->file, "\tta_%s.c", funcInfo->name ); + else + fprintf( gOutMakefile_AM->file, " \\\n\tta_%s.c", funcInfo->name ); + + #ifdef _MSC_VER + /* Add the entry in the .NET project file. */ + fprintf( gOutProjFile->file, " file, " RelativePath=\"..\\..\\..\\c\\src\\ta_func\\ta_%s.c\">\n", funcInfo->name ); + fprintf( gOutProjFile->file, " file, " Name=\"Debug|Win32\">\n" ); + fprintf( gOutProjFile->file, " file, " Name=\"VCCLCompilerTool\"\n" ); + fprintf( gOutProjFile->file, " AdditionalIncludeDirectories=\"\"\n" ); + fprintf( gOutProjFile->file, " UsePrecompiledHeader=\"0\"\n" ); + fprintf( gOutProjFile->file, " CompileAs=\"2\"/>\n" ); + fprintf( gOutProjFile->file, " \n" ); + fprintf( gOutProjFile->file, " file, " Name=\"Release|Win32\">\n" ); + fprintf( gOutProjFile->file, " file, " Name=\"VCCLCompilerTool\"\n" ); + fprintf( gOutProjFile->file, " AdditionalIncludeDirectories=\"\"\n" ); + fprintf( gOutProjFile->file, " UsePrecompiledHeader=\"0\"\n" ); + fprintf( gOutProjFile->file, " CompileAs=\"2\"/>\n" ); + fprintf( gOutProjFile->file, " \n" ); + fprintf( gOutProjFile->file, " file, " Name=\"Debug SubArray|Win32\">\n" ); + fprintf( gOutProjFile->file, " file, " Name=\"VCCLCompilerTool\"\n" ); + fprintf( gOutProjFile->file, " AdditionalIncludeDirectories=\"\"\n" ); + fprintf( gOutProjFile->file, " UsePrecompiledHeader=\"0\"\n" ); + fprintf( gOutProjFile->file, " CompileAs=\"2\"/>\n" ); + fprintf( gOutProjFile->file, " \n" ); + fprintf( gOutProjFile->file, " file, " Name=\"Release SubArray|Win32\">\n" ); + fprintf( gOutProjFile->file, " file, " Name=\"VCCLCompilerTool\"\n" ); + fprintf( gOutProjFile->file, " AdditionalIncludeDirectories=\"\"\n" ); + fprintf( gOutProjFile->file, " UsePrecompiledHeader=\"0\"\n" ); + fprintf( gOutProjFile->file, " CompileAs=\"2\"/>\n" ); + fprintf( gOutProjFile->file, " \n" ); + fprintf( gOutProjFile->file, " \n" ); + + /* Add the entry in the MSVC project file. */ + fprintf( gOutMSVCProjFile->file, "# Begin Source File\n" ); + fprintf( gOutMSVCProjFile->file, "\n" ); + fprintf( gOutMSVCProjFile->file, "SOURCE=..\\..\\..\\..\\src\\ta_func\\ta_%s.c\n", funcInfo->name ); + fprintf( gOutMSVCProjFile->file, "# End Source File\n" ); + + /* Add the entry in the VS2005 project file. */ + printVS2005FileNode( gOutVS2005ProjFile->file, funcInfo->name ); + + /* Generate the excel glue code */ + printExcelGlueCode( gOutExcelGlue_C->file, funcInfo ); + + /* Generate CoreAnnotated */ + printJavaFunctionAnnotation( funcInfo ); + + /* Generate the functions declaration for the .NET interface. */ + printFunc( gOutDotNet_H->file, NULL, funcInfo, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); + + fprintf( gOutDotNet_H->file, " #if defined( _MANAGED ) && defined( USE_SUBARRAY )\n" ); + printFunc( gOutDotNet_H->file, NULL, funcInfo, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0 ); + fprintf( gOutDotNet_H->file, "\n" ); + + printFunc( gOutDotNet_H->file, NULL, funcInfo, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 ); + + fprintf( gOutDotNet_H->file, " { return " ); + printFunc( gOutDotNet_H->file, NULL, funcInfo, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1 ); + fprintf( gOutDotNet_H->file, " }\n" ); + + fprintf( gOutDotNet_H->file, " #elif defined( _MANAGED )\n" ); + printFunc( gOutDotNet_H->file, NULL, funcInfo, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 ); + fprintf( gOutDotNet_H->file, " #endif\n" ); + + printFunc( gOutDotNet_H->file, NULL, funcInfo, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0 ); + fprintf( gOutDotNet_H->file, "\n" ); + fprintf( gOutDotNet_H->file, " #define TA_%s Core::%s\n", funcInfo->name, funcInfo->camelCaseName ); + fprintf( gOutDotNet_H->file, " #define TA_%s_Lookback Core::%sLookback\n\n", funcInfo->name, funcInfo->camelCaseName ); + #endif + + doFuncFile( funcInfo ); + + #ifdef _MSC_VER + /* Run the func file through the pre-processor to generate the Java code. */ + genJavaCodePhase2( funcInfo ); + #endif + + firstTime = 0; +} + +static void doForEachUnstableFunction( const TA_FuncInfo *funcInfo, + void *opaqueData ) +{ + unsigned int *i; + + i = (unsigned int *)opaqueData; + + if( funcInfo->flags & TA_FUNC_FLG_UNST_PER ) + { + print( gOutDefs_H->file, " /* %03d */ ENUM_DEFINE( TA_FUNC_UNST_%s, %s),\n", *i, funcInfo->name, funcInfo->camelCaseName ); + (*i)++; + } +} + +static void printDefines( FILE *out, const TA_FuncInfo *funcInfo ) +{ + TA_RetCode retCode; + const TA_OptInputParameterInfo *optInputParamInfo; + unsigned int i, j; + unsigned int paramNb; + const char *paramName; + const char *defaultParamName; + TA_IntegerList *intList; + TA_RealList *realList; + + /* Go through the optional parameter and print + * the corresponding define for the TA_OptInput_IntegerList + * and TA_OptInput_RealList having a string. + */ + paramNb = 0; + for( i=0; i < funcInfo->nbOptInput; i++ ) + { + retCode = TA_GetOptInputParameterInfo( funcInfo->handle, + i, &optInputParamInfo ); + + if( retCode != TA_SUCCESS ) + { + printf( "[%s] invalid 'optional input' information\n", funcInfo->name ); + return; + } + + paramName = optInputParamInfo->paramName; + + /* TA_MA: Value for parameter */ + + switch( optInputParamInfo->type ) + { + case TA_OptInput_RealList: + defaultParamName = "optInReal"; + break; + case TA_OptInput_IntegerList: + defaultParamName = "optInInteger"; + break; + default: + paramNb++; + continue; /* Skip other type of parameter */ + } + + if( !paramName ) + paramName = defaultParamName; + + /* Output a comment to guide the user. */ + switch( optInputParamInfo->type ) + { + case TA_OptInput_IntegerList: + intList = (TA_IntegerList *)optInputParamInfo->dataSet; + if( intList != (TA_IntegerList *)TA_DEF_UI_MA_Method.dataSet ) + { + fprintf( out, "\n/* TA_%s: Optional Parameter %s */\n", + funcInfo->name, paramName ); + for( j=0; j < intList->nbElement; j++ ) + { + strcpy( gTempBuf, intList->data[j].string ); + cnvtChar( gTempBuf, ' ', '_' ); + trimWhitespace( gTempBuf ); + cnvtToUpperCase( gTempBuf ); + fprintf( out, "#define TA_%s_%s %d\n", + funcInfo->name, + gTempBuf, + intList->data[j].value ); + + } + fprintf( out, "\n" ); + } + break; + case TA_OptInput_RealList: + fprintf( out, "\n/* TA_%s: Optional Parameter %s */\n", + funcInfo->name, paramName ); + + realList = (TA_RealList *)optInputParamInfo->dataSet; + for( j=0; j < realList->nbElement; j++ ) + { + strcpy( gTempBuf, realList->data[j].string ); + cnvtChar( gTempBuf, ' ', '_' ); + trimWhitespace( gTempBuf ); + cnvtToUpperCase( gTempBuf ); + fprintf( out, "#define TA_%s_%s %s\n", + funcInfo->name, + gTempBuf, + doubleToStr(realList->data[j].value) ); + + } + fprintf( out, "\n" ); + break; + default: + /* Do nothing */ + break; + } + + paramNb++; + } +} + +static void printFunc( FILE *out, + const char *prefix, /* Can be NULL */ + const TA_FuncInfo *funcInfo, + unsigned int prototype, /* Boolean */ + unsigned int frame, /* Boolean */ + unsigned int semiColonNeeded, /* Boolean */ + unsigned int validationCode, /* Boolean */ + unsigned int lookbackSignature, /* Boolean */ + unsigned int managedCPPCode, /* Boolean */ + unsigned int managedCPPDeclaration, /* Boolean */ + unsigned int inputIsSinglePrecision, /* Boolean */ + unsigned int outputForSWIG, /* Boolean */ + unsigned int outputForJava, /* Boolean */ + unsigned int lookbackValidationCode, /* Boolean */ + unsigned int useSubArrayObject, /* Boolean */ + unsigned int arrayToSubArrayCnvt /* Boolean */ + ) +{ + TA_RetCode retCode; + unsigned int i, j, k, lastParam; + int indent; + unsigned int paramNb; + const char *paramName; + const char *defaultParamName; + const TA_InputParameterInfo *inputParamInfo; + const TA_OptInputParameterInfo *optInputParamInfo; + const TA_OutputParameterInfo *outputParamInfo; + const char *typeString; + const char *inputDoubleArrayType; + const char *inputIntArrayType; + const char *outputDoubleArrayType; + const char *outputIntArrayType; + const char *outputIntParam; + const char *arrayBracket; + const char *funcName; + int excludeFromManaged; + int isMAType; + + const char *startIdxString; + const char *endIdxString; + const char *outNbElementString; + const char *outBegIdxString; + + char funcNameBuffer[1024]; /* Not safe, but 1024 is realistic, */ + + if( arrayToSubArrayCnvt ) + { + inputIntArrayType = " "; + inputDoubleArrayType = " "; + outputDoubleArrayType = " "; + outputIntArrayType = " "; + outputIntParam = " "; + arrayBracket = " "; + startIdxString = "startIdx"; + endIdxString = "endIdx"; + outNbElementString = "outNBElement"; + outBegIdxString = "outBegIdx"; + funcName = funcInfo->camelCaseName; + } + else if( managedCPPCode ) + { + if( inputIsSinglePrecision ) + { + inputDoubleArrayType = "cli::array^"; + } + else + { + inputDoubleArrayType = useSubArrayObject? "SubArray^":"cli::array^"; + } + + inputIntArrayType = "cli::array^"; + outputDoubleArrayType = "cli::array^"; + outputIntArrayType = "cli::array^"; + outputIntParam = "[Out]int%"; + arrayBracket = ""; + startIdxString = "startIdx"; + endIdxString = "endIdx"; + outNbElementString = "outNBElement"; + outBegIdxString = "outBegIdx"; + funcName = funcInfo->camelCaseName; + } + else if( outputForSWIG ) + { + if( inputIsSinglePrecision ) + inputDoubleArrayType = "const float *"; + else + inputDoubleArrayType = "const double *"; + inputIntArrayType = "const int *"; + outputIntArrayType = "int"; + outputDoubleArrayType = "double"; + outputIntParam = "int"; + arrayBracket = ""; + startIdxString = " START_IDX"; + endIdxString = " END_IDX"; + outNbElementString = "OUT_SIZE"; + outBegIdxString = "BEG_IDX"; + funcName = funcInfo->name; + } + else if( outputForJava ) + { + if( inputIsSinglePrecision ) + inputDoubleArrayType = "float"; + else + inputDoubleArrayType = "double"; + inputIntArrayType = "int"; + outputDoubleArrayType = "double"; + outputIntArrayType = "int"; + outputIntParam = "MInteger"; + arrayBracket = "[]"; + startIdxString = "startIdx"; + endIdxString = "endIdx"; + outNbElementString = "outNBElement"; + outBegIdxString = "outBegIdx"; + funcName = funcNameBuffer; + + /* For Java, first letter is always lowercase. */ + strcpy( funcNameBuffer, funcInfo->camelCaseName ); + funcNameBuffer[0] = tolower(funcNameBuffer[0]); + } + else + { + if( inputIsSinglePrecision ) + inputDoubleArrayType = "const float"; + else + inputDoubleArrayType = "const double"; + inputIntArrayType = "const int"; + outputDoubleArrayType = "double"; + outputIntArrayType = "int"; + outputIntParam = "int"; + arrayBracket = "[]"; + startIdxString = "startIdx"; + endIdxString = "endIdx"; + outNbElementString = "outNBElement"; + outBegIdxString = "outBegIdx"; + funcName = funcInfo->name; + } + + typeString = ""; + defaultParamName = ""; + + if( prototype ) + { + if( lookbackSignature ) + { + if( managedCPPCode ) + { + sprintf( gTempBuf, "%s%sint %s%sLookback( ", + prefix? prefix:"", + managedCPPDeclaration? " static ":"", + managedCPPDeclaration? "":"Core::", + funcName ); + } + else if( outputForJava ) + { + sprintf( gTempBuf, "%spublic int %sLookback( ", + prefix? prefix:"", + funcName ); + } + else + { + sprintf( gTempBuf, "%sint TA_%s_Lookback( ", + prefix? prefix:"", + funcName ); + } + print( out, gTempBuf ); + indent = (unsigned int)strlen(gTempBuf) - 2; + } + else + { + if( arrayToSubArrayCnvt ) + { + sprintf( gTempBuf, "%s%s( %s, ", prefix? prefix:"", funcName, startIdxString ); + } + else if( managedCPPCode ) + { + sprintf( gTempBuf, "%s%senum class %sRetCode %s%s( int %s,\n", + prefix? prefix:"", + managedCPPDeclaration? " static ":"", + managedCPPDeclaration? "":"Core::", + managedCPPDeclaration? "":"Core::", + funcName, + startIdxString ); + } + else if( outputForJava ) + { + sprintf( gTempBuf, "%spublic RetCode %s( int %s,\n", + prefix? prefix:"", + funcName, + startIdxString ); + } + else + { + if( inputIsSinglePrecision ) + sprintf( gTempBuf, "%sTA_RetCode TA_S_%s( int %s,\n", + prefix? prefix:"", + funcName, + startIdxString ); + else + sprintf( gTempBuf, "%sTA_RetCode TA_%s( int %s,\n", + prefix? prefix:"", + funcName, + startIdxString ); + } + print( out, gTempBuf ); + indent = (unsigned int)strlen(gTempBuf); + + if( outputForSWIG ) + indent -= 25; + else + indent -= 17; + + if( indent < 0 ) indent = 0; + + printIndent( out, indent ); + if( arrayToSubArrayCnvt ) + fprintf( out, "%s,\n", endIdxString ); + else + fprintf( out, "int %s,\n", endIdxString ); + } + } + else if( frame ) + { + indent = (unsigned int)strlen(funcName); + if( lookbackSignature ) + { + print( out, "%sTA_%s_Lookback(", prefix == NULL? "" : prefix, funcName ); + indent += 12; + + } + else + { + print( out, "%sTA_%s(\n", prefix == NULL? "" : prefix, funcName ); + indent += 4; + } + } + else if( validationCode ) + { + indent = 3; + } + else + { + printf( "printFunc has nothing to do?\n" ); + return; + } + + if( prefix ) + indent += (unsigned int)strlen(prefix); + if( frame ) + indent -= 5; + + if( frame && !lookbackSignature ) + { + printIndent( out, indent ); + fprintf( out, "%s,\n", startIdxString ); + printIndent( out, indent ); + fprintf( out, "%s,\n", endIdxString ); + } + + /* Go through all the input. */ + if( !lookbackSignature && !lookbackValidationCode ) + { + if( validationCode ) + { + printIndent( out, indent ); + fprintf( out, "#if !defined(_JAVA)\n" ); + } + + paramNb = 0; + for( i=0; i < funcInfo->nbInput; i++ ) + { + retCode = TA_GetInputParameterInfo( funcInfo->handle, + i, &inputParamInfo ); + + if( retCode != TA_SUCCESS ) + { + printf( "[%s] invalid 'input' information (%d,%d)\n", funcName, i, paramNb ); + return; + } + + paramName = inputParamInfo->paramName; + + switch( inputParamInfo->type ) + { + case TA_Input_Price: + /* Find how many component are requested. */ + j = 0; + if( inputParamInfo->flags & TA_IN_PRICE_TIMESTAMP ) + j++; + if( inputParamInfo->flags & TA_IN_PRICE_OPEN ) + j++; + if( inputParamInfo->flags & TA_IN_PRICE_HIGH ) + j++; + if( inputParamInfo->flags & TA_IN_PRICE_LOW ) + j++; + if( inputParamInfo->flags & TA_IN_PRICE_CLOSE ) + j++; + if( inputParamInfo->flags & TA_IN_PRICE_VOLUME ) + j++; + if( inputParamInfo->flags & TA_IN_PRICE_OPENINTEREST ) + j++; + + if( j == 0 ) + { + printf( "[%s] invalid 'price input' information (%d,%d)\n", funcName, i, paramNb ); + return; + } + + if( validationCode ) + { + printIndent( out, indent ); + fprintf( out, "/* Verify required price component. */\n" ); + printIndent( out, indent ); + fprintf( out, "if(" ); + k = 0; + if( inputParamInfo->flags & TA_IN_PRICE_TIMESTAMP ) + { + k++; + fprintf( out, "!inTimestamp%s", k != j? "||":")"); + } + + if( inputParamInfo->flags & TA_IN_PRICE_OPEN ) + { + k++; + fprintf( out, "!inOpen%s", k != j? "||":")"); + } + + if( inputParamInfo->flags & TA_IN_PRICE_HIGH ) + { + k++; + fprintf( out, "!inHigh%s", k != j? "||":")"); + } + + if( inputParamInfo->flags & TA_IN_PRICE_LOW ) + { + k++; + fprintf( out, "!inLow%s", k != j? "||":")"); + } + + if( inputParamInfo->flags & TA_IN_PRICE_CLOSE ) + { + k++; + fprintf( out, "!inClose%s", k != j? "||":")"); + } + + if( inputParamInfo->flags & TA_IN_PRICE_VOLUME ) + { + k++; + fprintf( out, "!inVolume%s", k != j? "||":")"); + } + + if( inputParamInfo->flags & TA_IN_PRICE_OPENINTEREST ) + { + k++; + fprintf( out, "!inOpenInterest%s", k != j? "||":")"); + } + + fprintf( out, "\n" ); + printIndent( out, indent ); + fprintf( out, " return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);\n" ); + print( out, "\n" ); + } + else + { + if( inputParamInfo->flags & TA_IN_PRICE_OPEN ) + { + printIndent( out, indent ); + if( frame ) + fprintf( out, "params->in[%d].data.inPrice.open, /*", paramNb ); + fprintf( out, "%-*s%s%s%s", + prototype? 12 : 0, + prototype? inputDoubleArrayType : "", + outputForSWIG?"":" ", + outputForSWIG? "IN_ARRAY /* inOpen */": + arrayToSubArrayCnvt? "gcnew SubArray(inOpen,0)" : "inOpen", + prototype? arrayBracket : "" ); + fprintf( out, "%s\n", frame? " */":"," ); + } + + if( inputParamInfo->flags & TA_IN_PRICE_HIGH ) + { + printIndent( out, indent ); + if( frame ) + fprintf( out, "params->in[%d].data.inPrice.high, /*", paramNb ); + fprintf( out, "%-*s%s%s%s", + prototype? 12 : 0, + prototype? inputDoubleArrayType : "", + outputForSWIG?"":" ", + outputForSWIG? "IN_ARRAY /* inHigh */": + arrayToSubArrayCnvt? "gcnew SubArray(inHigh,0)" : "inHigh", + prototype? arrayBracket : "" ); + fprintf( out, "%s\n", frame? " */":"," ); + } + + if( inputParamInfo->flags & TA_IN_PRICE_LOW ) + { + printIndent( out, indent ); + if( frame ) + fprintf( out, "params->in[%d].data.inPrice.low, /*", paramNb ); + fprintf( out, "%-*s%s%s%s", + prototype? 12 : 0, + prototype? inputDoubleArrayType : "", + outputForSWIG?"":" ", + outputForSWIG? "IN_ARRAY /* inLow */": + arrayToSubArrayCnvt? "gcnew SubArray(inLow,0)" : "inLow", + prototype? arrayBracket : "" ); + fprintf( out, "%s\n", frame? " */":"," ); + } + + if( inputParamInfo->flags & TA_IN_PRICE_CLOSE ) + { + printIndent( out, indent ); + if( frame ) + fprintf( out, "params->in[%d].data.inPrice.close, /*", paramNb ); + fprintf( out, "%-*s%s%s%s", + prototype? 12 : 0, + prototype? inputDoubleArrayType : "", + outputForSWIG?"":" ", + outputForSWIG? "IN_ARRAY /* inClose */": + arrayToSubArrayCnvt? "gcnew SubArray(inClose,0)" : "inClose", + prototype? arrayBracket : "" ); + fprintf( out, "%s\n", frame? " */":"," ); + } + + if( inputParamInfo->flags & TA_IN_PRICE_VOLUME ) + { + printIndent( out, indent ); + if( frame ) + fprintf( out, "params->in[%d].data.inPrice.volume, /*", paramNb ); + fprintf( out, "%-*s%s%s%s", + prototype? 12 : 0, + prototype? inputDoubleArrayType : "", + outputForSWIG?"":" ", + outputForSWIG? "IN_ARRAY /* inVolume */": + arrayToSubArrayCnvt? "gcnew SubArray(inVolume,0)" : "inVolume", + prototype? arrayBracket : "" ); + fprintf( out, "%s\n", frame? " */":"," ); + } + + if( inputParamInfo->flags & TA_IN_PRICE_OPENINTEREST ) + { + printIndent( out, indent ); + if( frame ) + fprintf( out, "params->in[%d].data.inPrice.openInterest, /*", paramNb ); + fprintf( out, "%-*s%s%s%s", + prototype? 12 : 0, + prototype? inputDoubleArrayType : "", + outputForSWIG?"":" ", + outputForSWIG? "IN_ARRAY /* inOpenInterest */": + arrayToSubArrayCnvt? "gcnew SubArray(inOpenInterest,0)" : "inOpenInterest", + prototype? arrayBracket : "" ); + fprintf( out, "%s\n", frame? " */":"," ); + } + } + break; + case TA_Input_Real: + typeString = inputDoubleArrayType; + defaultParamName = outputForSWIG? "IN_ARRAY": + arrayToSubArrayCnvt? "gcnew SubArray(inReal,0)" : "inReal"; + break; + case TA_Input_Integer: + typeString = inputIntArrayType; + defaultParamName = outputForSWIG? "IN_ARRAY":"inInteger"; + break; + default: + if( !paramName ) + paramName = "inParam"; + printf( "[%s,%s,%d] invalid 'input' type(%d)\n", + funcName, paramName, paramNb, + inputParamInfo->type ); + return; + } + + if( inputParamInfo->type != TA_Input_Price ) + { + printIndent( out, indent ); + if( validationCode ) + fprintf( out, "if( !%s ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);\n", inputParamInfo->paramName ); + else + { + + if( frame ) + fprintf( out, "params->in[%d].data.%s, /*", paramNb, defaultParamName ); + if( outputForSWIG ) + fprintf( out, "%-*s%s%s /* %s */", + prototype? 12 : 0, + prototype? typeString : "", + defaultParamName, + prototype? arrayBracket : "", + inputParamInfo->paramName ); + else + { + if( arrayToSubArrayCnvt ) + { + fprintf( out, "%-*sgcnew SubArray(%s,0)", + prototype? 12 : 0, "", + inputParamInfo->paramName ); + } + else + { + fprintf( out, "%-*s %s%s", + prototype? 12 : 0, + prototype? typeString : "", + inputParamInfo->paramName, + prototype? arrayBracket : "" ); + } + } + fprintf( out, "%s\n", frame? " */":"," ); + } + } + paramNb++; + } + + if( validationCode ) + { + printIndent( out, indent ); + fprintf( out, "#endif /* !defined(_JAVA)*/\n" ); + } + } + + /* Go through all the optional input */ + paramNb = 0; + lastParam = 0; + for( i=0; i < funcInfo->nbOptInput; i++ ) + { + excludeFromManaged = 0; + + if( (i == (funcInfo->nbOptInput-1)) && lookbackSignature ) + lastParam = 1; + + retCode = TA_GetOptInputParameterInfo( funcInfo->handle, + i, &optInputParamInfo ); + + if( retCode != TA_SUCCESS ) + { + printf( "[%s] invalid 'optional input' information\n", funcName ); + return; + } + + paramName = optInputParamInfo->paramName; + + /* Boolean to detect special TA_MAType enumeration. */ + if( optInputParamInfo->dataSet == TA_DEF_UI_MA_Method.dataSet ) + isMAType = 1; + else + isMAType = 0; + + switch( optInputParamInfo->type ) + { + case TA_OptInput_RealRange: + case TA_OptInput_RealList: + typeString = "double"; + defaultParamName = outputForSWIG? "OPT_REAL":"optInReal"; + break; + case TA_OptInput_IntegerRange: + typeString = "int"; + defaultParamName = outputForSWIG? "OPT_INT":"optInInteger"; + break; + case TA_OptInput_IntegerList: + if( isMAType && !frame ) + { + + typeString = managedCPPCode||outputForJava? "MAType":"TA_MAType"; + defaultParamName = outputForSWIG? "OPT_MATYPE":"optInMAType"; + excludeFromManaged = 1; + } + else + { + typeString = "int"; + defaultParamName = outputForSWIG? "OPT_INT":"optInInteger"; + } + break; + default: + if( !paramName ) + paramName = "optInParam"; + printf( "[%s,%s,%d] invalid 'optional input' type(%d)\n", + funcName, paramName, paramNb, + optInputParamInfo->type ); + return; + } + + if( arrayToSubArrayCnvt ) + typeString = ""; + + if( !paramName ) + paramName = defaultParamName; + + if( validationCode ) + { + if( excludeFromManaged ) + { + printIndent( out, indent ); + fprintf( out, "#if !defined(_MANAGED) && !defined(_JAVA)\n" ); + } + + printOptInputValidation( out, paramName, optInputParamInfo, lookbackValidationCode ); + + if( excludeFromManaged ) + { + printIndent( out, indent ); + fprintf( out, "#endif /* !defined(_MANAGED) && !defined(_JAVA)*/\n" ); + } + } + else + { + if( !(lookbackSignature && (i == 0 )) ) + printIndent( out, indent ); + + if( frame ) + { + fprintf( out, "%sparams->optIn[%d].data.%s%s /*", + isMAType?"(TA_MAType)":"", + paramNb, defaultParamName, + lookbackSignature&&lastParam?"":"," ); + } + if( outputForSWIG ) + fprintf( out, "%-*s %s /* %s */", + prototype? 13 : 0, + prototype? typeString : "", + defaultParamName, paramName ); + else + fprintf( out, "%-*s %s", + prototype? 13 : 0, + prototype? typeString : "", + paramName ); + + if( frame ) + { + if( lookbackSignature && lastParam ) + fprintf( out, "*/ )%s\n", semiColonNeeded? ";":"" ); + else + fprintf( out, "*/\n" ); + } + else + { + switch( optInputParamInfo->type ) + { + case TA_OptInput_RealRange: + if( lookbackSignature && lastParam ) + fprintf( out, " )%s ", semiColonNeeded? ";":"" ); + else + fprintf( out, "," ); + + if( ((TA_RealRange *)(optInputParamInfo->dataSet))->min == TA_REAL_MIN ) + fprintf( out, " /* From TA_REAL_MIN" ); + else + fprintf( out, " /* From %.*g", + ((TA_RealRange *)(optInputParamInfo->dataSet))->precision, + ((TA_RealRange *)(optInputParamInfo->dataSet))->min ); + + if( ((TA_RealRange *)(optInputParamInfo->dataSet))->max == TA_REAL_MAX ) + fprintf( out, " to TA_REAL_MAX */\n" ); + else + { + fprintf( out, " to %.*g%s */\n", + ((TA_RealRange *)(optInputParamInfo->dataSet))->precision, + ((TA_RealRange *)(optInputParamInfo->dataSet))->max, + optInputParamInfo->flags & TA_OPTIN_IS_PERCENT? " %":"" ); + } + break; + case TA_OptInput_IntegerRange: + if( lookbackSignature && lastParam ) + fprintf( out, " )%s ", semiColonNeeded? ";":"" ); + else + fprintf( out, "," ); + + if( ((TA_IntegerRange *)(optInputParamInfo->dataSet))->min == TA_INTEGER_MIN ) + fprintf( out, " /* From TA_INTEGER_MIN" ); + else + { + fprintf( out, " /* From %d", + ((TA_IntegerRange *)(optInputParamInfo->dataSet))->min ); + } + + if( ((TA_IntegerRange *)(optInputParamInfo->dataSet))->max == TA_INTEGER_MAX ) + fprintf( out, " to TA_INTEGER_MAX */\n" ); + else + { + fprintf( out, " to %d */\n", + ((TA_IntegerRange *)(optInputParamInfo->dataSet))->max ); + } + break; + default: + if( lookbackSignature && lastParam ) + fprintf( out, " )%s ", semiColonNeeded? ";":"" ); + else + fprintf( out, ",\n" ); + } + } + } + + paramNb++; + } + + if( lookbackSignature && (funcInfo->nbOptInput == 0) ) + { + if( frame || outputForJava ) + fprintf( out, " )%s\n", semiColonNeeded? ";":"" ); + else + fprintf( out, "void )%s\n", semiColonNeeded? ";":"" ); + } + + /* Go through all the output */ + if( lookbackSignature ) + { + if( !frame ) + print( out, "\n" ); + } + else if( !lookbackValidationCode ) + { + paramNb = 0; + lastParam = 0; + + if( !validationCode ) + { + printIndent( out, indent ); + if( frame ) + fprintf( out, "%s, ", outBegIdxString ); + else + fprintf( out, "%-*s %s%s", + prototype? 12 : 0, + prototype? outputIntParam : "", + prototype&&!managedCPPCode&&!outputForJava? "*" : "", + outBegIdxString ); + + fprintf( out, "%s\n", frame? "":"," ); + + printIndent( out, indent ); + if( frame ) + fprintf( out, "%s, ", outNbElementString ); + else + fprintf( out, "%-*s %s%s", + prototype? 12 : 0, + prototype? outputIntParam : "", + prototype&&!managedCPPCode&&!outputForJava? "*" : "", + outNbElementString ); + fprintf( out, "%s\n", frame? "":"," ); + } + + if( validationCode ) + { + printIndent( out, indent ); + fprintf( out, "#if !defined(_JAVA)\n" ); + } + + for( i=0; i < funcInfo->nbOutput; i++ ) + { + if( i == (funcInfo->nbOutput-1) ) + lastParam = 1; + + retCode = TA_GetOutputParameterInfo( funcInfo->handle, + i, &outputParamInfo ); + + if( retCode != TA_SUCCESS ) + { + printf( "[%s] invalid 'output' information\n", funcName ); + return; + } + + paramName = outputParamInfo->paramName; + + switch( outputParamInfo->type ) + { + case TA_Output_Real: + typeString = outputDoubleArrayType; + defaultParamName = outputForSWIG? "OUT_ARRAY":"outReal"; + break; + case TA_Output_Integer: + typeString = outputIntArrayType;; + defaultParamName = outputForSWIG? "OUT_ARRAY":"outInteger"; + break; + default: + if( !paramName ) + paramName = "outParam"; + printf( "[%s,%s,%d] invalid 'output' type(%d)\n", + funcName, paramName, paramNb, + outputParamInfo->type ); + return; + } + + if( !paramName ) + paramName = defaultParamName; + + if( validationCode ) + { + print( out, " if( !%s )\n", paramName ); + print( out, " return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);\n" ); + print( out, "\n" ); + } + else + { + printIndent( out, indent ); + if( frame ) + fprintf( out, "params->out[%d].data.%s%s /*", + paramNb, defaultParamName, + lastParam? "":"," ); + + if( outputForSWIG ) + fprintf( out, "%-*s *%s%s /* %s */", + prototype? 12 : 0, + prototype? typeString : "", + defaultParamName, + prototype? arrayBracket : "", + paramName ); + else + fprintf( out, "%-*s %s%s", + prototype? 12 : 0, + prototype? typeString : "", + paramName, + prototype? arrayBracket : "" ); + + if( !lastParam ) + fprintf( out, "%s\n", frame? " */":"," ); + else + { + fprintf( out, "%s )%s\n", + frame? " */":"", + semiColonNeeded? ";":"" ); + } + } + + paramNb++; + } + + if( validationCode ) + { + printIndent( out, indent ); + fprintf( out, "#endif /* !defined(_JAVA) */\n" ); + } + + } + +} + +static void printCallFrame( FILE *out, const TA_FuncInfo *funcInfo ) +{ + genPrefix = 1; + + printFrameHeader( out, funcInfo, 0 ); + print( out, "{\n" ); + printFunc( out, " return ", funcInfo, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); + print( out, "}\n" ); + + printFrameHeader( out, funcInfo, 1 ); + print( out, "{\n" ); + if( funcInfo->nbOptInput == 0 ) + print( out, " (void)params;\n" ); + printFunc( out, " return ", funcInfo, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); + print( out, "}\n" ); + + genPrefix = 0; +} + + +static void printFrameHeader( FILE *out, const TA_FuncInfo *funcInfo, unsigned int lookbackSignature ) +{ + if( lookbackSignature ) + { + print( out, "unsigned int TA_%s_FramePPLB( const TA_ParamHolderPriv *params )\n", funcInfo->name ); + } + else + { + print( out, "TA_RetCode TA_%s_FramePP( const TA_ParamHolderPriv *params,\n", funcInfo->name ); + print( out, " int startIdx,\n" ); + print( out, " int endIdx,\n" ); + print( out, " int *outBegIdx,\n" ); + print( out, " int *outNBElement )\n" ); + } +} + +static void printExternReferenceForEachFunction( const TA_FuncInfo *info, + void *opaqueData ) +{ + (void)opaqueData; /* Get ride of compiler warning */ + + fprintf( gOutGroupIdx_C->file, "extern const TA_FuncDef TA_DEF_%s;\n", info->name ); +} + +static void printPerGroupList( const char *groupName, + unsigned int index, + unsigned int isFirst, + unsigned int isLast + ) +{ + (void)isLast; /* Get ride of compiler warning. */ + (void)isFirst; /* Get ride of compiler warning. */ + + fprintf( gOutGroupIdx_C->file, + "\nconst TA_FuncDef *TA_PerGroupFunc_%d[] = {\n", index ); + + gCurrentGroupName = groupName; + TA_ForEachFunc( printFunctionAddress, NULL ); + fprintf( gOutGroupIdx_C->file, "NULL };\n" ); + + fprintf( gOutGroupIdx_C->file, + "#define SIZE_GROUP_%d ((sizeof(TA_PerGroupFunc_%d)/sizeof(const TA_FuncDef *))-1)\n", + index, index ); +} + +static void printFunctionAddress( const TA_FuncInfo *info, + void *opaqueData ) +{ + (void)opaqueData; /* Get ride of compiler warning. */ + + if( strcmp( info->group, gCurrentGroupName ) == 0 ) + fprintf( gOutGroupIdx_C->file, "&TA_DEF_%s,\n", info->name ); +} + +static void printGroupListAddress( const char *groupName, + unsigned int index, + unsigned int isFirst, + unsigned int isLast + ) +{ + (void)isFirst; /* Get ride of compiler warning. */ + + if( groupName == NULL ) + fprintf( gOutGroupIdx_C->file, "NULL%s", isLast? "" : "," ); + else fprintf( gOutGroupIdx_C->file, "&TA_PerGroupFunc_%d[0]%s\n", + index, isLast? "" : "," ); +} + +static void printGroupSize( const char *groupName, + unsigned int index, + unsigned int isFirst, + unsigned int isLast + ) +{ + (void)isFirst; /* Get ride of compiler warning. */ + (void)groupName; /* Get ride of compiler warning. */ + + fprintf( gOutGroupIdx_C->file, "SIZE_GROUP_%d%s\n", + index, isLast? "" : "," ); +} + +static void printGroupSizeAddition( const char *groupName, + unsigned int index, + unsigned int isFirst, + unsigned int isLast + ) +{ + (void)isFirst; /* Get ride of compiler warning. */ + (void)groupName; /* Get ride of compiler warning. */ + + fprintf( gOutGroupIdx_C->file, "SIZE_GROUP_%d%s", + index, isLast? ";" : "+\n" ); +} + +static void doFuncFile( const TA_FuncInfo *funcInfo ) +{ + + FileHandle *tempFile1; + + unsigned int useTempFile; + FILE *logicIn; + FILE *logicTmp; + char localBuf1[500]; + + #define TEMPLATE_PASS1 "..\\temp\\pass1.tmp" + #define TEMPLATE_PASS2 "..\\temp\\pass2.tmp" + #define TEMPLATE_DEFAULT "..\\src\\ta_abstract\\templates\\ta_x.c.template" + #define LOGIC_TEMP "..\\temp\\logic.tmp" + + /* Check if the file already exist. */ + sprintf( localBuf1, "..\\src\\ta_func\\ta_%s.c", funcInfo->name ); + + gOutFunc_C = fileOpen( localBuf1, NULL, FILE_READ); + if( gOutFunc_C == NULL ) + useTempFile = 0; + else + { + useTempFile = 1; + /* Create a temporary template using it. */ + tempFile1 = fileOpen( TEMPLATE_PASS1, NULL, FILE_WRITE|WRITE_ALWAYS ); + if( tempFile1 == NULL ) + { + printf( "Cannot create temporary file!\n" ); + return; + } + + createTemplate( gOutFunc_C, tempFile1 ); + + fileClose( tempFile1 ); + fileClose( gOutFunc_C ); + } + + /* Open the file using the template. */ + if( useTempFile ) + gOutFunc_C = fileOpen( TEMPLATE_PASS2, TEMPLATE_PASS1, FILE_WRITE|WRITE_ALWAYS ); + else + gOutFunc_C = fileOpen( TEMPLATE_PASS2, TEMPLATE_DEFAULT, FILE_WRITE|WRITE_ALWAYS ); + + if( gOutFunc_C == NULL ) + { + printf( "Cannot create [%s]\n", localBuf1 ); + return; + } + + /* Generate. 1st Pass */ + writeFuncFile( funcInfo ); + + fileClose( gOutFunc_C ); + + if( !useTempFile ) + { + /* When the file is new, the first pass becomes the + * original. + */ + if( !copyFile( TEMPLATE_PASS2, localBuf1 ) ) + { + printf( "Cannot copy %s to %s\n", TEMPLATE_PASS2, localBuf1 ); + return; + } + } + + /* Extract the TA function code in a temporary file */ + init_gToOpen( localBuf1, NULL ); + logicIn = fopen( gToOpen, "r" ); + if( !logicIn ) + { + printf( "Cannot open [%s] for extracting TA logic\n", localBuf1 ); + return; + } + init_gToOpen( LOGIC_TEMP, NULL ); + logicTmp = fopen( gToOpen, "w" ); + if( !logicTmp ) + { + fclose(logicIn); + printf( "Cannot open logic.tmp\n" ); + return; + } + extractTALogic( logicIn, logicTmp ); + fclose(logicIn); + fclose(logicTmp); + + /* Insert the TA function code in the single-precision frame + * using the template generated from the first pass. + */ + gOutFunc_C = fileOpen( localBuf1, TEMPLATE_PASS2, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + if( gOutFunc_C == NULL ) + { + printf( "Cannot complete 2nd pass with [%s]\n", localBuf1 ); + return; + } + + /* Duplicate the function, but using float this time */ + print( gOutFunc_C->file, "\n" ); + print( gOutFunc_C->file, "#define USE_SINGLE_PRECISION_INPUT\n" ); + print( gOutFunc_C->file, "#if !defined( _MANAGED ) && !defined( _JAVA )\n" ); + print( gOutFunc_C->file, " #undef TA_PREFIX\n" ); + print( gOutFunc_C->file, " #define TA_PREFIX(x) TA_S_##x\n" ); + print( gOutFunc_C->file, "#endif\n" ); + print( gOutFunc_C->file, "#undef INPUT_TYPE\n" ); + print( gOutFunc_C->file, "#define INPUT_TYPE float\n" ); + + print( gOutFunc_C->file, "#if defined( _MANAGED )\n" ); + printFunc( gOutFunc_C->file, NULL, funcInfo, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 ); + print( gOutFunc_C->file, "#elif defined( _JAVA )\n" ); + printFunc( gOutFunc_C->file, NULL, funcInfo, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0 ); + print( gOutFunc_C->file, "#else\n" ); + printFunc( gOutFunc_C->file, NULL, funcInfo, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ); + print( gOutFunc_C->file, "#endif\n" ); + + /* Insert the internal logic of the function */ + init_gToOpen( LOGIC_TEMP, NULL ); + logicTmp = fopen( gToOpen, "r" ); + if( !logicTmp ) + { + fileClose( gOutFunc_C ); + printf( "Cannot read open logic.tmp\n" ); + return; + } + while( fgets(gTempBuf,BUFFER_SIZE,logicTmp) ) + fputs( gTempBuf, gOutFunc_C->file ); + fclose(logicTmp); + print( gOutFunc_C->file, "\n" ); + + /* Add the suffix at the end of the file. */ + print( gOutFunc_C->file, "#if defined( _MANAGED )\n" ); + print( gOutFunc_C->file, "}}} // Close namespace TicTacTec.TA.Lib\n" ); + print( gOutFunc_C->file, "#endif\n" ); + + fileClose( gOutFunc_C ); + fileDelete( LOGIC_TEMP ); + fileDelete( TEMPLATE_PASS1 ); + fileDelete( TEMPLATE_PASS2 ); +} + +static void doDefsFile( void ) +{ + + FileHandle *tempFile; + FILE *out; + + #define FILE_TA_DEFS_H "..\\include\\ta_defs.h" + #define FILE_TA_DEFS_TMP "..\\temp\\ta_defs.tmp" + + /* Check if the file already exist. If not, this is an error. */ + gOutDefs_H = fileOpen( FILE_TA_DEFS_H, NULL, FILE_READ ); + if( gOutDefs_H == NULL ) + { + printf( "ta_defs.h must exist for being updated!\n" ); + exit(-1); + } + + /* Create the template. The template is just the original file content + * with the GENCODE SECTION emptied (so they can be re-generated) + */ + tempFile = fileOpen( FILE_TA_DEFS_TMP, NULL, FILE_WRITE|WRITE_ALWAYS ); + if( tempFile == NULL ) + { + printf( "Cannot create temporary file!\n" ); + exit(-1); + } + + createTemplate( gOutDefs_H, tempFile ); + + fileClose( tempFile ); + fileClose( gOutDefs_H ); + + /* Re-open the file using the template. */ + gOutDefs_H = fileOpen( FILE_TA_DEFS_H, FILE_TA_DEFS_TMP, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutDefs_H == NULL ) + { + printf( "Cannot create ta_defs.h\n" ); + exit(-1); + } + + /* Generate the GENCODE SECTION */ + out = gOutDefs_H->file; + + genPrefix = 1; + addUnstablePeriodEnum( out ); + print( out, "\n" ); + genPrefix = 0; + + fileClose( gOutDefs_H ); + fileDelete( FILE_TA_DEFS_TMP ); + #undef FILE_TA_DEFS_H + #undef FILE_TA_DEFS_TMP +} + +#ifdef _MSC_VER +static int createProjTemplate( FileHandle *in, FileHandle *out ) +{ + FILE *inFile; + FILE *outFile; + unsigned int skipSection; + unsigned int sectionDone; + unsigned int step; + + inFile = in->file; + outFile = out->file; + + skipSection = 0; + sectionDone = 0; + step = 0; + + while( fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + { + if( !skipSection ) + { + fputs( gTempBuf, outFile ); + if( !strstr( gTempBuf, "" ) ) + continue; + + skipSection = 1; + fputs( "%%%GENCODE%%%\n", outFile ); + } + else if( strstr( gTempBuf, "" ) ) + { + skipSection = 0; + fputs( gTempBuf, outFile ); + sectionDone++; + } + } + + return 0; +} + +static int createMSVCProjTemplate( FileHandle *in, FileHandle *out ) +{ + FILE *inFile; + FILE *outFile; + unsigned int skipSection; + + inFile = in->file; + outFile = out->file; + + skipSection = 0; + + while( !skipSection && fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + { + if( strstr( gTempBuf, "# Begin Source File") ) + skipSection = 1; + else + fputs( gTempBuf, outFile ); + } + + if( !skipSection ) + { + printf( "Unexpected end-of-file\n" ); + return -1; + } + + fputs( "%%%GENCODE%%%\n", outFile ); + + while( fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + { + if( strstr( gTempBuf, "# End Group" ) ) + { + /* Add the "non TA function" source files. */ + fprintf( outFile, "# Begin Source File\n"); + fprintf( outFile, "\n"); + fprintf( outFile, "SOURCE=..\\..\\..\\..\\src\\ta_func\\ta_utility.c\n"); + fprintf( outFile, "# End Source File\n"); + fprintf( outFile, "# End Group\n"); + break; + } + } + + while( fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + fputs( gTempBuf, outFile ); + + return 0; +} + +static int createVS2005ProjTemplate( FileHandle *in, FileHandle *out ) +{ + FILE *inFile; + FILE *outFile; + unsigned int skipSection; + + inFile = in->file; + outFile = out->file; + + skipSection = 0; + + while( !skipSection && fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + { + if( strstr( gTempBuf, "") ) + skipSection = 1; + else + fputs( gTempBuf, outFile ); + } + + if( !skipSection ) + { + printf( "Unexpected end-of-file. Missing \"\"\n" ); + return -1; + } + + + fputs( gTempBuf, outFile ); + + skipSection = 0; + + while( !skipSection && fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + { + if( strstr( gTempBuf, "" ) ) + { + /* Add the "non TA function" source files. */ + printVS2005FileNode( outFile, "utility" ); + fprintf( outFile, " \n"); + break; + } + } + + while( fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + fputs( gTempBuf, outFile ); + + return 0; +} + +static void printVS2005FileNode( FILE *out, const char *name ) +{ + fprintf( out, " \n" ); +/* + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); + fprintf( out, " \n" ); +*/ + fprintf( out, " \n" ); +} +#endif + +static int createTemplate( FileHandle *in, FileHandle *out ) +{ + FILE *inFile; + FILE *outFile; + char *inTheLinePtr; + unsigned int skipSection; + unsigned int sectionDone; + + inFile = in->file; + outFile = out->file; + + skipSection = 0; + sectionDone = 0; + while( fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + { + inTheLinePtr = gTempBuf; + /* Skip leading whitespace. */ + while( isspace(*inTheLinePtr) ) inTheLinePtr++; + + if( strncmp( inTheLinePtr, "/**** START GENCODE SECTION", 27 ) == 0 ) + { + skipSection = 1; + fputs( gTempBuf, outFile ); + fputs( "%%%GENCODE%%%\n", outFile ); + } + + else if( strncmp( inTheLinePtr, "/**** END GENCODE SECTION", 25 ) == 0 ) + { + if( skipSection ) + { + skipSection = 0; + sectionDone++; + } + } + + if( !skipSection ) + { + if( fputs( gTempBuf, outFile ) == EOF ) + { + printf( "Cannot write tmp file\n" ); + return -1; + } + } + } + + return 0; +} + +static void writeFuncFile( const TA_FuncInfo *funcInfo ) +{ + FILE *out; + + out = gOutFunc_C->file; + fprintf( out, "/* All code within this section is automatically\n" ); + fprintf( out, " * generated by gen_code. Any modification will be lost\n" ); + fprintf( out, " * next time gen_code is run.\n" ); + fprintf( out, " */\n" ); + + genPrefix = 1; + print( out, "\n" ); + print( out, "#if defined( _MANAGED )\n" ); + print( out, " #include \"TA-Lib-Core.h\"\n" ); + print( out, " #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError)\n" ); + print( out, " namespace TicTacTec { namespace TA { namespace Library {\n" ); + print( out, "#elif defined( _JAVA )\n" ); + print( out, " #include \"ta_defs.h\"\n" ); + print( out, " #include \"ta_java_defs.h\"\n" ); + print( out, " #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError)\n" ); + print( out, "#else\n" ); + print( out, " #include \n" ); + print( out, " #include \n" ); + print( out, " #include \"ta_func.h\"\n" ); + print( out, "#endif\n" ); + print( out, "\n" ); + print( out, "#ifndef TA_UTILITY_H\n" ); + print( out, " #include \"ta_utility.h\"\n" ); + print( out, "#endif\n" ); + print( out, "\n" ); + print( out, "#ifndef TA_MEMORY_H\n" ); + print( out, " #include \"ta_memory.h\"\n" ); + print( out, "#endif\n" ); + print( out, "\n" ); + print( out, "#define TA_PREFIX(x) TA_##x\n" ); + print( out, "#define INPUT_TYPE double\n" ); + print( out, "\n" ); + print( out, "#if defined( _MANAGED )\n" ); + printFunc( out, NULL, funcInfo, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 ); + print( out, "#elif defined( _JAVA )\n" ); + printFunc( out, NULL, funcInfo, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 ); + print( out, "#else\n" ); + printFunc( out, NULL, funcInfo, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); + print( out, "#endif\n" ); + + genPrefix = 0; + skipToGenCode( funcInfo->name, gOutFunc_C->file, gOutFunc_C->templateFile ); + + genPrefix = 1; + if( funcInfo->nbOptInput != 0 ) + print( out, "#ifndef TA_FUNC_NO_RANGE_CHECK\n" ); + printFunc( out, NULL, funcInfo, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 ); + if( funcInfo->nbOptInput != 0 ) + print( out, "#endif /* TA_FUNC_NO_RANGE_CHECK */\n" ); + else + print( out, "/* No parameters to validate. */\n" ); + + genPrefix = 0; + skipToGenCode( funcInfo->name, gOutFunc_C->file, gOutFunc_C->templateFile ); + + genPrefix = 1; + fprintf( out, "/*\n" ); + printFuncHeaderDoc( out, funcInfo, " * " ); + fprintf( out, " */\n" ); + print( out, "\n" ); + print( out, "#if defined( _MANAGED ) && defined( USE_SUBARRAY )\n" ); + printFunc( out, NULL, funcInfo, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 ); + print( out, "#elif defined( _MANAGED )\n" ); + printFunc( out, NULL, funcInfo, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ); + print( out, "#elif defined( _JAVA )\n" ); + + /* Handle special case to avoid duplicate definition of min,max */ + if( strcmp( funcInfo->camelCaseName, "Min" ) == 0 ) + print( out, "#undef min\n" ); + else if( strcmp( funcInfo->camelCaseName, "Max" ) == 0 ) + print( out, "#undef max\n" ); + + printFunc( out, NULL, funcInfo, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ); + print( out, "#else\n" ); + printFunc( out, NULL, funcInfo, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); + print( out, "#endif\n" ); + + genPrefix = 0; + skipToGenCode( funcInfo->name, gOutFunc_C->file, gOutFunc_C->templateFile ); + + genPrefix = 1; + print( out, "\n" ); + print( out, "#ifndef TA_FUNC_NO_RANGE_CHECK\n" ); + print( out, "\n" ); + print( out, " /* Validate the requested output range. */\n" ); + print( out, " if( startIdx < 0 )\n" ); + print( out, " return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex);\n" ); + print( out, " if( (endIdx < 0) || (endIdx < startIdx))\n" ); + print( out, " return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex);\n" ); + print( out, "\n" ); + /* Generate the code for checking the parameters. + * Also generates the code for setting up the + * default values. + */ + printFunc( out, NULL, funcInfo, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); + + print( out, "#endif /* TA_FUNC_NO_RANGE_CHECK */\n" ); + print( out, "\n" ); + + skipToGenCode( funcInfo->name, gOutFunc_C->file, gOutFunc_C->templateFile ); + + /* Put a marker who is going to be used in the second pass */ + fprintf( out, "%%%%%%GENCODE%%%%%%\n" ); +} + +static void printOptInputValidation( FILE *out, + const char *name, + const TA_OptInputParameterInfo *optInputParamInfo, + int lookbackValidationCode /* Boolean */ ) +{ + int minInt, maxInt; + double minReal, maxReal; + unsigned int i; + int isMAType; + + const TA_RealList *realList; + const TA_IntegerList *integerList; + const TA_RealRange *realRange; + const TA_IntegerRange *integerRange; + + minInt = maxInt = (int)0; + minReal = maxReal = (double)0.0; + + switch( optInputParamInfo->type ) + { + case TA_OptInput_RealRange: + realRange = (const TA_RealRange *)optInputParamInfo->dataSet; + minReal = realRange->min; + maxReal = realRange->max; + break; + case TA_OptInput_IntegerRange: + integerRange = (const TA_IntegerRange *)optInputParamInfo->dataSet; + minInt = integerRange->min; + maxInt = integerRange->max; + break; + case TA_OptInput_RealList: + /* Go through the list to find the min/max. */ + realList = (const TA_RealList *)optInputParamInfo->dataSet; + minReal = realList->data[0].value; + maxReal = realList->data[0].value; + for( i=0; i < realList->nbElement; i++ ) + { + minReal = min( realList->data[i].value, minReal ); + maxReal = max( realList->data[i].value, maxReal ); + } + break; + case TA_OptInput_IntegerList: + /* Go through the list to find the min/max. */ + integerList = (const TA_IntegerList *)optInputParamInfo->dataSet; + minInt = integerList->data[0].value; + maxInt = integerList->data[0].value; + for( i=0; i < integerList->nbElement; i++ ) + { + minInt = min( integerList->data[i].value, minInt ); + maxInt = max( integerList->data[i].value, maxInt ); + } + break; + } + + /* Boolean to detect special TA_MAType enumeration. */ + if( optInputParamInfo->dataSet == TA_DEF_UI_MA_Method.dataSet ) + isMAType = 1; + else + isMAType = 0; + + switch( optInputParamInfo->type ) + { + case TA_OptInput_RealList: + print( out, " /* min/max are checked for %s. */\n", name ); + case TA_OptInput_RealRange: + print( out, " if( %s == TA_REAL_DEFAULT )\n", name ); + print( out, " %s = %s;\n", name, doubleToStr(optInputParamInfo->defaultValue) ); + print( out, " else if( (%s < %s) ||", name, doubleToStr(minReal) ); + print( out, " (%s > %s) )\n", name, doubleToStr(maxReal) ); + break; + case TA_OptInput_IntegerRange: + print( out, " /* min/max are checked for %s. */\n", name ); + case TA_OptInput_IntegerList: + print( out, " if( (int)%s == TA_INTEGER_DEFAULT )\n", name ); + print( out, " %s = %s%d;\n", name, isMAType?"(TA_MAType)":"", (int)optInputParamInfo->defaultValue ); + print( out, " else if( ((int)%s < %d) || ((int)%s > %d) )\n", + name, minInt, + name, maxInt ); + break; + } + + if( lookbackValidationCode ) + print( out, " return -1;\n" ); + else + print( out, " return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);\n" ); + + print( out, "\n" ); +} + + +static int skipToGenCode( const char *dstName, FILE *out, FILE *templateFile ) +{ + unsigned int headerWritten = 0; + + while( fgets( gTempBuf, BUFFER_SIZE, templateFile ) ) + { + if( strncmp( gTempBuf, "%%%GENCODE%%%", 13 ) == 0 ) + { + headerWritten = 1; + break; + } + if( out && (fputs( gTempBuf, out ) == EOF) ) + { + printf( "Cannot write to [%s]\n", dstName ); + return -1; + } + } + + if( !headerWritten ) + { + printf( "Line with string %%%%%%GENCODE%%%%%% Missing in [%s]", dstName ); + return -1; + } + + return 0; +} + +static void printFuncHeaderDoc( FILE *out, + const TA_FuncInfo *funcInfo, + const char *prefix ) +{ + TA_RetCode retCode; + unsigned int paramNb; + const char *paramName; + const char *defaultParamName; + const TA_InputParameterInfo *inputParamInfo; + const TA_OptInputParameterInfo *optInputParamInfo; + const TA_OutputParameterInfo *outputParamInfo; + int first; + + fprintf( out, "%sTA_%s - %s\n", prefix, funcInfo->name, funcInfo->hint ); + fprintf( out, prefix ); + + fprintf( out, "\n" ); + fprintf( out, "%sInput = ", prefix ); + for( paramNb=0; paramNb < funcInfo->nbInput; paramNb++ ) + { + retCode = TA_GetInputParameterInfo( funcInfo->handle, + paramNb, &inputParamInfo ); + + if( retCode != TA_SUCCESS ) + { + printf( "[%s] invalid 'input' information\n", funcInfo->name ); + return; + } + + switch( inputParamInfo->type ) + { + case TA_Input_Price: + first = 1; + #define PRICE_PARAM(upperParam,lowerParam) \ + { \ + if( inputParamInfo->flags & TA_IN_PRICE_##upperParam ) \ + { \ + if( !first ) fprintf( out, ", " ); \ + fprintf( out, lowerParam ); \ + first = 0; \ + } \ + } + + PRICE_PARAM( OPEN, "Open" ); + PRICE_PARAM( HIGH, "High" ); + PRICE_PARAM( LOW, "Low" ); + PRICE_PARAM( CLOSE, "Close" ); + PRICE_PARAM( VOLUME, "Volume" ); + PRICE_PARAM( OPENINTEREST, "OpenInterest" ); + PRICE_PARAM( TIMESTAMP, "Timestamp" ); + + #undef PRICE_PARAM + + break; + case TA_Input_Integer: + fprintf( out, "int" ); + break; + case TA_Input_Real: + fprintf( out, "double" ); + break; + } + if( paramNb+1 == funcInfo->nbInput ) + fprintf( out, "\n" ); + else + fprintf( out, ", " ); + } + + fprintf( out, "%sOutput = ", prefix ); + for( paramNb=0; paramNb < funcInfo->nbOutput; paramNb++ ) + { + retCode = TA_GetOutputParameterInfo( funcInfo->handle, + paramNb, &outputParamInfo ); + + if( retCode != TA_SUCCESS ) + { + printf( "[%s] invalid 'output' information\n", funcInfo->name ); + return; + } + + switch( outputParamInfo->type ) + { + case TA_Output_Real: + fprintf( out, "double" ); + break; + case TA_Output_Integer: + fprintf( out, "int" ); + break; + } + if( paramNb+1 == funcInfo->nbOutput ) + fprintf( out, "\n" ); + else + fprintf( out, ", " ); + } + + if( funcInfo->nbOptInput != 0 ) + { + fprintf( out, "%s\n", prefix ); + fprintf( out, "%sOptional Parameters\n", prefix ); + fprintf( out, "%s-------------------\n", prefix ); + + for( paramNb=0; paramNb < funcInfo->nbOptInput; paramNb++ ) + { + retCode = TA_GetOptInputParameterInfo( funcInfo->handle, + paramNb, &optInputParamInfo ); + + if( retCode != TA_SUCCESS ) + { + printf( "[%s] invalid 'optional input' information\n", funcInfo->name ); + return; + } + + paramName = optInputParamInfo->paramName; + + switch( optInputParamInfo->type ) + { + case TA_OptInput_RealRange: + case TA_OptInput_RealList: + defaultParamName = "optInReal"; + break; + case TA_OptInput_IntegerRange: + case TA_OptInput_IntegerList: + defaultParamName = "optInInteger"; + break; + default: + if( !paramName ) + paramName = "optInParam"; + printf( "[%s,%s,%d] invalid 'optional input' type(%d)\n", + funcInfo->name, paramName, paramNb, + optInputParamInfo->type ); + return; + } + + if( !paramName ) + paramName = defaultParamName; + + fprintf( out, "%s%s:", prefix, paramName ); + switch( optInputParamInfo->type ) + { + case TA_OptInput_RealRange: + if( ((TA_RealRange *)(optInputParamInfo->dataSet))->min == TA_REAL_MIN ) + fprintf( out, "(From TA_REAL_MIN" ); + else + { + fprintf( out, "(From %.*g", + ((TA_RealRange *)(optInputParamInfo->dataSet))->precision, + ((TA_RealRange *)(optInputParamInfo->dataSet))->min ); + } + + if( ((TA_RealRange *)(optInputParamInfo->dataSet))->max == TA_REAL_MAX ) + fprintf( out, " to TA_REAL_MAX)\n" ); + else + { + fprintf( out, " to %.*g%s)\n", + ((TA_RealRange *)(optInputParamInfo->dataSet))->precision, + ((TA_RealRange *)(optInputParamInfo->dataSet))->max, + optInputParamInfo->flags & TA_OPTIN_IS_PERCENT? " %":"" ); + } + break; + case TA_OptInput_IntegerRange: + if( ((TA_IntegerRange *)(optInputParamInfo->dataSet))->min == TA_INTEGER_MIN ) + fprintf( out, "(From TA_INTEGER_MIN" ); + else + { + fprintf( out, "(From %d", + ((TA_IntegerRange *)(optInputParamInfo->dataSet))->min ); + } + + if( ((TA_IntegerRange *)(optInputParamInfo->dataSet))->max == TA_INTEGER_MAX ) + fprintf( out, " to TA_INTEGER_MAX)\n" ); + else + { + fprintf( out, " to %d)\n", + ((TA_IntegerRange *)(optInputParamInfo->dataSet))->max ); + } + break; + default: + fprintf( out, "\n" ); + } + fprintf( out, "%s %s\n", prefix, optInputParamInfo->hint ); + fprintf( out, "%s\n", prefix ); + } + } + + fprintf( out, "%s\n", prefix ); +} + +static int addUnstablePeriodEnum( FILE *out ) +{ + TA_RetCode retCode; + unsigned int id; + + print( out, "\n" ); + print( out, "ENUM_BEGIN( FuncUnstId )\n"); + + /* Enumerate the function having an "unstable period". Give + * to each a unique identifier. + */ + id = 0; + retCode = TA_ForEachFunc( doForEachUnstableFunction, &id ); + + print( out, " ENUM_DEFINE( TA_FUNC_UNST_ALL, FuncUnstAll),\n"); + print( out, " ENUM_DEFINE( TA_FUNC_UNST_NONE, FuncUnstNone) = -1\n" ); + print( out, "ENUM_END( FuncUnstId )\n"); + + if( retCode != TA_SUCCESS ) + return -1; + + return 0; +} + +static int gen_retcode( void ) +{ + FileHandle *inHdr; + char *ptr1, *ptr2; + int step1Done; + int retValue; + TA_RetCode retCodeValue; + char *retCodeEnum, *retCodeInfo; + + retValue = -1; + + /* Create "ta_retcode.c" */ + gOutRetCode_C = fileOpen( "..\\src\\ta_common\\ta_retcode.c", + "..\\src\\ta_abstract\\templates\\ta_retcode.c.template", + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutRetCode_C == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + /* Create "ta_retcode.csv" */ + gOutRetCode_CSV = fileOpen( "..\\src\\ta_common\\ta_retcode.csv", + NULL, + FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + + if( gOutRetCode_CSV == NULL ) + { + fileClose( gOutRetCode_C ); + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + inHdr = fileOpen( "..\\include\\ta_defs.h", + NULL, + FILE_READ ); + if( inHdr == NULL ) + { + fileClose( gOutRetCode_C ); + fileClose( gOutRetCode_CSV ); + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + + step1Done = 0; + while( fgets( gTempBuf, sizeof( gTempBuf ), inHdr->file ) ) + { + if( !step1Done ) + { + if( strstr( gTempBuf, "ENUM_BEGIN( RetCode )" ) != NULL ) + step1Done = 1; + } + else + { + if( strstr( gTempBuf, "TA_UNKNOWN_ERR" ) != NULL ) + { + retValue = 0; + goto gen_retcode_exit; + } + + ptr1 = strstr( gTempBuf, "/*" ); + ptr2 = strstr( gTempBuf, "/***" ); + if( ptr1 && !ptr2 ) + { + ptr1 += 2; + retCodeValue = (TA_RetCode)atoi(ptr1); + ptr1 = strstr( ptr1, "TA_" ); + if( !ptr1 ) + { + printf( "Can't find TA_" ); + goto gen_retcode_exit; + } + retCodeEnum = ptr1; + + retCodeInfo = NULL; + while( isdigit(*ptr1) || isalpha(*ptr1) || *ptr1 == '_' ) + ptr1++; + if( *ptr1 != '\0' ) + { + *ptr1 = '\0'; + ptr1++; + if( *ptr1 != '\0' ) + { + retCodeInfo = strstr( ptr1, "/* " ); + if( retCodeInfo ) + { + retCodeInfo += 3; + ptr1 = strstr( retCodeInfo, "*/" ); + if( ptr1 == NULL ) + retCodeInfo = NULL; + else + *ptr1 = '\0'; + } + } + } + + if( !retCodeInfo ) + retCodeInfo = "No Info"; + + strcpy( gTempBuf, retCodeEnum ); + ptr1 = trimWhitespace( gTempBuf ); + fprintf( gOutRetCode_C->file, " {(TA_RetCode)%d,\"%s\",", retCodeValue, ptr1 ); + fprintf( gOutRetCode_CSV->file, "%d,%s", retCodeValue, ptr1 ); + strcpy( gTempBuf, retCodeInfo ); + ptr1 = trimWhitespace( gTempBuf ); + fprintf( gOutRetCode_C->file, "\"%s\"},\n", ptr1 ); + fprintf( gOutRetCode_CSV->file, ",%s\n", ptr1 ); + } + } + } + +gen_retcode_exit: + fileClose( inHdr ); + fileClose( gOutRetCode_C ); + fileClose( gOutRetCode_CSV ); + + return retValue; /* Success. */ +} + +const char *doubleToStr( double value ) +{ + int length; + int i, outIdx; + sprintf( gTempDoubleToStr, "%e", value ); + + /* Remove extra "0" added by Microsoft in the + * exponential part. + */ + length = (int)strlen( gTempDoubleToStr ); + outIdx = 0; + for( i=0; i < length; i++ ) + { + /* Will skip two leading zero in the exponent */ + if( (i >= 2) && + (toupper(gTempDoubleToStr[i-2]) == 'E') && + ((gTempDoubleToStr[i-1] == '+')||(gTempDoubleToStr[i-1] == '-')) && + (gTempDoubleToStr[i] == '0') && + (gTempDoubleToStr[i+1] == '0') && + (isdigit(gTempDoubleToStr[i+2])) ) + { + i++; + continue; + } + + /* Will skip one leading zero in the exponent */ + if( (i >= 2) && + (toupper(gTempDoubleToStr[i-2]) == 'E') && + ((gTempDoubleToStr[i-1] == '+')||(gTempDoubleToStr[i-1] == '-')) && + (gTempDoubleToStr[i] == '0') && + (isdigit(gTempDoubleToStr[i+1]))) + { + continue; + } + + gTempDoubleToStr[outIdx++] = gTempDoubleToStr[i]; + } + gTempDoubleToStr[outIdx] = '\0'; + + return gTempDoubleToStr; +} + +static void cnvtToUpperCase( char *str ) +{ + char c; + + if( !str ) return; + + c = *str; + while( c != '\0' ) + { + *str = (char)toupper(c); + str++; + c = *str; + } +} + +static char *trimWhitespace( char *str ) +{ + int i; + + if( !str ) return str; + + while( isspace(*str) ) str++; + if( *str == '\0' ) return str; + + for( i=(int)strlen(str)-1; i >= 0; i-- ) + { + if( !isspace(str[i]) ) + return str; + str[i] = '\0'; + } + + return str; +} + +static void cnvtChar( char *str, char from, char to ) +{ + char c; + + if( !str ) return; + + c = *str; + while( c != '\0' ) + { + if( c == from ) *str = to; + str++; + c = *str; + } +} + +#ifdef _MSC_VER +static void printExcelGlueCode( FILE *out, const TA_FuncInfo *funcInfo ) +{ + /*fprintf( out, "#include \"ta_%s.c\"\n", funcInfo->name ); + fprintf( out, "#include \"ta_%s_frame.c\"\n", funcInfo->name ); */ + int nbParam; + unsigned int i; + TA_RetCode retCode; + const TA_InputParameterInfo *inputParamInfo; + + nbParam = funcInfo->nbOptInput; + + for( i=0; i < funcInfo->nbInput; i++ ) + { + retCode = TA_GetInputParameterInfo( funcInfo->handle, + i, &inputParamInfo ); + + if( retCode != TA_SUCCESS ) + { + printf( "[%s] invalid 'input' information (%d,%d)\n", funcInfo->name, i, nbParam ); + return; + } + + if( inputParamInfo->type != TA_Input_Price ) + nbParam++; + else + { + if( inputParamInfo->flags & TA_IN_PRICE_TIMESTAMP ) + nbParam++; + if( inputParamInfo->flags & TA_IN_PRICE_OPEN ) + nbParam++; + if( inputParamInfo->flags & TA_IN_PRICE_HIGH ) + nbParam++; + if( inputParamInfo->flags & TA_IN_PRICE_LOW ) + nbParam++; + if( inputParamInfo->flags & TA_IN_PRICE_CLOSE ) + nbParam++; + if( inputParamInfo->flags & TA_IN_PRICE_VOLUME ) + nbParam++; + if( inputParamInfo->flags & TA_IN_PRICE_OPENINTEREST ) + nbParam++; + } + } + + fprintf( out, "EXCEL_GLUE_CODE_WITH_%d_PARAM(%s)\n", + nbParam, + funcInfo->name ); +} +#endif + + +static void extractTALogic( FILE *inFile, FILE *outFile ) +{ + int i, length, nbCodeChar; + int commentBlock, commentFirstCharFound, outIdx; + + #define START_DELIMITATOR "/**** END GENCODE SECTION 3" + #define STOP_DELIMITATOR "/**** START GENCODE SECTION 5" + + /* Find the begining of the function */ + while( fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + { + length = (int)strlen(gTempBuf); + if( length > BUFFER_SIZE ) + return; + + if( strncmp( gTempBuf, START_DELIMITATOR, strlen(START_DELIMITATOR) ) == 0) + break; + } + + /* Copy until the end of the function. + * At the same time, eliminate all empty line and + * comments to avoid confusion with original code. + */ + commentBlock = 0; + commentFirstCharFound = 0; + while( fgets( gTempBuf, BUFFER_SIZE, inFile ) ) + { + length = (int)strlen(gTempBuf); + if( length > BUFFER_SIZE ) + return; + + if( strncmp( gTempBuf, STOP_DELIMITATOR, strlen(STOP_DELIMITATOR) ) == 0) + break; + + /* Process the whole line and put it in gTempBuf2 */ + outIdx = 0; + nbCodeChar = 0; + for( i=0; i < length; i++ ) + { + if( !commentBlock ) + { + if( !commentFirstCharFound ) + { + if( gTempBuf[i] == '/' ) + commentFirstCharFound = 1; + else + { + gTempBuf2[outIdx++] = gTempBuf[i]; + if( !isspace(gTempBuf[i]) ) + nbCodeChar++; + } + } + else + { + commentFirstCharFound = 0; + if( gTempBuf[i] == '*' ) + commentBlock = 1; + else + { + gTempBuf2[outIdx++] = '/'; + nbCodeChar++; + if( gTempBuf[i] == '/' ) + commentFirstCharFound = 1; + else + { + gTempBuf2[outIdx++] = gTempBuf[i]; + if( !isspace(gTempBuf[i]) ) + nbCodeChar++; + } + } + } + } + else + { + if( !commentFirstCharFound ) + { + if( gTempBuf[i] == '*' ) + commentFirstCharFound = 1; + } + else + { + commentFirstCharFound = 0; + if( gTempBuf[i] == '/' ) + commentBlock = 0; + else if( gTempBuf[i] == '*' ) + commentFirstCharFound = 1; + } + } + } + + if( nbCodeChar != 0 ) + { + gTempBuf2[outIdx] = '\0'; + fputs( "/* Generated */ ", outFile ); + fputs( gTempBuf2, outFile ); + } + } +} + +static int copyFile( const char *src, const char *dest ) +{ + FILE *in; + FILE *out; + + init_gToOpen( src, NULL ); + in = fopen( gToOpen, "rb" ); + if( !in ) + return 0; + + init_gToOpen( dest, NULL ); + out = fopen( gToOpen, "wb" ); + if( !out ) + { + fclose( in ); + return 0; + } + + while( fgets( gTempBuf, BUFFER_SIZE, in ) ) + { + fputs(gTempBuf,out); + } + + fclose(in); + fclose(out); + return 1; +} + +static int areFileSame( const char *file1, const char *file2 ) +{ + /* Text comparison of both files */ + unsigned int i; + + FILE *f1; + FILE *f2; + + + init_gToOpen( file1, NULL ); + f1 = fopen( gToOpen, "r" ); + if( !f1 ) + return 0; + + init_gToOpen( file2, NULL ); + f2 = fopen( gToOpen, "r" ); + if( !f2 ) + { + fclose( f1 ); + return 0; + } + + memset( gTempBuf, 0, sizeof(gTempBuf ) ); + memset( gTempBuf2, 0, sizeof(gTempBuf2) ); + + while( fgets( gTempBuf, BUFFER_SIZE, f1 ) ) + { + if( !fgets( gTempBuf2, BUFFER_SIZE, f2 ) ) + { + fclose(f1); + fclose(f2); + return 0; + } + + for( i=0; i < sizeof(gTempBuf); i++ ) + { + if( gTempBuf[i] != gTempBuf2[i] ) + { + fclose(f1); + fclose(f2); + return 0; + } + if( gTempBuf[i] == '\0' ) + i = sizeof(gTempBuf); + } + + memset( gTempBuf, 0, sizeof(gTempBuf ) ); + memset( gTempBuf2, 0, sizeof(gTempBuf2) ); + } + + if( fgets( gTempBuf2, BUFFER_SIZE, f2 ) ) + { + fclose(f1); + fclose(f2); + return 0; + } + + fclose(f1); + fclose(f2); + return 1; +} + + +static void appendToFunc( FILE *out ) +{ + fprintf( out, "\n" ); + fprintf( out, "/* Some TA functions takes a certain amount of input data\n" ); + fprintf( out, " * before stabilizing and outputing meaningful data. This is\n" ); + fprintf( out, " * a behavior pertaining to the algo of some TA functions and\n" ); + fprintf( out, " * is not particular to the TA-Lib implementation.\n" ); + fprintf( out, " * TA-Lib allows you to automatically strip off these unstabl\n" ); + fprintf( out, " * data from your output and from any internal processing.\n" ); + fprintf( out, " * (See documentation for more info)\n" ); + fprintf( out, " *\n" ); + fprintf( out, " * Examples:\n" ); + fprintf( out, " * TA_SetUnstablePeriod( TA_FUNC_UNST_EMA, 30 );\n" ); + fprintf( out, " * Always strip off 30 price bar for the TA_EMA function.\n" ); + fprintf( out, " *\n" ); + fprintf( out, " * TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 30 );\n" ); + fprintf( out, " * Always strip off 30 price bar from ALL functions\n" ); + fprintf( out, " * having an unstable period.\n" ); + fprintf( out, " *\n" ); + fprintf( out, " * See ta_defs.h for the enumeration TA_FuncUnstId\n" ); + fprintf( out, " */\n" ); + fprintf( out, "\n" ); + fprintf( out, "TA_RetCode TA_SetUnstablePeriod( TA_FuncUnstId id,\n" ); + fprintf( out, " unsigned int unstablePeriod );\n" ); + fprintf( out, "\n" ); + fprintf( out, "unsigned int TA_GetUnstablePeriod( TA_FuncUnstId id );\n" ); + fprintf( out, "\n" ); + fprintf( out, "/* You can change slightly the behavior of the TA functions\n" ); + fprintf( out, " * by requesting compatibiliy with some existing software.\n" ); + fprintf( out, " *\n" ); + fprintf( out, " * By default, the behavior is as close as the original \n" ); + fprintf( out, " * author of the TA functions intend it to be.\n" ); + fprintf( out, " *\n" ); + fprintf( out, " * See ta_defs.h for the enumeration TA_Compatibility.\n" ); + fprintf( out, " */\n" ); + fprintf( out, "TA_RetCode TA_SetCompatibility( TA_Compatibility value );\n" ); + fprintf( out, "TA_Compatibility TA_GetCompatibility( void );\n" ); + fprintf( out, "\n" ); + fprintf( out, "/* Candlesticks struct and functions\n" ); + fprintf( out, " * Because candlestick patterns are subjective, it is necessary \n" ); + fprintf( out, " * to allow the user to specify what should be the meaning of \n" ); + fprintf( out, " * 'long body', 'short shadows', etc.\n" ); + fprintf( out, " */\n" ); + fprintf( out, "\n" ); + fprintf( out, "/* Call TA_SetCandleSettings to set that when comparing a candle \n" ); + fprintf( out, " * basing on settingType it must be compared with the average \n" ); + fprintf( out, " * of the last avgPeriod candles' rangeType multiplied by factor.\n" ); + fprintf( out, " * This setting is valid until TA_RestoreCandleDefaultSettings is called\n" ); + fprintf( out, " */\n" ); + fprintf( out, "TA_RetCode TA_SetCandleSettings( TA_CandleSettingType settingType, \n" ); + fprintf( out, " TA_RangeType rangeType, \n" ); + fprintf( out, " int avgPeriod, \n" ); + fprintf( out, " double factor );\n" ); + fprintf( out, "\n" ); + fprintf( out, "/* Call TA_RestoreCandleDefaultSettings after using custom settings \n" ); + fprintf( out, " * to restore the default settings for the specified settingType\n" ); + fprintf( out, " */\n" ); + fprintf( out, "TA_RetCode TA_RestoreCandleDefaultSettings( TA_CandleSettingType settingType );\n" ); +} + +#ifdef _MSC_VER +void genJavaCodePhase1( const TA_FuncInfo *funcInfo ) +{ + fprintf( gOutJavaDefs_H->file, "#define TA_%s_Lookback %c%sLookback\n", funcInfo->name, tolower(funcInfo->camelCaseName[0]), &funcInfo->camelCaseName[1] ); + fprintf( gOutJavaDefs_H->file, "#define TA_%s %c%s\n", funcInfo->name, tolower(funcInfo->camelCaseName[0]), &funcInfo->camelCaseName[1] ); +} + +void genJavaCodePhase2( const TA_FuncInfo *funcInfo ) +{ + FILE *logicTmp; + char buffer[500]; + int idx, again; + static int firstTime = 1; + + if( firstTime == 1 ) + { + /* Clean-up jus tin case. */ + fileDelete( "..\\temp\\CoreJavaCode1.tmp" ); + fileDelete( "..\\temp\\CoreJavaCode2.tmp" ); + firstTime = 0; + } + + init_gToOpen( "..\\temp\\CoreJavaCode1.tmp", NULL ); + logicTmp = fopen( gToOpen, "w" ); + if( !logicTmp ) + { + printf( "Cannot open CoreJavaCode1.tmp\n" ); + return; + } + fprintf( logicTmp, "#include \"ta_java_defs.h\"\n" ); + fclose(logicTmp); + + sprintf( buffer, "..\\src\\tools\\gen_code\\mcpp -c -+ -z -P -I..\\src\\ta_common -I..\\src\\ta_abstract -I..\\include -D _JAVA ..\\src\\ta_func\\TA_%s.c >>..\\temp\\CoreJavaCode1.tmp ", funcInfo->name); + system( buffer ); + + sprintf( buffer, "..\\src\\tools\\gen_code\\mcpp -c -+ -z -P -I..\\src\\ta_common -I..\\src\\ta_abstract -I..\\include -D _JAVA ..\\temp\\CoreJavaCode1.tmp >..\\temp\\CoreJavaCode2.tmp " ); + system( buffer ); + + /* Append the output of the C pre-processor to the Core.Java file. */ + init_gToOpen( "..\\temp\\CoreJavaCode2.tmp", NULL ); + logicTmp = fopen( gToOpen, "r" ); + if( !logicTmp ) + { + printf( "Cannot open CoreJavaCode2.tmp\n" ); + return; + } + while( fgets(gTempBuf,BUFFER_SIZE,logicTmp) ) + { + /* Remove empty lines and lines with only a ';' */ + idx = 0; + again = 1; + while( again && gTempBuf[idx] != '\0' ) + { + if( !isspace(gTempBuf[idx]) && !(gTempBuf[idx] == ';') ) + again = 0; + idx++; + } + if( (again == 0) && (idx > 0) ) + fputs( gTempBuf, gOutCore_Java->file ); + } + + /* Clean-up */ + fclose(logicTmp); + print( gOutCore_Java->file, "\n" ); + fileDelete( "..\\temp\\CoreJavaCode1.tmp" ); + fileDelete( "..\\temp\\CoreJavaCode2.tmp" ); +} +#endif + + +static int generateFuncAPI_C() +{ + FileHandle *inFile; + FILE *out; + FILE *in; + + #define FILE_INPUT "..\\..\\ta_func_api.xml" + #define FILE_OUTPUT "..\\src\\ta_abstract\\ta_func_api.c" + #define FILE_OUTPUT_TEMPLATE "..\\src\\ta_abstract\\templates\\ta_func_api.c.template" + + inFile = fileOpen( FILE_INPUT, NULL, FILE_READ ); + if( inFile == NULL ) + { + printf( "\nCannot access [%s]\n", gToOpen ); + return -1; + } + gOutFuncAPI_C = fileOpen( FILE_OUTPUT, FILE_OUTPUT_TEMPLATE, FILE_WRITE|WRITE_ON_CHANGE_ONLY ); + if( gOutFuncAPI_C == NULL ) + { + printf( "\nCannot write to [%s]\n", gToOpen ); + return -1; + } + + out = gOutFuncAPI_C->file; + in = inFile->file; + + convertFileToCArray(in, out); + + fileClose(gOutFuncAPI_C); + fileClose(inFile); + + return 1; +} + +static void convertFileToCArray( FILE *in, FILE *out ) +{ + int c; + int position; + + position = 0; + c = getc(in); + while( c != EOF ) + { + if( position == 0 ) + fprintf( out, "0x%02X", (char)c ); + else + { + fprintf( out, ",0x%02X", (char)c ); + if( (position % 20) == 0 ) + fprintf( out, "\n" ); + } + position++; + c = getc(in); + } + +} + +#ifdef _MSC_VER +static void printJavaFunctionAnnotation(const TA_FuncInfo *funcInfo) +{ + TA_RetCode retCode; + TA_InputParameterInfo *inputInfo; + TA_OptInputParameterInfo *optInputInfo; + TA_OutputParameterInfo *outputInfo; + TA_RealRange *doubleRange; + TA_IntegerRange *integerRange; + TA_IntegerList *intList; + unsigned int i, j; + #define FUNCNAME_SIZE 100 + char funcName[FUNCNAME_SIZE]; + + memset(funcName, 0, FUNCNAME_SIZE); + if( strlen(funcInfo->name) > (FUNCNAME_SIZE-1) ) + { + printf( "\n*** Error buffer size exceeded (printJavaFunctionAnnotation)\n" ); + strcpy( funcName, "1A2"); /* Substitute name. Will cause Java compilation to fail */ + } + else + { + if (funcInfo->camelCaseName==NULL) { + strcpy(funcName, funcInfo->name); + for (i=0; funcName[i]; i++) { + funcName[i] = tolower(funcName[i]); + } + } else { + strcpy(funcName, funcInfo->camelCaseName); + funcName[0] = tolower(funcName[0]); + } + } + + + /* + * Generate Lookback method + */ + fprintf(gOutFunc_Annotation->file, "public int %sLookback(\n", funcName); + for(i=0; inbOptInput; i++) + { + retCode = TA_GetOptInputParameterInfo( funcInfo->handle, i, (void*)&optInputInfo ); + if(optInputInfo->type == TA_OptInput_RealRange) + { + fprintf(gOutFunc_Annotation->file, " double %s", optInputInfo->paramName); + } + else if(optInputInfo->type == TA_OptInput_IntegerRange) + { + fprintf(gOutFunc_Annotation->file, " int %s", optInputInfo->paramName); + } + else if(optInputInfo->type == TA_OptInput_IntegerList) + { + fprintf(gOutFunc_Annotation->file, " MAType %s", optInputInfo->paramName); + } + else + { + printf( "Unexpected error 1 (doForEachFunctionAnnotation)\n"); + } + if (inbOptInput-1) fprintf(gOutFunc_Annotation->file, ",\n"); + } + fprintf(gOutFunc_Annotation->file, ") {\n"); + fprintf(gOutFunc_Annotation->file, " return super.%sLookback(\n", funcName); + for(i=0; inbOptInput; i++) + { + retCode = TA_GetOptInputParameterInfo( funcInfo->handle, i, (void*)&optInputInfo ); + fprintf(gOutFunc_Annotation->file, " %s", optInputInfo->paramName); + if (inbOptInput-1) fprintf(gOutFunc_Annotation->file, ",\n"); + } + fprintf(gOutFunc_Annotation->file, "); }\n\n"); + + /* + * Annotate Function + */ + fprintf(gOutFunc_Annotation->file, "@FuncInfo(\n"); + fprintf(gOutFunc_Annotation->file, " name = \"%s\",\n", funcInfo->name); + fprintf(gOutFunc_Annotation->file, " group = \"%s\",\n", funcInfo->group); + fprintf(gOutFunc_Annotation->file, " flags = %d,\n", funcInfo->flags); /* TODO: should be like: FuncFlags.TA_FUNC_FLG_OVERLAP | FuncFlags.TA_FUNC_FLG_UNST_PER */ + /*fprintf(gOutFunc_Annotation->file, " hint = \"%s\",\n", funcInfo->hint);*/ + /*fprintf(gOutFunc_Annotation->file, " helpFile = \"%s\",\n", funcInfo->helpFile);*/ + fprintf(gOutFunc_Annotation->file, " nbInput = %d,\n", funcInfo->nbInput); + fprintf(gOutFunc_Annotation->file, " nbOptInput = %d,\n", funcInfo->nbOptInput); + fprintf(gOutFunc_Annotation->file, " nbOutput = %d\n", funcInfo->nbOutput); + fprintf(gOutFunc_Annotation->file, ")\n"); + fprintf(gOutFunc_Annotation->file, "public RetCode %s(\n", funcName); + + fprintf(gOutFunc_Annotation->file, " int startIdx,\n"); + fprintf(gOutFunc_Annotation->file, " int endIdx,\n"); + + + /* + * Anotate Input parameters + */ + for(i=0; inbInput; i++) + { + char idx = ' '; + /*if (funcInfo->nbInput>1) idx='0'+i;*/ /* TODO: compile Java code and see if it is necessary to distinguish parameters*/ + + retCode = TA_GetInputParameterInfo( funcInfo->handle, i, (void*)&inputInfo); + if(inputInfo->type == TA_Input_Price) + { + fprintf(gOutFunc_Annotation->file, " @InputParameterInfo(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", inputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " flags = %d,\n", inputInfo->flags); + /*fprintf(gOutFunc_Annotation->file, " hint = \"%s\",\n", inputInfo->hint);*/ + /*fprintf(gOutFunc_Annotation->file, " helpFile = \"%s\",\n", inputInfo->helpFile);*/ + fprintf(gOutFunc_Annotation->file, " type = InputParameterType.TA_Input_Price\n"); + fprintf(gOutFunc_Annotation->file, " )\n"); + + if(inputInfo->flags & TA_IN_PRICE_OPEN) + { + fprintf(gOutFunc_Annotation->file, " double inOpen%c[],\n",idx); + } + if(inputInfo->flags & TA_IN_PRICE_HIGH) + { + fprintf(gOutFunc_Annotation->file, " double inHigh%c[],\n",idx); + } + if(inputInfo->flags & TA_IN_PRICE_LOW) + { + fprintf(gOutFunc_Annotation->file, " double inLow%c[],\n",idx); + } + if(inputInfo->flags & TA_IN_PRICE_CLOSE) + { + fprintf(gOutFunc_Annotation->file, " double inClose%c[],\n",idx); + } + if(inputInfo->flags & TA_IN_PRICE_VOLUME) + { + fprintf(gOutFunc_Annotation->file, " double inVolume%c[],\n",idx); + } + if(inputInfo->flags & TA_IN_PRICE_OPENINTEREST) + { + fprintf(gOutFunc_Annotation->file, " double inOpenInterest%c[],\n",idx); /* FIXME: does it exist? */ + } + if(inputInfo->flags & TA_IN_PRICE_TIMESTAMP) + { + fprintf(gOutFunc_Annotation->file, " long inTimestamp%c[],\n",idx); /* FIXME: does it exist? */ + } + } + else + { + if(inputInfo->type == TA_Input_Real) + { + fprintf(gOutFunc_Annotation->file, " @InputParameterInfo(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", inputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " flags = %d,\n", inputInfo->flags); + fprintf(gOutFunc_Annotation->file, " type = InputParameterType.TA_Input_Real\n"); + fprintf(gOutFunc_Annotation->file, " )\n"); + fprintf(gOutFunc_Annotation->file, " double %s[],\n", inputInfo->paramName); + } + else if(inputInfo->type == TA_Input_Integer) + { + fprintf(gOutFunc_Annotation->file, " @InputParameterInfo(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", inputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " flags = %d,\n", inputInfo->flags); + fprintf(gOutFunc_Annotation->file, " type = InputParameterType.TA_Input_Integer\n"); + fprintf(gOutFunc_Annotation->file, " )\n"); + fprintf(gOutFunc_Annotation->file, " int %s[],\n", inputInfo->paramName); + } + else + { + printf( "Unexpected error 2(doForEachFunctionAnnotation)\n"); /* FIXME: fatal error! */ + } + } + } + + + + /* + * Annotate Optional input parameters + */ + for(i=0; inbOptInput; i++) + { + retCode = TA_GetOptInputParameterInfo( funcInfo->handle, i, (void*)&optInputInfo ); + fprintf(gOutFunc_Annotation->file, " @OptInputParameterInfo(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", optInputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " displayName = \"%s\",\n", optInputInfo->displayName); + fprintf(gOutFunc_Annotation->file, " flags = %d,\n", optInputInfo->flags); + /*fprintf(gOutFunc_Annotation->file, " hint = \"%s\",\n", optInputInfo->hint);*/ + /*fprintf(gOutFunc_Annotation->file, " helpFile = \"%s\",\n", optInputInfo->helpFile);*/ + if(optInputInfo->type == TA_OptInput_RealRange) + { + fprintf(gOutFunc_Annotation->file, " type = OptInputParameterType.TA_OptInput_RealRange,\n"); + fprintf(gOutFunc_Annotation->file, " dataSet = com.tictactec.ta.lib.meta.annotation.RealRange.class\n"); + fprintf(gOutFunc_Annotation->file, " )\n"); + doubleRange= (TA_RealRange*)optInputInfo->dataSet; + fprintf(gOutFunc_Annotation->file, " @RealRange(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", optInputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " defaultValue = %.5f,\n", (double)optInputInfo->defaultValue); + fprintf(gOutFunc_Annotation->file, " min = %.5f,\n", doubleRange->min); + fprintf(gOutFunc_Annotation->file, " max = %.5f,\n", doubleRange->max); + fprintf(gOutFunc_Annotation->file, " precision = %d,\n", doubleRange->precision); + fprintf(gOutFunc_Annotation->file, " suggested_start = %.5f,\n", doubleRange->suggested_start); + fprintf(gOutFunc_Annotation->file, " suggested_end = %.5f,\n", doubleRange->suggested_end); + fprintf(gOutFunc_Annotation->file, " suggested_increment = %.5f\n", doubleRange->suggested_increment); + fprintf(gOutFunc_Annotation->file, " )\n"); + fprintf(gOutFunc_Annotation->file, " double %s,\n", optInputInfo->paramName); + } + else if(optInputInfo->type == TA_OptInput_IntegerRange) + { + fprintf(gOutFunc_Annotation->file, " type = OptInputParameterType.TA_OptInput_IntegerRange,\n"); + fprintf(gOutFunc_Annotation->file, " dataSet = com.tictactec.ta.lib.meta.annotation.IntegerRange.class\n"); + fprintf(gOutFunc_Annotation->file, " )\n"); + integerRange= (TA_IntegerRange*)optInputInfo->dataSet; + fprintf(gOutFunc_Annotation->file, " @IntegerRange(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", optInputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " defaultValue = %d,\n", (int)optInputInfo->defaultValue); + fprintf(gOutFunc_Annotation->file, " min = %d,\n", integerRange->min); + fprintf(gOutFunc_Annotation->file, " max = %d,\n", integerRange->max); + fprintf(gOutFunc_Annotation->file, " suggested_start = %d,\n", integerRange->suggested_start); + fprintf(gOutFunc_Annotation->file, " suggested_end = %d,\n", integerRange->suggested_end); + fprintf(gOutFunc_Annotation->file, " suggested_increment = %d\n", integerRange->suggested_increment); + fprintf(gOutFunc_Annotation->file, " )\n"); + fprintf(gOutFunc_Annotation->file, " int %s,\n", optInputInfo->paramName); + } + else if(optInputInfo->type == TA_OptInput_IntegerList) + { + fprintf(gOutFunc_Annotation->file, " type = OptInputParameterType.TA_OptInput_IntegerList,\n"); + fprintf(gOutFunc_Annotation->file, " dataSet = com.tictactec.ta.lib.meta.annotation.IntegerList.class\n"); + fprintf(gOutFunc_Annotation->file, " )\n"); + intList = (TA_IntegerList*) optInputInfo->dataSet; + /*if( intList != (TA_IntegerList*) TA_DEF_UI_MA_Method.dataSet ) + *{ + * + *} + */ + fprintf(gOutFunc_Annotation->file, " @IntegerList(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", optInputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " defaultValue = %d,\n", (int)optInputInfo->defaultValue); + + if (intList->nbElement>0) { + fprintf(gOutFunc_Annotation->file, " value = { "); + for (j=0; jnbElement-1; j++) { + fprintf(gOutFunc_Annotation->file, "%d, ", intList->data[j].value); + } + fprintf(gOutFunc_Annotation->file, "%d },\n", intList->data[intList->nbElement-1].value); + fprintf(gOutFunc_Annotation->file, " string = { "); + for (j=0; jnbElement-1; j++) { + fprintf(gOutFunc_Annotation->file, "\"%s\", ", intList->data[j].string); + } + fprintf(gOutFunc_Annotation->file, "\"%s\" }\n", intList->data[intList->nbElement-1].string); + } + + fprintf(gOutFunc_Annotation->file, " )\n"); + fprintf(gOutFunc_Annotation->file, " MAType %s,\n", optInputInfo->paramName); + } + else + { + printf( "Unexpected error 2(doForEachFunctionAnnotation)\n"); /* FIXME: fatal error! */ + } + } + + fprintf(gOutFunc_Annotation->file, " MInteger outBegIdx,\n"); + fprintf(gOutFunc_Annotation->file, " MInteger outNBElement,\n"); + + + /* + * Annotate Output parameters + */ + for(i=0; inbOutput; i++) + { + retCode = TA_GetOutputParameterInfo( funcInfo->handle, i, (void*)&outputInfo ); + if(outputInfo->type == TA_Output_Integer) + { + fprintf(gOutFunc_Annotation->file, " @OutputParameterInfo(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", outputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " flags = %d,\n", outputInfo->flags); + /*fprintf(gOutFunc_Annotation->file, " hint = \"%s\",\n", outputInfo->hint);*/ + /*fprintf(gOutFunc_Annotation->file, " helpFile = \"%s\",\n", outputInfo->helpFile);*/ + fprintf(gOutFunc_Annotation->file, " type = OutputParameterType.TA_Output_Integer\n"); + fprintf(gOutFunc_Annotation->file, " )\n"); + fprintf(gOutFunc_Annotation->file, " int %s[]\n", outputInfo->paramName); + } + else if(outputInfo->type == TA_Output_Real) + { + fprintf(gOutFunc_Annotation->file, " @OutputParameterInfo(\n"); + fprintf(gOutFunc_Annotation->file, " paramName = \"%s\",\n", outputInfo->paramName); + fprintf(gOutFunc_Annotation->file, " flags = %d,\n", outputInfo->flags); + fprintf(gOutFunc_Annotation->file, " type = OutputParameterType.TA_Output_Real\n"); + fprintf(gOutFunc_Annotation->file, " )\n"); + fprintf(gOutFunc_Annotation->file, " double %s[]", outputInfo->paramName); + } + else + { + printf( "Unexpected error 3(doForEachFunctionAnnotation)\n"); /* FIXME: fatal error!*/ + } + + if (inbOutput-1) { + fprintf(gOutFunc_Annotation->file, ","); + } + fprintf(gOutFunc_Annotation->file, "\n"); + + } + + fprintf(gOutFunc_Annotation->file, ") {\n"); + fprintf(gOutFunc_Annotation->file, " return super.%s (\n", funcName); + + fprintf(gOutFunc_Annotation->file, " startIdx,\n"); + fprintf(gOutFunc_Annotation->file, " endIdx,\n"); + + for(i=0; inbInput; i++) + { + retCode = TA_GetInputParameterInfo(funcInfo->handle, i, (void*)&inputInfo); + if(inputInfo->type == TA_Input_Price) + { + char idx = ' '; + /*if (funcInfo->nbInput>1) idx='0'+i;*/ /* TODO: compile Java code and see if it is necessary to distinguish parameters */ + + if(inputInfo->flags & TA_IN_PRICE_OPEN) + { + fprintf(gOutFunc_Annotation->file, " inOpen%c,\n", idx); + } + if(inputInfo->flags & TA_IN_PRICE_HIGH) + { + fprintf(gOutFunc_Annotation->file, " inHigh%c,\n", idx); + } + if(inputInfo->flags & TA_IN_PRICE_LOW) + { + fprintf(gOutFunc_Annotation->file, " inLow%c,\n", idx); + } + if(inputInfo->flags & TA_IN_PRICE_CLOSE) + { + fprintf(gOutFunc_Annotation->file, " inClose%c,\n", idx); + } + if(inputInfo->flags & TA_IN_PRICE_VOLUME) + { + fprintf(gOutFunc_Annotation->file, " inVolume%c,\n", idx); + } + if(inputInfo->flags & TA_IN_PRICE_OPENINTEREST) + { + fprintf(gOutFunc_Annotation->file, " inOpenInterest%c,\n", idx); /* FIXME: does it exist?*/ + } + if(inputInfo->flags & TA_IN_PRICE_TIMESTAMP) + { + fprintf(gOutFunc_Annotation->file, " inTimestamp%c,\n", idx); /* FIXME: does it exist? */ + } + } else { + fprintf(gOutFunc_Annotation->file, " %s,\n", inputInfo->paramName); + } + } + + for(i=0; inbOptInput; i++) + { + retCode = TA_GetOptInputParameterInfo(funcInfo->handle, i, (void*)&optInputInfo); + fprintf(gOutFunc_Annotation->file, " %s,\n", optInputInfo->paramName); + } + + fprintf(gOutFunc_Annotation->file, " outBegIdx,\n"); + fprintf(gOutFunc_Annotation->file, " outNBElement,\n"); + + for(i=0; inbOutput-1; i++) + { + retCode = TA_GetOutputParameterInfo(funcInfo->handle, i, (void*)&outputInfo); + fprintf(gOutFunc_Annotation->file, " %s,\n", outputInfo->paramName); + } + retCode = TA_GetOutputParameterInfo(funcInfo->handle, funcInfo->nbOutput-1, (void*)&outputInfo); + fprintf(gOutFunc_Annotation->file, " %s\n", outputInfo->paramName); + + fprintf(gOutFunc_Annotation->file, "); }\n\n\n"); +} +#endif diff --git a/src/tools/gen_code/java/Main.java b/src/tools/gen_code/java/Main.java new file mode 100644 index 000000000..21f582774 --- /dev/null +++ b/src/tools/gen_code/java/Main.java @@ -0,0 +1,89 @@ +/* TA-LIB Copyright (c) 1999-2006, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * BT Barry Tsung + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 012706 BT First version. + */ + +/* Description: + * Perform text processing to the generated TA-Lib code. + * + * Action Performed: + * - Do proper indentation of the Core.java file. + * + * This Java command line utility is expected to be + * called only by the gen_code tool. + * + * Note: All directory in this code is relative to the 'bin' directory. + * ta-lib/c/bin must be your working directory when launching this + * utility, which is the also the expected directory when launching + * gen_code. + */ +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.PrintWriter; + +class Main +{ + public static void main(String[] args) { + try { + String inFile = "..\\temp\\CoreJavaUnformated.tmp"; + String outFile = "..\\temp\\CoreJavaPretty.tmp"; + new PrettyCode(inFile,outFile).process().close(); + if( PrettyCode.verify(inFile,outFile) ){ + /* Create a file when all done. The "caller" gen_code will + * look for that file to confirm success. + */ + PrintWriter out = new PrintWriter("..\\temp\\java_success"); + out.print("OK"); + out.close(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + diff --git a/src/tools/gen_code/java/PrettyCode.java b/src/tools/gen_code/java/PrettyCode.java new file mode 100644 index 000000000..5c5b60363 --- /dev/null +++ b/src/tools/gen_code/java/PrettyCode.java @@ -0,0 +1,224 @@ +/* TA-LIB Copyright (c) 1999-2006, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * BT Barry Tsung + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 012706 BT First version. + */ + +/* Description: + * Do formating of Java source code files. + */ + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.PrintWriter; + +public class PrettyCode { + int line; + int level; + BufferedReader in; + PrintWriter out; + + String indentString = " "; + + boolean insideOfComment; + + boolean unfinishedStatement; + + String lineBuffer; + + public PrettyCode(String inFileName, String outFileName) throws FileNotFoundException{ + this.in = new BufferedReader(new FileReader(inFileName)); + this.out = new PrintWriter(outFileName); + } + + public PrettyCode process() throws IOException{ + while( (lineBuffer=in.readLine())!=null ){ + processLine(lineBuffer); + out.println(); + line++; + } + out.flush(); + return this; + } + + public PrettyCode close() throws IOException{ + in.close(); + out.close(); + return this; + } + + void processLine(String buffer){ + if( level > 0 ){ + buffer=buffer.trim(); + } + if( insideOfComment ){ + appendIndents(""); + buffer = processComment(buffer); + while((buffer=processBuffer(buffer))!=null); + }else{ + appendIndents(buffer); + while((buffer=processBuffer(buffer))!=null); + } + } + + String processBuffer(String buffer){ + if( buffer == null ){ return null; } + if( buffer.startsWith("/*")){ + if( insideOfComment ){ + error("comment inside of comment"); + } + insideOfComment=true; + out.print(buffer.substring(0,2)); + buffer=processComment(substring(buffer,2)); + }else if(buffer.startsWith( "//")){ + out.print(buffer); + }else if(buffer.startsWith("\"")){ + unfinishedStatement=true; + int i=buffer.indexOf("\""); + if( i == -1 ){ + error("no matching ending \""); + }else{ + out.print(buffer.substring(0,i+1)); + return buffer.substring(i+1); + } + }else{ + for(int i=0;i(s.length()-1)){return "";} + return s.substring(i); + } + + public static boolean verify(String fileName1, String fileName2) throws IOException{ + BufferedReader f1 = new BufferedReader(new FileReader(fileName1)); + BufferedReader f2 = new BufferedReader(new FileReader(fileName2)); + int line=0; + String buf1, buf2; + while((buf1=f1.readLine())!= null){ + if((buf2=f2.readLine())==null){ + System.err.println(fileName2+" is shorter than "+fileName1); + return false; + } + if( !buf1.trim().equals(buf2.trim()) ){ + System.err.println("Error on line "+line); + System.err.println(fileName1+"='"+buf1+"'"); + System.err.println(fileName2+"='"+buf2+"'"); + return false; + } + line++; + } + if( (buf2 = f2.readLine()) != null ){ + System.err.println(fileName1+" is shorter than "+fileName2); + return false; + } + return true; + } +} + diff --git a/src/tools/gen_code/mcpp.exe b/src/tools/gen_code/mcpp.exe new file mode 100644 index 0000000000000000000000000000000000000000..c180a4daebdbb5f515da4aa7054f9f3497fe919b GIT binary patch literal 135168 zcmeEveRx#WwfC9H1coqi21qnQknp7-s8qBSV{C|wqB1%Y8MTTPE9!_}6lMflBG5?+ z!x&2|^lIy^q}X2DdRuC##uhawCBdd`^rmfWX^l2*_b|D=X`NdJJ2mg`xAs0W6F}eR zxzBr_=lw(UWcE2{f2_UsT5GSh_S*XdZrEm(SeE6&H9Txt?fB)tdindoe|qrxq$xi- z$=WmKXH(l9OMW(WY2?l|HLF(NcgN~m?y0%;mV58LFIw}d+iF(F?yb4=-kL>MUsH3> zeJgG|yS%(?hN=3UxsLAV0{1;pxbA)8bGSdxf9?}|@Vn`*6;C|N`_L^Z_$5_WG%Ub2IEFXUH@6$7xMq(p= z*;}S@5fA)l|61Ed>vwoYJjo67GPC^VfB4XHeZgVPlGOj>KY+9M1FAebdfU1v-uJCE z{gS?pEKp-v%gc*nlup~eAz&A)me9l|20p~VhZy(}10Q1GLkxU~f&Y&&5Ka!p2dg{%S;E-q z&&f~eq1a{CszVE{&eC3_wn=IaQoAL!|E^2Tvo1Vayp#DdNS*iZ3oZ3JtYme+vaD8r zF4!8#hLT}VW76*qs=q#MS@He8cvIGjZip;G<|JOLGmrAIyQL$#GFi!n8zYPP&Yumc z*8x_1zo(@mR?EDRC45myNE%hMeiyIX9l6x9qGfITP53kE(VhMb4b@~I6HrwS-dG{Mem73rRiKyJtEZ;tm~8I#6l>tj_<;`Mpc^! z>!Kuj8ClO4-RZ%Q+K$Sla|WTR{dMVgTM+Ff%Q*h&fOuUZWwPMb6G+x(DxT3x`qA|F#O#RhH^w@z87yok%1y)PZOX#=_ze|7mN(yT_h_|3qdG{hFVP~wdoN;)nC?Cca{#YP5jgF z4Z6W)8v&7wLVTUu@-}Z`!EzauP*u_y)Oe4)BcqY<=j?aY;2_ZC6Z!?~0X4_#qU>Mv zlw>&*V6<$bI;2MuWIM}#e^MJ?2h}uz%Oy-VvrUF}7vI>JJ4N`!`tCwYV@XYux;!?5 z2hZ#D_mlzRPJeIY>4jE$Ow!*Q?{Fvly~#jNYsJs_a6!0t%}4qC0xLQ<8R$)p^SGza2szUd$HINIb|B|tBCHz@*%ll%3JD#0Ka_p`_57K48g7?LcI}z@Npow=> z1oeY4Ky)|L@qMmPWG)(L4fi#wpj1}X>hB90Kq5IpP)`W9oGu+eGx3+lHb$1P5HhMs zntWOVeR;5@&{7tnVc5OP!p^lvdxe5AKYh|=tX?MKIP0nn;Og0bfG9-{#8ZxhPSnjp zX)6k;qQwg+XpmA!1TKCd&;}EglrHUj+|uD~Ug;!@Wcc!Vd3Mm-{8!wld0((FL1jBj zYeqF#GjIV@HL=r@mApUTtZCyfq2aG`>fFdPJys!e*{U%H#hKLOs4rf3k-&BdvdoOt zsn;IHv+RYjamjF|QC*VHoUT!~BR|9;MP1CNx?%v^pFvBUE}iM?(m{?Hh9gkOw2PSn znfN|OB9KX+gA8S{Gi*6Jp&;#^(%7ajDAZV*at;pqJ7v zM#Y;lWe<*4AANUtI6V!Gq66{6jzl=qa`3_Nd69jwY3cWbMWd80c$@zWWF*Upv;^p~ zvVS8a1m%H9y1UR1&d1q>u{&Eid7pVLAAnGY;!Q)CeA}2GY|Zi@p`k{#MRIr`f8%wl z1jRGeV`!tZRPH3j+#EvP9}aWc4Z4(}OJlfl38~O@G3reFF&CquS{dxMrD_ZHq|;i3 zBG8SR*c2K516GX&g@~6b)X|3|Q>qjwjj&DiDCgq+u2kZmAXqc~4OX}FU9Aw;q=QG^ zNCXB~Vpbxcjp`>~VF`%p0rhREE|>HV)RuDQ@wO-qP*biZHc>Zyz)_>i#b0(Lq=NK8 z0gl47oahR*Vy=-X$%91)jb3j{67^8yQ=Ll%K7(R!^J=^RX1y;pxax)>4!kYPrO81n zdWP=N0bqlw#{4Y$xD7H&KmOz(9|P>HdM8PG%x-aroCR@YRX-kakO=xX$Q$C0k{cA8 zO}~YFpddZES`WqG-?T=+P54#3NnH}H#@|KJlc{U!2H(R#qQMkM&1g_mA_IhWzk63Z zrNqh+t%kE;T$w_^OlTFr%#Kb{|NW>y8`8BtWojkYMjl1)l9jBgQT;qE6|Xd^=oC;H z+EJhQsin1qq#OD%WCu`_tQ0k&tfWh)5@l-Ck>TNjFtJAn0t(GoX&-Q*DaeSdlmn<& zHv+PF6EI({VOs)eMa)0{_aa(yi;jX0t%Q~Z=pN^+@z%dGr%&CvRnU&=YejX5O@NBO z)t}qqOa?rHeNXx~>Yab#n0qw+i2nb!V9}K)SPz~;0D<4VFOG}9yChZ+A$h?ANdWyp z53&_q2<$G4&5{x!k^mTISrpKTs#~2~RPhQSy_~K~J+(vns7S0KeLnQ*`Y$XNPScg0j|iU?uE3MmdmK_NXuv! zG&{e8XkL$s*5I;##g2#lBsIn`HlEZ)AWZbr`=UD$AWTS0J#O;acwiB1mneFypKN*? z^k+eGf}fHs=N4eywfoFOi^t{L;Q{czRIzY+r9ux{UiUUbs<1IY-dRf7Mgt|nM5`!f zna1JDjj%LBldAH?;PfJa=roYYR>tk z5TS<%Y8YNtgdw*GpdyyvM%^W|EH+!CV$)mfUb0g6z;(s+Qt3elgipYfO}ztpHj<%R z@LCVebouw-=I{?ZDnF`Aeg>8N47qpH1#&$mQ=lBWjy5(=&1){rDIqYn0L3!kR?pro zQUv0xELNJ@J&L-8jkRQDA7ZH~Lxh6cNirGUzI#E~QY14K*WK zxoGD?EB>~-<#pJF;AS(mNUr5NS84{@^S)U5HU_cf_1NeGrGG#QPfFk7la83j`(k-N zl8L~fbR{w}jknD8TL1i>MEFoLa3~SzkMM=sdYEmy;@Q#n!`7?(GjqM2^!LwyIpOb5 z2Kp0$zGS#Be)!G={xf~k58lG(|mANJW>kZ>Bw<$~n5+${%zWXMDyIiKqvI#=o?@t26o?QMCL zG)GkQCd0jgir#or?^WK-kUV(NOLUw+ThK8ZKPhNy){lZPr`wj{PrSpki@&v%{JW+! zwGwqFi-4Gqi3O|%hPvx@&!(5zsLmTZl{5gI4R1q`cJvV3paGPcJJAlSV!g>q8bOJW zE9D~SKu>I3n{>3FUa(Tt_EXDBDJW{4rOQF;Qj&e@Nrro*Pd)Lbo@>3Ery&a*0_@Xn z-KS>!d_Z@;$^xc4F5qsc0k8v|oQXBYv=x_F>`LFfsgCc6 z5^&nPPNb(IHxrACp?oZNq79M()dwF)Z1AqgNY_mf56*L zfB&6GC&T@Xss5?dnf|}Y8J4!u2-zg^$ zU7C6ik2Lm@PLES#A>q(Z#5hhgxC^*(05@mZCgMr?syJpa>}>R;%XFHfk(zicXltcK zf@TlF+S1fjcxcyq>d5v`8LdQCmTwT25gXHB#t%cu00-&{dYBuYS)*T%a``3&%T6$rK+(DsQ33L{9VaFS3GrR0)Lyj z!fRoTbj^Q#>$VAJQXcFWjh}QZeU`Kr&z41}iw>lnhU1{kHMR|I1c9pt-GDlL8>(M! z+7Aqb)NIr8JpC-v1*%dN=HVo8l3*{{;O1nZ`0~gX1y=P0tAfrIAwmtyCFy0@@6*#A z5gRuyl1Vnb7yC-~b0jEp_cLoUykGlDY_k}w(ZLsKZ(cdUB$)_wB>kf0e12NJ^(d|{ z;QBePHeBDv^=n*vas2>SKduz6pWyl%F3a;j`{(dDJ)RPe$0fx}J)`(L+KoSBJf5<# zUzuKS?Z8zv15G&pXa6jxF6ofs`mfXJxD!=oPp`M$!tcSE^;Z2E^;Qq=SKzuH>D9RY zg7gFUwaWfy|Ew~Ubd;4jrFco1i@&9#@Mm;cnS0DPQ1!pz`WBn`pLI@`vO9%4NlIn- z;}AuvLhZfPX1lUjjruvPDNU7aN{F}#_6?|Oen;w;7E(>_J7WvfQ^=)WIfVtGSW_z< z8-QyldO}}ZI13)!g~CuB@;X%;RjQy?sc3jz3n+|AC6<<1EEzzqMs-wE`23FaQmq>N zz{}jOBYl%Pj`YDOp5L*lNt*C(?^xi^#!f59yS(gr)g{s@;j^V7Akr?vy!{KcMR~qY ztuj-OAJz7$0&1p?z{(vOBK5=;0Ma#_`XT)!Kq&4#w2-!HW0AG|&33C7=YB?1HSrU5H9nVr!n#_ErH3{EeMF~R&D#6#+S z`n6?oVqq5FzI`bTIwRHft$1v$9{D%@@XdP54AwFvxTI zrr%i>BzohJ@ZK)~W7c|@1HJJJEoh#6*#qT-FE?DZek@d%O&6m54Qm$4yKcv{ zkK&$*6m)N0j7k`2IEUad<@D?^}HF)KYNEf=J3*Yn`DU1=o z^4q+f3*m3aI%GZiXhr8odh+?sxAPh1p!pCvMBIILt6&_Ey$-VPZ0To<_?P~4QeY4# zs;sGaI$I6_gYUswg|n|!AbKg}O6=g%q`U(sZEDIg_xdqN(DxeC$Pjy_m17Z7?tGIs z=bJ=Acd2zp2ALYw^j}NQR6X9nMjQ@cwmcwIPh9e!x@#Hg&d!dNN$sg!c&pZaj`jevkaXxwj4)xQj8io< z7{L3H8LklI6WNk*?O?0Pa?X|^nJtwE)l(kRa;#xf;^BgPTIg;58R`T~bYXmh1KyOK zE6&*2F~~{&7g^8Ve@g@v=k!r%?>M%&9hF@cTOP0LLAPsS*Qv*DM6T>?3R|h? zU&%f+)kc^*T`k+dSS5f09w|JKB@-repEmv+^BQkcVH9CiQY`6dVK1@N1L0ksua^5J zj)U#O$kS+Cv-anHg$%N+IOD{1?fX14u%D+%dm~y?_X~s2k`~)QgP7D9hi1Y)Zp>Ez z`E2^6C*L_0t%O->OjJm>^~`&~G56R>Trkn$*u`HJxWT5Jx!&d!my2Y=mi0}NnJ#?5 z$-$c)oucYCYD@_qM*0ZVVF+94R{DxGEKgQTk)y^VtC`vHG)=sJEBf7&=X=p_O;K08adP>$lC`qQVS zTk7Erz*9KeroDMoI%--D#^%I@_N}IAwmXc5tM(nk^&DA&hSW708a3w=Hiod0IFAG> ztBa?THR$I(l&oa4vYe3F#bi?EDJ+3y;F3g;(iqerY|*d1U2t-NIciByO?{U^?b?lG zvXbPTfF9D+dz!cT2j~S-Q}DK2GQzC4>3uuFi#D@T64L@gLIU^dO z0sN2^t$-SY6_a@OG>N@I-4-37crzPLJ9vEK?@o@LRy1zoHJ2r6DSlknXZM&c-~-la zP-Voann~YgBi5O|frfMROgLaoYg23yNN<2$X?UPf9ga&++60TT+!Ina5nL*IbdFmx znKTkfSW6FQQX2s@0wXv@sgDyo)NggpPaVgi^CNqJ3Z41Q*CjJ160LH|tlB|L&D1~u zorh65jLo20Hv)#}D7Z+u(mhH8q2l-1bWsz7Cl!dO$s(ez5JI$F^aBMb{H&+ClB>@#V3gS+N#s#^ro`<md4^qpSeVxR#7o%SsD9K-I2k5X>uRNd zjh#-#(6xhUE>k46Faq%di*sdyMucAUVqM>+w*=&a(N7yG{HOQeq*xHnLc}+Dtmq9Z zJ(21?aNe-=U;5Y<p3 z)KqBldU-^wO{{{r4_K4)j(zpLdpM?g!5EHPw=CtD8OpW8zH=bwS-I zp6-F*MzsL77{ytpDwzw~s5b}I?;vnN#H!^QNMRo27s0fb^1i>QXM+7`b5`YJ3%V@WxQ>*YXZE9hr$uAFpLHgmdyTPsl@9f&!4O6|LJq zU$W5V>BQb!%*}{=!HS%wrL!@-AUsAjVYzT}qk0)05ey3!uHm4?iuQ%pdZ#SH672oO z@D}=9hgyYLu)v%H!)8!p1#0vm?UCA5xuB(r@&NzaXu|?&RT4cwj7+r^t3*HYqtryz z|2q&%X0DDm`7Ek^70Aa?Cd`qjj2Gww#3E8@;-!x zQsx2`G)4yP91|o57N>ny>@#K+QD*|rrpIGIg`7cqgQ73NXv)-vb4^#RoGW^wLmLpb zDg(;IivJQ3=cGhfUz}lK%KHcB2t_9J{44m*8sjYes5A+jIDwL>Ao@@w0|?cFdR_o) z2yd%K;cLWM0t4eDTb9|bv$J`U4OO57^s#~kl8b$zNRC}a1!~qoqK`s=vC==0j=S^1 z0n?J3CTGmTP&-e*Bm$gm)gktn3bi0_B!+}x`OLy#dH~#^M_9e5SJiG#F30`5#3&Pe#sUxxo6CFM59DQJ^OB zBy-hasKE_jeLb#odiK5RYK-hAc;#H#4ynDcJgC=T4rDn@~|i2r=cv7nWhj$W#}Z1fTU-bIimYQWRdbzL6D4bcV% zFf$yD7I1J;DSE~_ov$5DNUc9&+l+Xs!mIrF1V)UHAu0#ROedZ8z(8p@cBov>6^3f} zD{R_OImpscOVjKgC!WgaIb%y;$BhL9wr9f?y#TIW^p=835?G)BULkrHwDLK%=wu}y zfn6gPpfPp5?qGV3uJlxT3bGZbG<~XmQnKEs6Qed@&dlD;_6n@f+KXy+&*CqaB&3V2 zEnRq6E1A~L(WD7Gkyvev31(2=-R^@@$dw zGYq57#6=b;_6bHnsPOV2AKilWL|J}v)*57gc1J^ycF1frO=Omr*AGDwnQ4{iiL}|fxKK@vkCuomU2GfKXvgX^c&EXSQhiB;GMFJSWPh` z&fLMEs$OXDm|vPLYoCmwslQVQb48uzZ;DJ37}9ED{P4m=m@D0*yqllp3;zJZ8qc_@ z-ip)%yV@_Y=tZd)x^T-2gk(>HKq5{@C{}~BVs5olKPz(0j0gn!d07EY=TWqbv89c=i86Q!nsdP0+FvEtV62+CmiaWImLI?jC*yeMui6LO`?FSbgB{h zfH*1Wn3Ldz($rqOEpXd(qZqN088rf^VLcdG26?*H1j>oWj5SBvS>RU8!We+`-MY12 z63?Vy0YGS zCQxsE#axT<%gYHW&+{r1;MY)_EOm&V^|bXfF;`B1(3vg-fkb@IqlHI`T1b~l5jG_J zj-cP}xyXd*uzLA{iU_LkAJRVq`bY6c`{X{D?X}0w4s73>^zVhM8q~xHb_9Iptvm!n zm!__VG>A9tohMvTh8EH{ouIri@dxACb@YAhy*^e0Ch`%WFbqf?Dw9A%cE_=_KoC`u!|8lJdbF{$@5CeQ@pOjrr8Ust2@?UTVv_}k(9M(kiY zLvFm!u_rK(+v82`&~or1r~(I=6J9gM72bka7ls*LhblRRbj1(POWehh?7=Z{glp^kg7D97W{p-n*k^_`Ag0vIE^jDkei0j*X8u z?YFQJcayXxA&Zim1G^-)R94SQQ?e3;aHi-*cDGAYb5KH4M0C8An(vhpOp3)ssUpir? zyraNK6aYyw%Qums06PCd#$dzaQ*F zpK(WHD>n|fDN^=B2b0W!_UVDW@uS1BievDT`VFV$a2J$`B(h>3Q2+uU133Xe>6i)k zi`%MS!xuk#hPQbJ2`~(B;SKaQpUk@e?(A?pdtH2bId{24XS6c@?hVjL0d{};SpQxq zZfyXWvH`MJq-|?>KgO9$5FJ?RMlm>9ihAL1pYGqwT~^2SLN7({cVH7zppP|TMRh>1 zIwY}o8SaAMCaDYrl3MbLWsL<4;k`Pz(z&~Ej3y$!f+HkK3 z4*%|2e^0UC2m%u}d#LZ)EaHkT4wmt6~k6` ztr_2FFABS(L22&vq}T{YelzLy>6L6*ymg3v=mQ6-uxWZmQXE_4py|aN9;x{ea-E}d zY3_x>30{$fJa8W90t+)gzg71DdneH^cm#QRf@;@Kk0Ec(*}~6@uZ2**8!ce+dsKb~ zNaCoLYfim%Dr0%aa3Di4_y7(LU@qYRc9%u53VaAIs-rHF|8cnyA=)jKfvfQv3l#_& z_3uvx_QzAx68PJ+ANy3GDx&ay@3Ws9x>2^?bl|6bG@hd7Cs1=cg$UA*FzwOl%}i4* z!1K>CU9QvjF+E17Z)KWJ8sxbSX^fFflcgyaBmwxjOZwc0S0n~GNkL+35!)*FU~_-}+!3cytRSO*?*_Heow6ZzS zM8kUElCETnNhQ4o1-Ax&MrWTg_d4)q>Vz4@%YnAMW{v;m_%*7S$ZZlZuNI_ zKYFh{!tKid0a&L~0Kw3M7HlbTz=1(Q^vUHm3|L5}n(7l_-4jxOmbhwP8Zy;vuZ&KD zjt&{<3n5H|!c~;oVUw@HuIOZ{(JS3VFI4HB=5?`JCGU&t__5AZ=!9KYSvxhU_^ZR1 zP=#AQNs0Qs>*}p1aIL`Q!&QxI7OwMf)#F-%>v~+PaXpXA8jFAOhY5%I$29)spX*!m z*QtNyWr+(nrRK#b{Ei;$c8(cambU>R-!~0%`IHLQk162~&6S^_75D*~N3WlSzY{l1 z1G~i)lp?4J5P^v4PcDR18Q>ky<;kQgjphTD8TFy2jHbYm#gr5qw2NhJ_nWtQD+)=2 z(C^V89L0A7fja>P9mPyPg*2ByjfXBN4}+22d~E!tr-`y8F$|Htc&_e(+6YN06;G6k zu}q2>A|DR4;`=N0ds7~U{bo@WQ2@uDK}KXOZ_8IT`;7KJ^hKST=>5WGojS$a+@w=g z-sUwrRqk!RQ>Q%M=9?vjy=Ksm2CenCQngps>KjqBJR7jqU(ILz*6PcQr0}*>*oDTi z(1x>VJ18Jv!&;bb8LSDtBe)vC(sv4}4dt7f`uW=X`QPw`Va>b`#Sz11FVQ=^&Cer) zQAga~=I=;7giic%JrYdU3&#>Sy7eH)uwXSJR?ZlMWD+t6$U4~Cx(W@4)b9oFRp|x5 zn}ZP_Jrw>5b4(hBY|s4HvHw^UVm;>#tvPiYo zw9$0}Np?;_l3}a12(f~G#<>*!mu^zg4{s3o0E1f~853KF;L@>yf!Hd$dWk}&WI+tZ zr8+wZv9n$_AR?8b`>oL4DMrW$TDYye(UbwdNv~O0!jL-aUBD5i!;~nU9DrF|^VUn^ z{XqC2(h9~6Lim2n5#NvaA%!y!AR*r`-!3Rt`F!A3cpisirD!C5BNopSJ0fhdg@5B} zR6-|S;O+ReHOW>cyw83yyu`~GU<@kh9TsF&i6sRqem;IY2(u~EQmxF5SSzkEl% zmAZ(xe$QCHFFGClKk^0wtm3a*M}C7{N}_3aYW;mQhkUhxL($1L*)ZM!#g6phMf^4E z$Q!jiF%dL$#HlqNTG_oN0$#>*69A=UT_)^dDVc0V^?4xhIR}cd$ zS9_KGy^k>)%5IagjQl9XfvG!wNSkViaT@{8*nrR5jMFkuTgBKgq)?J+Oon=B8T5?v z3!i+JMYV|ptSE%!7FMT^Be%7B%_V!q- zA$F^*4ULom71o+7Y;HUOvyV_)j%9W#V}rmGdQ#!3)?T|beaS6KItM{lugxZ!Ge z`~sfZz|dO1bY`OI3_|IAwc*VAbFlZ#51JiXT^J!&@SrKS0XV3znxG|lpnNwW(#4pA zFTr5q2=V+AkT!&>FEvHOHAmo@^nP$;lv`Kv1=Ts`V4NuMxvmaX$*|whQdm1$Ns7xEV%+Bn3z;@R=OvX7oR87g)doQZLTS zk-kt09p`McvzG}#tQBHWdP3LSlQuX{YH*&kv;S7Q*Uk>a3lkrT!W#X*8WT2NGcSywU^QX27a6=MTcY;&jG=1#mupLd!z(<@Q)SO_U} zr(&$XirsmfS?D@^oQ0D9$L+iqGiEB~6VEgph>s@yk0t|;CVgW=E|}&13c!m9JV@!Z zag;DV6sMSe{AxoLKte8omPm`7vM#x$-dc5szL;K&s~y+RaAk14@+p1&?AChgwiWf( zKXILWTfMazS39m0u8FtTTUX-x46bkC>cI7DTz|ne(bRn@e)FokBxF8ZiivRX2Tp`s z?!-h`>*5GtxpT*^yX%1wIsGUAL}XIu$*Up}t1Uqp7+;Z8Pa+>=h8#MAmq%U$3XVX# zqx4GsR|)aVnU(nOx5ug<=*RPZ;9s(JF&iQwF=GL-dZtoe`fh$wlacf`$E6fUGy2&= zcE&^xh15GBn}lEH>#$4*i{Uilb_{$8+e46X;gAcAw{ z;Jt*@9U8vh2W3Z3C_4cryLzhh%AO^SC|@I$N_UQmXga1lfB2r=ozxqAANG_8-A^Fh z)5eDTu{PjaJ!LJ3iSlpt`#@t0>+uGfq^@m_)HZ2kZF*IPwXOZX)V7~e6Md@_*ln?T zZ=q8&M!Yz`@M5gAPieMx0vtLb%_#mT<%HY1^=Nn7qx~Da(9%o_h}5C@>#_@U=>lDL zfp4*Z2&L5%fE|%$6o32e0{eA={dR$MEFfY@3J6FPe{}u`NFBOBhh5+@7La-&FQg#p zb+4U$ug<>L&R)grQY*xt$YqM66Ulp_2byFU@98o^)9n#Tz0Su0&wP<{^X-{6MTJ~= zhQbn3&N!}~)Rl}4Q~ZfYW1ApB>kK%B<~U~c+-?; z6mTN&G?t%|{-={=V;8%kh~k0t9Rm76qOb!46<}>BIc!4x-I`yu4>k3>C z;Cc$zOSpc8>pyXwYU=jmSJtoLx>yJ4XH>iBOxwK0j*ns=Iaf!NCm>L#uLQo5;}Cdb z#cE7`M^txE*dIpPTT67-8f}76XTpA-q<#uCC7rhMhECg3S>!P`pk#IeBE;hD7qN_R zZ8*wtJgJDAXdOM09L}MChhL0CG}O<0sI$QpOqN0X3_&om#S9!)`p}_8UnMwI>5tik z2fu3y4-S|{wA|7Kv-yH!rCt}&ue-ke+X`>(JSjJq2O+L~(s z64t8hcq+MTZ~`nm4RJ38e$lAkGso|K?0E<%>&Veyq~Zni#X$YA)K`rx4Dj-M(%%3{ z$=pl57s7Zg4sxiN2JPnFrcr2&Pb=J(Psclx^p>>K;g zt%Fa#^HUh7T=bJugQC}h02l_}aaoG%+)3;?a%W{b)Hs;-S%9N1 z^z*qp4WDp!B97I1brJ3nrW57niZN;aEkVs1y%H~7fdjeJBW=Rg2^>{`-TiVzQKFnD zerVX1O0BM4d(gAa(%tyWe>$EA4%60_EVt>mwq{Wpd`X-f zfY)sLAHy8ukoqn|l(=$iD_icLp_lEBgm!^DN3Ft%JYxMuP(d@bT#8{E`1$P>kz^niXuCUg)S zC(#4e6kuGC1$1+hh8_XW4mN{@9uC3*=M*v$cY}gM&4H+?H#wEVP3V2-r)V0{{gEmS zT6nP4wFBxJ`u)dCFcV%c`Mq%YW%#wtz@T(k4-&@ z$fNihm<5#5T@{%}-2TgD0!Rc=hd5B)2HkcQyRc~*PB84$iUgVaPMsTD8%p^dNZ<{! z&+Zd8;F7k%HCORDVZs5KlN;Me`a$&qIv}<@T(c8RkH0NPkLn(O&7`^Y=Sw<`-rs{U zh7+z)U98CoBN9aOAg=}ioX*K&TEyopmJ`yKq&4^}F<1|O7XzbvxL8Vo5Hfir!Q#Q^ zGgh(CR$T}Vlua+Qe;6z3wYrbWQzjk2%uX2uF*XRhiQ`2#W4}ogv|f|u4wub(90hEi zs&I-8_6Ptnp-3|U7^4A5V=W$gzp-E>r?xlS^_fyprb*CfFcjRS zLy!U8S$S|J16&fqCUVL&Hd@Gm-DDt6d}^u<{*V!_m}G@teIQr8p=k)KY5cZ8^bREW z5dyP8U!TZVTgkJ3HjIha@iaJV!?gTNFPrc9kelzevzPBstV0Nzqx|;b8CsF^PMiXV zCq*+|OK5H&8-o$YE-Y-S;(XyHK1dW)DZI_iyy5$5^go+yz~;>u;2ZzJ)Yzf9L+M-8Jod~Iiw+T#gkhXpF#1uJu z1hk`{N=~fE8NSke8FjIg10SgLIkba76sR$|cqgdcU`DG0y)25OOmps}p%lU-%B8gb)Ey0&W4S`A5uxr!czFUe5olMbq7 zi{t@E4e+Jc()AAGf;&|RQ&xKS!}9lWkF#mwfVBY>tZ}5K0R+6kDkXf76v4hUzG&dv z8qREif^I*85Yc{x3b@+^#*ljSWPuEYv2F@&2UhA@stuK?--BXN0O(U|EhUmvcE~rP4QN1@8rPybXHvI&qH+p(~4Wnxal(Is-R>(|NASGkD z?D!5}Wjg%*3t8T+9z!{_fDTt92tBFqIMr%`gKy*vz(Tc6A3@L19Bk>wG@BuPrK{C- zCn)pI1YJhPh{0){$jg>7^L@;;JjIlgdOI83R6Yx`W5j`8fTGRRXy-YZ;KBWIh^(B$5 zBZfjM1!AxntQoT{?DIkVMPCtE#Qo*IMz!Q)Qo%}xp=Q}CaK>!v&~J$#@!4jx#Bh?U z2023ZQ+%)F3#{RIYJ7VZsIm2<92k7f!JKY{D1;p6?DHZ0N$KxtHm0evRKJ8m^|}yxm7m_lAA+n9ln|s6Gn1oYXqy&fY^brs!G_ppA#~6S z6UtV|WbbZsMbDzzA6bmXY^(gmtppUt2_mu$-c8ue!_iYbExOdh1+PA=M-!}_>_ z>|oa*%Vj4%C%&m^&^u<%T+z&#TEYR9xe#^aJ0$!y&+wOtEWvw9*t~{)r5r4PsfU_9 z0#j&F^e-pSSfNjr)3^o&h9VI@GJc7_3!y-fr20ialmAptG1K8E6NdA4Yyr*s^Nibh7;*#(tu=nXx0FWc!O0 zbYJ2{4I>8zr*LEZ&{qE-iG4^oXDHo)M-n~3d2I-kisjCRlUOQ3z!NZEyGM67QTAw}# zGvyrr0NnZcF5|RN6dPbMj-A^6kn|QdB6pQjhZl-viMZq;S%{BePGrN$7wt^h zjF*sv=(gf-2}uLa^z{NMtQnY6T#uulh(w0AM7q@KdJtoQuY$Q+SttMD16Vy=*+;;o zz{dRm(zJXjMPMlE5c;FrGadSv5hXO=@<;sSY6Zk5oSQ?jW;aYxH9Gz4yjE`GXAll_ z61(_y;6=v5lG*Eo=d?>V$(dRRMlp&rjMrI#c)IRtN z$1sbBTL}8a*6BkSH=?)adN&_MorotvP|yooBq-<`_@T5xOz!XS&Y0#-{izHvBmCFf z;iG9(pE#eDV)nqac?L&KITrX2VNCq{{ao~Ql^!7m6L;zG?a%T%%rg$V727TSve z>kF#?7I_Py2?=>fCIyCbnR!E=_UKf|{&lD+9)$f%)M{ypsL-Z@;(!73BJ!U!4^ zJpzOb)vGr#uG8N~CZ!bX6H*3U^nsL{5Tw@IsJ@8_j5=tb7pG)ln;|G38Kh{%ru0vN zXh!bl6{w3jrVq~16vgh~^&T)WR|ofS;zDc+!e!a>i-f~Gkv`u1mkfeS3k`sSksjb| z^8FTsLg0$w`gwD`^#-nIk+w?he-1lgew`!lOG-;!+Q1V1k4Nw7>fzPOvLleWnY@Jh zCf;FADWgboPmDoQxN*jcIiA&_8g&zY`Zi;9v>WTrb6 z;0(ZXDN#K-0B9=cubtDx9Ebs^NZ?G1d?!kIg!eVbZ@gYCf>^ILJlYb@7WqOL^bGUe z#q^s}Gn`L2b_H)7vjpIc$jI1dXuFCh@T&=gq2OAD>mgiU$Mrrt{EyrA&x4PO z_WaBEKxWGL*k7Sjf1gBc7tLl0Mr6FdCW>#Ya0v`+pZ4kZP@nD3(qUmUQ^uGKewc|U zJiTxp5%#}8!dg-I&NEXW=l&I}r@eXUFNtD`y(G}oD%nBz0Y?q(kHQWlbJ9MK5UdsT zJ?c>{gG% z>N{qAGDJGWh=d}86hX!yxlQQ6ru1XflYpmbp6+pD#IrBISo;wv16qc?<)b4M=GKi` zR-|9jU9$N{bl$ufl>u3jWuW^0Q>X9+wRe!x=Pk)%b;0K_@(Wksp-#vi@DN5A!vXW- zd8va|_4kkh5cj`L`3O~k9EQh_;<0^hrFJvJ=y**sA>L|83D*Ye}9Pd8ZRRwz5ZyO*rdY~Xber)m!L6+b!CR!*7 zhfQ;6FQo23S?Jm5PEGW0_&X&!NT&d4Ug)C=787^!4Iy9wBLzgc&G#V+8&b2tBGk|P zD>*kcryZ6e8)@5my_>gT*kGSRpq}?d5vbMp5oxR7ky-*qT4ys)(Uw8T3Bs*;)^q_f ztmvRVB^^ku<=?n7}Du;~|v85Qk1pLYv zQm0ejUMu4WT1ABmQ6a?oLa0!;q9Ytk?M9Zlg9jjCFomok`Y{2xH9(ix0AW?%O3fw; z%zzgBD;fI{)rZi$IvGHEa!S16%ts{%8#emg3~{qRv2I zTKdbwP3~neu#aqOj4n2`1MiT1#zMwC!sMaxmMF8IV1JzqO@e!2!kl6=F<@smy=xG* zMF%rrOCu0+n#{tJWt=Vt05VRC38Q~#YrxH~d*)B`!;lfdh-_XXM=xu2C$fr+^B*$> z*S3=4j3U~Z$`E}D>U7~MR7L5**dy_PJ^OII_0AU%Fof&mZS~f@_&p!LmZOyV1(XW; zXEci<{lfO&=67Lcd3uO=P1$Rmme&?&GJ z;Zz|JEECGYB*tng=n>56VqCq6$4FzN;2=)r$qz;wI|^^cT4;SrzLu%^aYP?Z#G~#a z9xd^h zwAKJb9-fC$7{oiymoM{YpawtUR-#U0NWthC#)grmT{ z&D{`1*y35>A^mwyZ}UOaWcUwzSkSqxe#MbC${jUJc@1Vzp}gB2G6BQ6>1}HxJ`UN8 zKe`S<2R&Elv=zNWqAzYK;QCq{xH&lEw#4(B{el2OK5ZSz>ODlt`5r zXes@bg3V&6S`GJ+zD6a>xM>`Ol)OwFne3D;Jn^ud!DS z&nxZ;VCp8H1`v`mL-z!_DCIIJ84+kWF$U+J+A;lNe59I$%D#x4|n zz%B~QnPERTSw%~KHn!{mmV(KGl>z%{30E4{+{+hOGQi-?(p7UtQ`I`n9%H(qJq#ID zfV9L2{k$^e$eVI9!E1bp=*9w9&WLW~`9-DvC@sg^cnX1z&0UAvpy)8GVt3nAT+rg& z_M-y7qre;~a8?XQ4Ik5lo&5uANc}??oGL{(QyLU+^GmonQ3Z&8)3_58SC73jepIxH z>_}}QtF?(dsn`>ce3pTc3c1w3v6bWC=CBd}KP5nvFtRiRee|;!1co3P2LHg0rSVY# zEgnBG8_a`(#Ekck_O^tI)Cd_DZ_C9ZkoiSzkw&>SW(gGwc+1ErUx&|uvdc7Bq*EJH zr$7(YIL|~3oskAHjqbwifJw{SI-e7m!FACLgtc+49>Kk$8^k#$=HRcBBO8fOE~{0< z4DJTgIGSRpAe}e8%{&Nlp*J{ov5bz))Ar{<*0V=7r|BN)NKd=Pf(8ZFn@afD6u<2t z^EF~L0$*Sg1JT;HunW7^e zzD|}O2dHB}*$(Hv?@|jti?-$Dk0EpHM>Y}5rP?`80&E8VU3wvlBa%)#E0!d8oX2=8s9PDp0i z6Ob8(mFMk38!SW%+h4Drs#lnA^lsh>AQ?&Y>=*wg;O}?_Kl3|));jNwj>Yl*zs5VJ z%BhU0?a0a#a`|T8$_ZlX0oEdMQXq=c>3mal(Ua0A>Asx8etGPkRp2hQ zm<8wzAHYIrU9l7!DuAFkD|L#%38Sf>OHhYrV)Y(dwyV6GyYLn&Ct?9V z^$p^`^(y?>=qTdEoc*kr6Pt2%vB?@pr~&8#P?jq~S=zkx@a6G*#V?Vv|6aUKFNxP( zB>qU8?Z$@1qvQIY6+B7wmVN9uei8?*U@7@ky8x5~X-uW5zLSMbC-X@ypDZ zbZwvQ1fiel-t8Unj?;v8Y&?*{Q%g__rgbcUU^Qb7iKVX&U31!*%9!a4W+FxP;t0aC zqS%<+TgR-u7e`&`yV7gSQKeDynMQ)4IB-dliE;7lnIAmX6HYY3W=zHs zrbocU0uv2@3!{iq>ZxOFU(dzSGCBPwbp@pCF{8W?CGDQU-nLSw7xH+UOK@|7A*Ivp zL_L`4ZAqdI8_**1rX$}T$s$wd!kCdceijROOejrZYk-MLH4oC*+HS0rf;xWO6HPmd z*fDrbkIi3rYX~DcMGG=NPdg@OOkqibSj=4cG|^)}7gS9nsvvKoCi7@yFrQT`Jfz-| z;v`+16M87V=B^)}9lO(pvY=cP<5%#O@PTX2#%Z4dVhxHOhb|p1{5~C?iV|s@o}xbq z3Q7gJhp{wZ@jQFzJv6;KI9>f=Ji5y7bQ6`V z*!}`tH_m8_t5TSFu;!}Qo`-c|i1p1P6?c3VKhQsCqS;9{ofJ48)0`|HLESc+MW`Gn z{uN)w#`W*G+Hf`DdL9?tWa1|?ZZiH9yUmIo=abH33*_JE1m3%@{Tfa*+F5U1*H&+R z8tJaD*IQr1{VTXe@2aZdcCev@2Jsk zB+S1t-mff30Kb{Oc9$#P~+%x>RI9wU;bt|cpM@2)gd_39UN|$3leY^u&)8px1=#QEe z^y@0kdV1fT#L%4%6xpua8tmrA>K&Csx;uA9FSF7JFTxqj)uMRjlA&sZX47%3HUd(( zFJzekYY(}kV-BoHy`2vB$zWq-3v!sfi_<jghMbPY7Sg3Py+vb?VImHT6;Rt{Tn=DDFZ1BL6f| z$?s7KuH)-GR&+t610B_sv`Fp7T1_l;L)d6Vha1aGwOB8BM$Y2*Xwjh`YrjD@0(oHO zu*EeYm4Qw{^IR%PG}P!4i}AfLqomp^2Kda7Y<9GptJ)=>&??^#P`OSdiNeAzFx;pv zkb!flm*7MiX})WH9Y-grOTYnQ;7E*^5Y@&K?w|sgYLq}n2Zd;#gU~}Z?R#$+CKe;> zxe>$!xzc^hL6uJv#gAgu^A=JjEm}Hi zs}Vux$w(YTEA;1u@HnIr%UO{-{d%&JH8e*0S;K2GKIJ*t7f*sJM#j%*J4YRlWYLf&pAb2l4DBpD)lu(7i)VGN}O^Q5Z z10j%%ypn@i5Kys9ape|EaN2Z+Sq+qCg)v;}7oeY%oQ0yxW1w>Bn+o=C4F($a?`_gW zc)Dr-V&$=5|JL9kV__K2M05ar_fG)+m!avSRfH{v2eRKb`MU=Rp^KgJ*c&kxYYk<~u_B)RX}8wF&;eO&Jf zsuJC4TRXqUUL9Xyvv-X|2Fm2bzJa>%W}ycCVL}O ziRN#&O}7)whpwJvQ_D0dLP-*qV`Qd~i2Hd^p~VH1=}6>@8iIvb4yspf()eNk6MdH8 z^Jh_p+FNuv{+@6zN{5=y z{&0Z?Iw@SEj8#SW&#|aV_0Sumqkf9!XS2{*JZ(`J6;A_j9{cpYbj3^_2wX9fM-6wQ zI;=Somj{$L-A#D#X;^P_mQq3{0g4DS8*nEk@Vh|vR~}1Z_D;;bMDd-PaqMW>Y0yllmA&rM$X*gaUE|`1m+}1P1~4x6!x-nenvIdsx);?Y4nI|+LHvS# z2ay*9ZAIsp!9q<&OxR2Kpu_^@=yfeUn*JP=DTuk&rEX^%7ahP}wLK5M-*UtZcE1}I z9B^`CO0m*SHhFMkYa9_@Htv?P@UYC`KAJu1KQwycb#n!04av&8k>FIK6LquXIZQ9T za5+9+#|-dC*n8}$9|{uuY8R)yA}!Q7`|zXv|8V!N002hIUHNfvL{Lp#A$T<$MOs#ftf(g6~7S<)?oTKSDF{bv{x1d#gKjgm3Q*BoL@7(egucaf8^_ zCGwMv@|BT1n3}1$gw(5_V5h;_)YGgePNP&{6?}VkSjRoeu$4tGIaUH8R+3sD_5A}@ z8LEiEcM zIBS`YjKb94sD7(?u5f0@$PwdsnN2MpGZF-(I#PldyP!5yv&LrUEf^U!PXv?CY)h$$ zmPdB-@f#u`T{;3y=s~6^*&>Aa+v{ccWG2r_a1bRLv=5kbI6m+G-?%q(J>e^dD4h*A-gg1RqjwO66iE$h5^UOhglPEn`L~rA7Pb zYzYGRLn~*fZ`dWFgF0RSNHS&R7KzV@u$zl6GazRAruv1o2{#<80 z)CYNMFdV}A1bkK;V)?Ex^3r~Xl1;WuEUvZ(=OkUge0G=?rM5ho(dK=^On61QEfOsk zebx5T>9+M0F@9<~;NT%O#-gD@ZqN%6;4XX@i&BoI+wmpb*}U}feEdx~bA zU(s~}JE*ywm4*}@=*Lv5;p28N2DNdO9s4C_b%AWomCX1+!tThWFkx_bBNLdsNF=fg z7N~4gkr1#`=&{h(JgqmWuiqgfj=C9z#Y3y?9XLfxdkA22dRzZUBx9;v+N$gsv_d5L zU16z1=(DJ4lFwg7$n!IoiA6gOL5?Jsv>XzDH;;0;>uuj>C)z8%l`?WG zFjrepnK*eHHjon_tms?~6h34lK-DxxhR~j=aFJ99SEd11M;7m5CDIiuwt(w*h(3s( zjb0`js)OoVn`kY933^9_0rxgWvXoROweWQXkf(0<~0F zgFd2h%4%fi$sTA$PWJGygx&1C;5K@agpu?fmH5dguP6R__rXiAH(|AKfaIk@_ z0Vx9cLEHcN97Z44d${OSEdJ+k@>pbBJdr;&@{8E%JhIat%qM=!mtZ;&J)8+UEcgS< zU&QjebopZo2*1InjtLK41n(|l*UcuwwyW3)oI4;VmPMAZo-dnW$Bw;Nm3GucmhwfD zevztz{D*&9+e@|rLQf9kevB?eW3L}0oe$W@65|j@J2g>L_HAodVKl%$C+!vf`P+}{ zDT6Vh_VN)tLwS!4Hmxrs*e3M;u#B-MeJiS8f#>NPkhq(P5E4-)79+8aiH{?(o{5h_ z>#k{nmX59P^})y%JhRd86;mHpo&*shSLO*>U?#+=1K5!(-_iv!G^&`4ygS9us^`x( zbL!kAhE3?o?YP$Ax)0Y)xaQ#6ipv`1aF)16{qO!O%@d2BU*dyqGmhKPY4tO~a*nUO0YY>AWepS5}GDr7QY&V}WGWG^1>p*|9vgQy% zY++Zl`d~zvszCXWBk;uD>KEQg$f5Z07kKRbu($b7&>WKTC?Ov^NVf7j2=UaMgigG` z+pE2szb*NAGynCi+kSD7Ot9ld{B)M`hz+V(sU67ESxU1?Za*)#Ji<$E*Rlq4nE!I! zz0|FeWrm$)DYH~=`XhEq1gVjIAr~gXtW$+gCIA*stGImqV!zAb#~EGtET$h^_@9Y20uJg@B(n=1P{6 z%%EB&JzH_GekGs9Uv?!V(Z+XBZFcdufXlP7HcuGV0EW&|&d)*;D+tn15jxMwgH$S? zl!;{UQji%`6Y}pWlI0PQO#C3iNSH`ni`pXDqI&+U2NT0Gu8lc7u3eJxEN09xqrt(8 z`HU6GN~!c!cR~^=2lHC5=G%WHpY?pZeV=Y$GamHzq-R^AeAx;__6sZ09F#=rhhUG0 zt5DZv`MRbR(CON`>w1po>$)jF|am#(KAmSj5A&4YIy?nIV{HRm4{W(*ySN*uBLt(QH=Y2tF(N ze`tFj_^7Hge|RP{NiNBR86bfmL4rht1}z#;V2C7;gdhYGA_)-*+A1AW+alZx+7g&} zGi@f9Tj_7L)voTAQd_&*wRUS+YAYrLli*+e)uON(EI+;DjT$v31BBf7`#k5)WI(&S zpZDE2pWM0Up8w}L&w0*sp7WgNtYKy1O*~q#wlHvN)MD#MBEr|@If%du>m{(?S9k|n z!awk3+^1h=5$Bi91C|zcY!K53j_LG)zTsXyV~H4V;m{pK6(BxuyPO_SfciZBI-uZ{KrA5uv>Vxm zVTDE_G2iLg#&@t;TjPWe1qCvx|7_Bya{qzxZ3}12#_AuNyWHRxvHXtV-5(h5+-lUh z6?c`3dsWuj<#4OP3E^y+U@`@1`Z^TLAEXt0W7{Uh+m%cj4xBGtUmwdOGck`Uqb^=c zzWFkMDzX{Xi{M>IeVyTJyj{g@G3O-)H-5zq4rDWKJ_{#5f75tsB4a7sZCl1RT3z%gCW4WDk#UZxWfJ5_@flB12 z)3tb0fzGIfz08c98B3@*iU_dBsqFyri*@IHEZD}JN*Sbghs8YxT>ca?XUOF@dTmTL zzKwwejI#Y>6@;AI5&0Q@M1A@5NBFd7KkRed38b_y*vS`Jm|MD%XW58gegg_$LWu=B zUwcWL#k>`of}K5z#EMRf2F7js+9Nh1h`dB^S)8nQI+oEe~X zDiISX-8MoH8M7l~^G3g8EQAqHtQ!A-xUrsq;t@dt@P)Evljt6}V*r2?*o`wC9!!uO zD+Mk=qC$g+_1XyKv2w@W!IL7C#jRJy6nd~HcVaKaA!*YIbOJeRVyy*tPZ^QGUVYaQ z&Z5v*%8WgfEF8L>$b<*oNMAaAX^+q^3^x+)(P^zG85y9Y%ay^^yoD6mLHCyS!T=}e zV1R7KYHOZdZM?RH+5jQV5v)X?1#d*AFOWw_z{eOvffgPP^i^fNC0MP!G^?0bsf9F?IOK_eU5rNbg$p(l;z0k5V|ez^ zdv8fDlF_Mg;i+Yi1DyqLzFaxkc%Sj08+mpm)4J;!Ae!;xd>R<^xtk_2EVLf(gdK7` zK|G5NV4;QQK0N>VLXl%Co=t7I%;8{>!`o5hxDwB`c)W*-99!{Zy;$V<9-b`3TY~hn zk!~fPAf7vst_|rNh#x?lIS9WK&x?2*IsE5L67Tr0%blE(laq>XX;e;HdX6V!wAVK# zXRL@YE+>;5Svli#awgZgX{8m&|+q!)4)AKvU65#g8=2M@v1$Nj}fed7yxcI55=(sY<`Xg!UB1M%nNrgXK4J(V0!>8)Q=V9A%-U3 z@4ZjHk}>^G%R^SWkp=DflsU(;*Ebk7mo9FQIc zZRRabtf5#GV7(g8*uC4#CC)uDR%IXuATsiWLXOycWwIav-xeY$HWSf_f7&$3fp`J{ zvQLr8Qy}0Y@C^fe*!ao7ed`DXLr=3a{s4qZ!}#VUX|fX1_;53}Ks%O0?uyTpB&z=f zm&J#AsZO@~?wT$>a7TIzUCDF^m@H+1F(H?eT(ra%t{%`J;d&YUIV~wOSUbU9 zJq?eMiFW&HQGkVw4^hA(go^?Y+b%%(Q31k51t0-JsQ{6d3&4erW~IpSB3F;9JSCo^ za8Z?W*^hF>w2OQwN8#csb0cF_wrMx6sOT+6Cp9=5cGA{kLr$O)pJZLo7|UcKn=Atc z?to{2jM!5oqk_9523A-UpmiF_@_&zV19u^=(aw@f^fK=|(T;WCUidQ-{&OB7p~t*6 zAXC&Ie=%y1qEZLScGQ`HT@>}3mqrCq4LnRyY1}LmQCa$-8t%O$@emS|p8+d`9NDW5NOf(S)8u$&xICXgps&lG{ z5ucL;iE8*;0=>X842ExGN9b5Ujc;rn6YW*c`N?)*%&<)ld~yAod;{Li2Hp-DgJ?{tQjvZ+;KZroM79&kI8jz*{bazB%=rhddhhR;d z7+x4!#gq#fJZ$Fl0i;`CPL1Y`DBTKh^-WYfEn$+(o6TeUi@|*hKUUTp&h3lOj>PBi-D0QD%RHIO<~aIIb0R^ zx=MRvZ70jrU!_Zb$@4OGMHlJYfm`Wy;&LIJe>{e{!MT%>D83)B&? z3LQBZsKrr1K8i}F%#DVmzzIf3Nc7h-a*$wSx`ZBB+IVUngOCfO zT0+kRTP0*gbEPN`^A(*8rZzBaP$3tTC(LEYL8vrchdnf^r@P9yEg?5i0OUqcKeV$V zYY~(c8Jxn_A&SE_Fa433glZfX=!wClZ3Xuff_WEY2FHf1HOj~YF6UCA{EH*AV_JOT19ituFBBFlLFcGgpYfO( zvC?3Eh0Ne$3y2QaZe)mneHm(Tl5#1$mKJg6v6rxko4_po8DkUsoPiY>Zai|&CNW6& zmXk*Yt)QT9N7n&R4C9|~!o*3%ZBAbx(-A=Y#0|;3evwEcSIj!oHoOx=vl4Y&8kh--ycwf zdcJyY#nx#74^`0a?)}$|)VwR1qM;7JCtO-WA8ax(i(E~G1bPaEX;ccP22ya-`4x9y zY87@`s5ya5eEN}^N{fx!lDRzelyBbj%K zF_J?D1{&lf$kQRi&J2sAy`dkY5ulPfg;p8USR#sHFNh8Je%^S0ghCsx(>RYx<07~` zW{WwNk{L^VH`HsHSM7uN2F7JLS!^{bO3)waMOLt9EXWkr2KugK@)A4Qok`aL{TMrO z@0XC6-)f8Z&)^O!c~)Q!^$Bq>+pgtW1m?j*4^bYK#-Sq7Nh}qaBy@#wffRvBC`i)o z1!+Xa05R7dxg;io!6Mw=^fds48xh6v^DF`v7Oh~!_s`<2fobM7frV5F%+|)I!q;vV zM|>zAF;K+Ope*&hxF2Cej5c}pQ1(P)$09T8atsw#b`*BPFvw^RKSX$j^;uF&X@9V> zf0R5Lzqzu6-#od(yp7V5q9om}0=-rmj#19pUmD$(1KxwVn%g02E|u7{ysfQi9z|iD zNw>qBAx`^*6|e)Cmrw^XEkOi3vW|u#r6&>^N3L1G@~+THz`g`cH4gndIx=(`pX&4U zn+AKcOzAX^1M?SeGp^$pM-pus*ar@{%0n6_98scF-*u8*{dFh;QxykR8ee;cG5|K8 z;6muv5idliic}d_#tV6Z2)%8`kWLxt`1T&iBBOcXM?^I#hb0*QWPwe6p1ziPL+=s} z@PYHu-q2t0p)=-(Lp=yL-i95#aOfhtuQChtTAb#hi2?Y~W^puXk;-xF{xm8j{I z+STnpx+RBg@8iNU9wDpuIIw$HX^el1fg|klbL1*x@mB=aamjZ5lyp%yAK1v`2o}~> zJSXGeU%B`OXQ25$5Ew4k23_qw&YmxziTnc^6`9LzCOBNBKnF4*iB6ud2a}M*{JQAV zg$fpg@tbe5P6lCiMcig!m-7yH5$w4vRiI&c1gyYl`4t15awbDQ zPvc8mb-){Wk=lJ^UU+Gj279KfRGGPpWYLj~5ro}df5F@2NPru?Mj$oxY#Y__aV+jdX zP73Q31cAP(G%aq{J>q)*P;g)APU z8q+3#au-{Gtk*JVzg|59dtGvsP*&3xL*)x}2&!T;b#5G_nS5HhDrdDpbCg&ZLFi6% z4dqBecXBhF?D0qN;WEa@${=k7FK))8L}X6}n&0IdV=UJQ`O&zfJSabMQ{LJmh(14m`D(@I5+CTt(@bkSeewW#j!Hy6B^k~GCrHm4S|tuojP!&@laWa zmtY%JpPH!6X|E=!0(NjxLEDD-OhKJZU9T2#{y=(e9o20K&@JCqz^8SmEn>w?HvM{v zjF}jh=#teq^m(br#Vim)v--Jz6VVVlN;S-9PvRxN-C=SDe+iz7`#ZMSwdKpeZ?V|* zs$qgHI4|JkT5J_y9@TJ^5PaG#;>*?7H0%Z-HW!OnJVcH4SKF;Z{e`64_^I#;?8az` zk7Oc~RmR6BsNy~vm=qbSoGYlWc*xqYOO0#*RV-*@8zvBCiSfmn+JX;?>GcA8aN7Wx zz2&(U3NMTzyD+Rx@V4+5gx;p^f!zp*DZoXzuSr~i=IXrCS#A6u7OMzxBZrO)WSAeqyW_P_9xT1&mD6DKSOagCK(YSJP0$5u#wLjdX}2b%D>s( z5K&N#rxa~5kR`2%OA_2!xY&~r^jonm4E!RYfR-;QKq(45g(%{5>^DRNkxh6pE%3Egx#(OpjvpY@wh^bPOa` zW^R@7$T7kM+;T}|B8*cxc6D-HoY?kH!{!)o4oy8Veh z=`V5gLGBGUQ-&|IpPm4%A($oowoU2 zDSTfadC}RI-=H6jC4b?u0~Dr+#0-;Tgv@}d(;5Y%%Aed%;w$JBi(>>>E^QQu%;GDt zw?Vs0IP^;6pJS7KEZXXkOj%=}rVl8)_VY;aEnZofG=+R#CHNG>Ip-)zi6FAcm0R{#kPdwh{9)fM*NwnA@ zZ$VWt=9|vYd?51uq5xy17_|Qj0*uI3;-7gFNR8gEEJvj}ovfxw$7?{%q3Db4*!zh& zpq+Sf5WbkO7qXo_$Fq8b+5_w*6CmWt5k|x_k+D=p90qD{9=a2Gz~11mFg{A7BS%#r zB7_h$P5DX;eZXqRPo4Er=S)1#onwr76{mw+++g#u_yFG}Zg|pJ(g(rIr@y3VIFr*C zx4)K(YC+5f3)dG>cEIsQ%=YtiF-%BC@;45li%OebqYS{t^}uiu%c=P04LADatS~nW zO?ksV#qMLQIQxo~SvraR%6?!cJuOZji_3C)F(;gc5<3T?Vs!qAC8B2`Rzj-X2N)Ju z7F8K@Mru#c*h_N?N^5+DG6p*JR2s*)(rzR2q)3*yWTA5sUjmc25!HqXDl5;lI}W;^ zWT`Mdn;pUKZUfe(#veqIuL-`6ECSfZ0bzsKpyLxbY5{uzq~349hdIJ3!2sMoIo7=# zkVE3$D&xn(S488W_6$ev~%N@EsN9AD&Tl;r++5+$C5@|6His=@OVsU;q%G9i*>{LQZBqZH}kc%=MzqzTCB zC2TVxr@@nx+KNEb+4ObbXYt6xS28rv92}@Op13SBjp)EL@yJKxk&`12U>XeUj|c6G z2T}Ex*)32uF476lEiG}h*F zCxh(rt`IolA0MU!ESY4h0yd{kTy&N305iN`)`z;#2h_}no@%@ZScXbP8=k z2}Dz{=Y$zga(YAm0^kBKV74I#4ZbF!mlF(V4-rm{=V`zf2~!@hI8lXl%!51I*ApNoCgfX_wvizy`X~jbMaZyM&`WlACd0}Ic500ySpA^IfZ*S0OXgqEmRnw? z@_mu#x%DWcSCj_K@0&y!fcK3-33m-GKm!Ft5tGU?W?scLrHLLlJM2h;9&c%HYk5u* zozL!Vxg`gmRO9_Hy)P6m&(Pv30j9I59tU6IdYJPP8IOGG84@Y5(chg>vG%rnN1 zpTJZ%^$_@-f8+tkiR3$DR+Dc|Kov2M6Z|2se30hx2oG-T*fLQPoE8}&c|{B~Ga*G5 zrGWfeq%dRMMqM~5@C$A@H!PO*4@E>{;BnNisl&4DZD>+a+K=dBUCWo2fqlVIT0)~9 z8u-Ay9<5xe5=#l(6mNJ~o=9SbS=f9%jns^u%X7JR;hhyXuz}cKyYl-3J+YW~X2*aX zIn@CXrLOSW69WNgpydPug5Ay7pztpcL`bA zURvH^81p%67^uPCuF;iDi%60+VWTZ3K*9bpmQaw8^x4`1H(*1AgeQ|k11m8oK`7Yk zDJCfdE(j+2!da9Z>)bl*t_k{)aA! zL|G5DQ%uQN;0Jnb{yl!aML*f_j?4mW7C2RD{J_qix;WQ`Gh00{A06MyFuH%r6DZA{ zN~!Ty8#1Nyj)~lF3}cR!D^?oXarA`5^UUCDGUCjCKlFq1vvV&)7IGsiB?g*5eh zD2%5RtTLWM3QRra+{S()k$F6epzlfP;+ZTPVS#2suYG@WyHhbDm5q=vz{5t(x@FC0#t(ZW4fP)s9n{VZ%t`NUWjn5Qfo)7{(15`r{EAtv5 zeK1zr#}~GaV`>sRmYinzMCVdM*6IHG7#q3ygu-9ObFuoZ$-N?Y>N|`!99Rx+gQq>r z>c0^YF}5J8A(J0L^j+ka_-RNDxS{FHnNR15l4$334aoryc@x3##=R$iyk(L%QH>}M zVH&ScxTien&s-D8j%9a~UAq;@MwOAqEhE*SSZrupnb*K12v!|fPWzJRwv4kF6-**$-SH0FfvVUlAw@zQFbFEa9yS+QVtA{%)pP}bzd4Ra=d}(T|6J*Igcj= zRT+!tN<89xFQj)Y^^Iw#LB~jFr)_}hge~{E7OE2*uAaY6xe5^~jT?Bpk**PjrxT1J zh}+xt7^FkJyfHguK9valn0=l-RBiD2O^rj;z@2%vLtcx1nC<<+Z{SJg?fcQ93w*To zCcF@bARy0ygPJcdCkNUtf6d&{l}tBqJPP)tE1AV)h}o4Kgbjl>BsJ^p@a9-J(kF)B zY=?jUOTvec{z^N%B^Hk4cKRZ#$YHl93e)641nit)JG{-E_yko&o2H{kU<%sQEZVe* z+Z3fXd7FvklBIJ*@-`o}KhQRB^IQ0cMDWv3pMuojuC@LN2+$wFWzUq?EqIQp{WI@R1@$!cm0z6%k&5mX@#XDOZrJpFhsw-9@|ox7NIyO{aAgzFN8Jt`>QMyY1D88%4E zNg#~np^sK~B<92DX-#SY^Gj+?U$~2nx-w3V;zJADhgf(-x%uTnH>WQKI@K(*g6fUBkUXU_5(SKQz5d zW0Ph^u0E|Cg@f#Li7S^W`|CxM1V*4$&_5&r0DuJ@Z!cx295^^!IYiT9&m8DK4i8fb$JD`v7?36I3I z7~x-*mJn1lYcvF?+?7TIs`}s^QN1LnDJ51x?J4qxKE_cEG+L+y(OF}N6WILbi0w>F zb_5380Y$msw29I55@X>Sz6{P^@*8{Cv#j`7bX0Q zUs-2QW2onsqK!NQb^T%pbuBQnpD}YkiZt)}(s%%yT!wKIAO3w`9R5vbXpZ}0mBjGp zBFwcW04P+uSieM}$doK}n+ z^bt9LnG=wMUYi^kL=JjMTn@Q;0{bQCVNMNL4kCfrhUlXnvHM3Dt;6EKsqt(O-aB(` zhwR7A5_4xSm-k^}JaHkShUkq8ZD!d3@2yuC+y z49z4`GlJ>9+QH=UujC8Ut$OJkGVFd;UzD=~H%c%&J$BVmt!n8ll+OoZoRW!$CkjC?=^F~NwL z#X*O}$VRCFa3qGh4#t2Jixc_vmt|m#OeY{?0yd04y%0-61^&O!*Sz(A5{twKYx;jD z8C_s2HM)6*DVN<>-QzyRbQe}=))1u=F@b?hNFXVlxCMsCe=fi>1B(~TmMidrULAg& z%C~@p{$x6GwPQx&Nhi=Y_1v|zYeiv1Ej+u)RxUJvBwW)Rsl~!3a2J9S4r#46l2Uk0 zg9Shq`=d^5c7syT7Fl8mP~Apy?}1GF-c_Fa`uFYv3yYDo0A{;*ml8*w?iI^I@XF|5 zhd1N}xYfcuqy~!bL+=FWbSqP|D&q>?hk*Ta@*?H(QNm--v+#hRXfM6*M_VZZUl{?C z(9iJ13@*HB{ByXOY3GA;3&&WpgjGWCrCGtm0%g_dOnWX3b%`U{9`Yps(Ayl#8DV9n z#j*hg5dgR>awI|;L;ybC18!JmS0)Omal~ABW5I)8z`(J85q=`C5cZKeIc-H_=H#wh z;0=9){1dt_mTAct+RMcC7?c^!F78%Q6`=%8=PWPjyvSI}=u#6PShD*$YwtrRP=~+U z8@sUeh()dqMVu`Bp76L7gny?u&i)s@QNr>x^v2msv-&%|(ernDXxsG1KX z!e=i5Y@TnS!I(v7QtC!U?Dsy4Vy700}G}xtIHr z^*VSRY=^UjL{_7SGq}Xq5VOGSPaF@>!%5~z;vI2!R^sG?Ol!66d6L?3FR%dZ@o9q{#$|suhIcs=$hwF&iXB8ZT!1LEwJ~YXORy>4g)0)r9SAaf} z;SVB{77Be;f50*`^aqAbNq^v?>CztgobB$Rm$DCbCE9)H=mSMTfZ>R+b}JjE2`} z@baVXTQcJLcDl_E>*?rvO|7L!#x1~itxv}>Q%muXhYRBfZ!KD5{E5dxw$`q z8z}Rra%zpS2n4vUrlAN$W)`%C%cO7$Im2b1aGBe((g6na}Pi@52*#{}_WAJ^6@;;2b+i}v&+_fi2P;ST! zwbd)B`)QqFruaJ>Q?<^$6w-i=hSnKq)!qP11%=w`l&KBwn($l-Gw!=2Kx(+ccnLzn zx`M;|Hxb3mq9kGW7_}`IwJs#%Sld4+IQGXN1s>EsZI33a?@iI%p*!x!K7zYXjao7k z1{Ie&%2L~N7dM^jLCozZ>N||>nAC%Xgdwz0`4^PiL4dQCx$hsXjcF~(bGIZ}PVc_9 zjwBQdaU3{U{pVup-b;bnSjfcbMvke!v~0YcRu7A6mJ!6MXP4+KOKh=cXR zVn83+^#Fw+)Wk|=C$1C~VpIz&z`pxIt9pXD4p0H?|3L}jC)rdNtrIz-8E)e*3rUxt zPR2fazaK#z=y9~EsrMD+tmDABm6eSOP--hH6RwR~=?5GA$z$)qQ1au$z=w}MuEWQB z_!vzeQ}OXGKGNtT6CXYJkmw_Ij{`5WR1eKTb&;tLnNq(@BJhmes5ZU^>#MAXl-%H4 zYvQzl=>pSIQ>!aIFHjaw;%~!V%B8;2`yT)$e$LZRlzs;2=TrK@VforZj4`P69?HQE zDmH}=#|MT@(9y+in;d2ea$6K5x5)s2Xy&$tmtMXqQK2pvd59qLctCu@zT5TqW;Eok$<4GsGZ_2uhG zii}KZfqsyU__RhzYuAptI{m|2C4bcW;Qbh`gIzrCGutCc>boxWoV0o7XHUX5-^tM! zAYIQ52 z^BX+B!1Fkshw<#fqm}&dY`Em1vv?bL8+iBP-HUf0-hFt(Qtm_jct`P$;yr}-knYy0 zYh8V=Xbch-HMkGY5FVcwd6!D{8xD8urq(99Mayj;)bSE%02Hyfx_teRzJ30X4gb6m z_-9=F?8zaNyUB-Atid+{Ep z;hBSHA)XREEAZTk=Notc=N!N}2k&gWv+>TvI}>jo-afoNczf`c@Rsm)6nNjlsCI+Ql8)Dt5-RfQxC&@r)W&TNX1`&#-5IoW?pZ+^FSDCE@6 zXp&asuIzXPJQZz|mC!t1Q;Q|%_B>zuUon*B8-C5RaeC|M1zu%!+0t@(a_i{U3GYK9h%yJ>#^c&Jei=QYSYJ+$?DQKD zVFjKNJPYy6!7~d_9-bULz~lb~dc=^hsKG%zyYT#s@{ZyC|8Mljk%dwOJ$fed@6sa) zLFfmHygM82d3f%?6Qd(vphpz*e@2fu&saY3QTt!fBRlVBQU0It9K!Poo)dUZ<2j3G z5D)t0e}NuRVVdQ`Z#JG8covdRtY7}W&?B1{p_jhcTGwH(2KBr0puhpnQ>xZZl5FhO z7#}Z>YfW1`?@jq=GmeGXto?`SCu_Bi_P_aR(obq>FVIR6?7(2b%b4fRsh?Q1Xneh( z6P!K9F4m1o&egnpJWemCA~n5-K_65O)o)k_7EoI}H1DK*Bi5B4&pRz&13u?{tP|js z1+UZaN`co2^T+iYM2!~@BVC8S_@a0X(Tm6|jHQ83bAZuNV5?eEqs87`|AK43H}V+X+Ir~)qQwnP|2y@KSI?hImVI}m*HjxT&s!F_=QK8T+3H?9trL{ht#z1p z!>9+yG#VWRq3#|ixy2cjy}`TFpd8gwDz&U11vzx^?op1G^^(>Jj#{r6YH$&mmMUwl zxl}P@`He)Yb3x>u_ID~N-hEK^%)swO@4kv5z&yQuL;boK@kakt*MK5tr?{){fN8Oxw7CGIP-M}eepXS5mQ1*zVvSVdLU)RI%Mz+B2*8a;Zh~! znCYVOrNJ|<@(^;2AtQ_?CLo5r$tF zp9ll=8pk0hb0jDmL74#Rq)UJ*K#B^ldSE5YcAezF7+lSxZ!%m@0j{5D-2~SkF(^iW zI+}qh}n)dQ)6Zw;PQ-*RlY99oda)Kqf=P#e(z-$*SpQA_I7oLE@) zNLUWSVrT(|2W#^fTKH_Vpz3E+vk~e$dTI3uEpiwwvg2rxX`_YDMvGNStlI19H^ecd zn#!`#kr9r|C1m)7y4tK{bo5bAAf|K~Iuh7232Z(a7d3{ES+3Ik?ttW{6|I zQ223RO$esLSUQ)L;hi0oNJf$vevHYG8L1>gB1wsd9s}n?NYzcqW@^>fEowm#D&1|F z3(%A~HO3^=uttj-lR*}!246$wND^vmOh$Yd7bpW;C#P2$$ApWr8|~faEDn!0A;x(h8Q0OOcYI6g(uKIe z3sIFfgV%tXfpo6#@Ha}zCk3a>K5MQFI)(Z}K7>X?;sCLhyJy=~@Nyf_DrJeu`1$B1 znOg2P?nd27it;wdI7=kByGSgN<)2#wk;1k`HO6iTm}uEQr@n)h-PaOwpk(P0>2rNf*=!i3nwTrI`^LP+SepdbN|{CP*rBu##s$RFPsI(frX^ zyc+WX_qs?BJ&T1Z(!x_R4t+$P_rNnIHSva$K>rIYb-2g-gX3rzMSB>lUhQOE=#;nl zAK_&;Ue1lih*&$0=@?W(^iz2(Jw2@OB&#tQ07?12wyJ{nsv&jsdQl?&-4MImGIJtle z<)lnj3#m6DL#r_k0J#BAZzv6UMeab;wXO)6Xh45>Lu1J?+_TLa8rUicKy#Bwo5_Cc%ph*#d&*4Yfx8^f=JG z`&{ikZX0IEwAT144mQV$nGqdJPf#VGg zVT0EOkhl3`eAF0^71%&>qfGN=*cbpzru{dd2753*2569=H6jn?AdZ34T+YJ*S&XVN zegsI>)pyhw)8L@tK(wH~W1uXfNcPhBpM$i6C+q4bwP8N2@4)O2LQ-&wXdf0+XI#N^ zNy<$de=Rv-{i;mTZq7$9@0ea&NoiLhEqcV?1xtn?G(mZE-bJE$sp?8kuKF^lkECwI z>AaK;81w5ouyDj+fB+8TreL7pRDm_0MW8z>_K=WMb3cReIS(g<2ijG6Hi&@Fsdy_5 z9D>EU5vxv~yu`eMd>zWTf%YVMG)&^#K}u43w9L<$ZT~$d)H>uOk}a?6s9u9rB`COR zTN?Lz_oX&K7WgLU8<;No6l>#FcQIRKl3h#9W8Qr?EmeoF)jk5ihVvCSeHWaH<>7(& z)_7E8kZyBrn{eX->Yt&z|53la3^xtkwA6fEy?CwGp(G8Sgp_-o5J!?S21s0CGlajO zAllrM5XjcbccZ^1&7a$Y54p}b!#%20icm;i%fNE^LZ{@LtBw3#WS~V^=>An$c)+K> zt8VKAEhV^cUZLWxt%m6n(KDz|vI?R6aVXdin5r2}^WZX{UVluSkkT+tOPQ2Sj#52Y%i0 zLTJ5=p$No2Y<>E4@!*@QT1!0_KYe=Xyi~sB4&5{aIn+pfAUUY5u4x@Zf&gsB+|zoW z6Z2`Sgm&^fq9?NngY?lydLFH zYq1MVeRk_ch{WL`zhnLm$i8kv>%oYM@vASj@X?`l(J!y>t08Ut+jQ+sk~j_)w0-*Y z;G3?OwP8^A&wkljW)&P>u+-Y-mfg#iL1DWc>XvU~BV;HrT5AgCr;G18z5P-lY4I&y^1_*%-uLD?M z1F;PRHug#&KrDy78YqOIUaSUw4O8}Cx*Pxjp_#tdgJDV?cS_slo4>)0eg8&Rc!Rsa zSzTjX!4^t9{tj#sZeOR>dNvLo#IYPHf2mt+;HGM;Fbn0sIdISwULTcbYHw(7x1Uc| z|29R-e1x_t21?#?2cgV!)PH2lRlx;mipwgEE;c_II2csMUcv%J+6i>ni^s-MX_O6N z4lMOJz0G?Fl(j%yMVh)M8u>r?%x`xcBt5H6u`QzK@U}?%doIm2P?CZI8|Vz7rS#h- zCp>xcGVcPar(yNWz zW(yt$3|KmxbsGoEJd(3kzRM=wkO+oHYb&#tg{<&O_YPleWwp`5CsDB9>oE(|3t-r^ z4((+E;F;LIlJ4%t@qyek#g2g@cdnd4K&&>h7?)5vskK6Ck<3h(GAWfdP?mG!Ss^%Cqwkkjz({WIR!33}KI2w<+18gh)EBC|U6 z?jeV4qlHVh6e#QNoIWX*KI+w{aQdhf8P7?f zl@UvdGsF=mr&}gp8@v#ZrvxwDD~}0Y0HYmAb~r{g4n@x3jYjw)Cxs(7@;V&Bn{QMy zgFBpal+k5n!HSDP^h0DH#kl(r)KN$frQUtQ;oa9UP*Myz)I>U10!A0ms>G2shokjM z42v?PN(^|KGC1Ukd<$=aYxEo5hvuQ{)#%+`{l_%Iqieknk(Q{p`C;-mmI%rYkZ;0s zuWER_p)0X!-8fh}G+RwwJgjg@3At`A=uaRv;RfWcK%WWL{3+D0*g9k~Ec5ouiO&p!+G*l=UN zSAP{D&}Rc|9g!4DI#M4|Fx5l$8{1HmNoV>hkyEuOz(MNM91EJkmeQuSK{*PJs8${gS3Ii~VJz(@#L!Eh z#abaNn6wy6<017>X488?=4W$i*x9aV%D&g9X|9*eG3Bp{)4DGIAKZaM?P z5y_$!8TWXbk01-xNcJ{A0S6%1OfR{LMrd;n;9d^DXE+Xq?7L_IE}6Rq-{!*n_M_3r ztMCz+!SI0MsXz&sNyLdj7pDIF_Q+G5ED8!lsWJ8(1EoVjbPK4bL%zMW^p(!i4`#b@ zf#GRX3w)SqF12G&8hODe+_g8Cd#oH?hoIa#dDKRze{Kv*W-{Jk*m3VhDUL`XH4GSs z+|%$qPEJP7LeJn^1Y{@xn<@Cho61()>fL9-az!1D@$(L2 zFn10z`!m0k&;)EvX-|6TS&Dlai1~XuR#6(YDxko=lTAF{I-R-+>NEo-okiPDnA^ zh@xji?D~HFeru!VT7rE3T)D&;Bo+aKX~zw8BoG<1zd;-zQfpnS z(6%FHmR%J~=_BToh!2%pI^>oUYe|^TWgdYxxTPF1R+8<)yN^I@r+CDiirF-DAj*6S z7Jr93#?LHvymw8p!!@JWu?o-k@jQg53(q=)VRpueyqH!HmKQ=P$V{iY8uK9-sw24` z2ELN4N;uzX;nGuHV~fh~mF z)V5xtvISx#l8`^ zkwVdssw!Gx?`psbTWf?^18b4+`k~g;g?GwVEZi)67h+bt3SIg~C&rmca@g0Lru4^A z)XT3WH8^i;UFuxAphFlT@*fv`x%WVu8ohPrX88`)$d^l1W1@VcYK)e1%DtiApg-oX zAM%EXg5p3eGQvH5x#oYc=MNJ-edf;x+KZG%^>C5-C=f{1{}0X3cr3C_kL4w{Y?8 zTe5?9pm@pZEJ{w(yqLHndTzF_KmF-j)8Wkd>vMS zN;+ye2epLAuQBF30)V9x&@oZ$QMODj^Ct!lKi}46G@|#Jzof2H>E;79&0#AceGTrzM zE>SPIw*RBW6}PfxArlfqsfS8vXpl;u_qU1%^2XY*g5@l_YDDJEQrK;4W0GqHeGkoj zmaSh`Y0M$6lLXPq3K$(j`B&JY^s%-meIF)C5n)kHgA~*ABk4IyiSuH@%SjNUK_`?t zW}>NqzBD*$jfM}IVA!gmW-n0h^P1WQSAkV;3k*vV1cqN7D1zQ-Mx~L8)8;HEbV72M zxqSl1vF1Eu_+kB(KkC%HXB;s(;h!mgv8ZaG<%*TH5Y^k*G_T?|97HHz2-YgY)!tfu zMa$^cqDd`fPF}a{pM_J$M)rR~XcP)yz*JXu@%v#QqLo#S9Do2a(XgzcStqbf1d@2L8HK-b7m2e`#)D)c3b&4?W3Hrq*xO3s1+ogry-RYi{ z+u|&qH&OXeN)sus8`RUSA%o!Y`nu6gxk2h7r(^dt?k%D!MZ27hmz`^76^xE&)c0}>4AYl zMB1FHwq=?Iip6MxoB|>wA>1kU)oR0P=TQCwp7xKu+Uxfmc7qAicR5Q?Gc0wr(aS(K za0JvFdJh3w=Jk5c^>iSm28SJSMzenahbz{5lpXEoagXo$MO$4Bi*D1FyZy^0Wrcb^ zcgvN3LJfo3OUF%pMUs2)_|)6?mkf_ma57GsI?+B&xj3y0fa4a7rdWZ_sXh2eknlJeI_)xV)y{oWAadOleF_0jeV?uJEJ z@GYHXwG_^PwdC4 z!vB`Hxe0~PIltSFx^>S{h%gWdzgLH`@zHBQ;o5)$z#32Ue+eq#*GakQp0Af*RmMr z-NE*rB(0kx=6CBW#`IR{<(XBL#yuy9n}p7>$I75l;!mbFZFQ^Pk}`R?@Q^}`a3M8s zFNHFPzyl>Sp^WMp-5rEr>OqR!IHZ?PP|x5bU|;(=_cHZdZsTb6HS73CEUHoZVF|Xq z2SUSwf#U|G(PX5OhOTzf|4w+lv}GcOh~}SG5uG-i{yOZQcVzn44 zyoJv?ZMhEym6qU6GK3jCXKK54Q=e(ucbCNKdy^)-HkC|U z6P>2?lc-WJFG+txQ~H$&+K-wM-zptKAdUfO!_(%c|5c9Q0FL%jfpr;y>DN{u-`A83 zyO@St6tW?7czg2EGfT}uESa=h&$+d6IaEiHo*u7F6UbF*brrtm3ZO#Ch(r$74 zZ;_NcRV%kKUkrfPkDDME`u2ICIN|lZ({67m3F8^|D)VSJx}tY#x_Q06Dn@(kxcV+e zPY|hz!(JqVMIsS-xtm9pgRo8CBcxINgI?r4FJl1|5Kg4%1xKOW_eJ5ire+gnP^uO>vy z&{y_w1jPIvkwyK_Tw8eCRA|&qIPC;hAU&KGUNL5fXl7JX`dml#l}_@yVF>-BjSd~w zA8>|m1|Kw;kX@lW8vH!Al~jAaflpY{7rS{Nh#`F zTjFd4?X3H|U|CE|O+1m=sVQFIP%-8(38P3P(C0K+Sv2SQyTWBY`71DY<;W$1f(Z+( z<61k!qmcSZybv1s;IbyDDCLlwjsw{%lEOu}a7elZ;JMJ?ZhznFdH`mMF}DVY!r65pwgn@a zuNcsO;@AWp{`|Iu`cj`-9<|h#UI_3ly=4fmuA-qnya2+Mp^qVvD|dGV4S0}eGG(im z_xWGi+69uUuks|5kp`TcLbPzPq~GERmrLPdw|dtAH_iC@s1;`XJkZ52#CV+PNy4O$4LR)MVfJ6;)^^e$ z!yae;Yt9OB&h>{R5!4!SP?xmW2ct{+k@W<55L1S97{c)bst0;ON?3)e|u5ZgL; zc)5gMf1RY<-nt^y4QkO+F^=ZaRQHyt!Nzg%xs-_q=2E?6cZq=V>n0{!MDQh&44y}u zx#sYWO?f^#H;Tboas!4?c!iUO;Tn%#<_s^!afchCk);4441q1d%d3-pFt9f>ku%2V z@*(~90t`|gI4UA^@BpnNmZ~1Y6m&(1+N})PM34gjA^$2#!7?JwYrO_$N=}JEe)I^h zwK4{I9h3)D?h9aF@1d>GZD2bX^4q|LfL-yql%cTVyQI_+YWFd){VJ=4o&PMV%P^7^~H_ z)?bJP`YrtTQ{MhQ1(!mT3zir6(pxQ@!(Taj>1}3(Q}&PpTT|h=ahTHjxExM5)YZ(xOL zjiI;2YO~De>hMRmObR|kay;k+Na573rS3j_G<8v>&C^;ZuJa-4g>+UH@oY`QR9E@( z!)&Bx0euhF!?6>9+=?Xg=T<^*347UP?!Dx)v&hA_HX2GtxRf-7xYTlYYziRi3?;S< z?hsyuvQ&$pP^<3n0lqX@GQ)7dm+Nr+$9+$|4Z^s=0{I?mFu;>=STztAr{EH|I^L6w9kl*YlsN7?u}6I?#pivkIp|>kKH}J zM3Q(EwZ8DGRp#L1U4!11OykKnn zFK@pBx)NKns=+4PHydJ(Q)nTu!L4@LIq-zV={9!@E(oesD}DNoY%sNc?4S&7DbP~= z9or{TW|`HMq}tX1fPm#jcGHnpQz={GLYDr<=;mW0mmB?zTyj=q31A)OkC{`ji5r=L z#5~d{V2PA*wy}?$FF8?U2fAJU7)`>o-XrGpN*vjY+U!NAH$=y4F!~jo^L+vr-q1O5RQ#Cs@{ZX$ z#_gJ+U`s!uSbC*9Tsia{bqvPln66^(9EJ|eOInS@1bBb<7LPjLf=*Mr zWPa-Jp42w2J-n1|)o8&f;SJJE*UU0E=&&Rti_k-zW6Zh07K3NPmUv5@q~AJG;!zhK z!=>gQ2T$qUcYJ1Lw%$Y-XRAmFbsn1Y*I>@a>a|vzuRlhF!T%}NDOwk;E2ir12`v-+ z9a~bJV`f&l%~9%|Ziikhg`FTC5jyeh8VueHt2b_?&ibI= zp}3cnnS=gMx2z;Jlw`~hCZ;XVeB7J(;A2Qm({YEH?A`a7i*rz<&Cl!iN&dktJ9PJW z+$_9hYikPhpNf!Uy>l()c=eJZb5PIm`LWU&mH%mYB4sKncApf!zQul_)6{+W3+yB<-$i?Lm__elriYkpeQG5Q7@Np}DEU>n^@c~g1LKavz!tIA!>u$Jf zU8fUdJ@c`_3u@cAVrYk4#R2fDeyo0Qcy*OA1|I66*`1EG;2lm77M?ah$E2Euw8!cO z&k;FmNUL|xh7qZfJkMi;!^QPFHs24{k@AH|j`w3Fyqh%q4-MHW5|A1qhmV^4UJ^%WoapOa!P(OB@>0!HY`MWb&qN12CdMs@c715 z*U|9!nZ!d&+PTLDEf>f@sRYLc1lPD5N2v!F;w@q{WIr}|uFi!qO;OHK45?8<4mDCd z0s*HxbQt%C?3kjJWjCa{+UpQETtjBbolu#g-yEDZS>Mrkjw4{6NWC-)&3ilFP}`NcVJq z^YB7fMK=9rP;aeL8*`oE#@-F}`mQm-rZwBqP&pT#mXd4to;*RP%PZDRqK>Q}-S!k$ z26X`r5zujRp~r{0jFv3k-!?)TMKTsBexVQEVe!PPXn=;p>#QmygC)WIlSy0qnKbun zD?LqTB-9-0du7;hm9O%j)Gk2bJWAFbtQ(C_VDWb54!84WQ1|?IoY1!}^RLg`Tt@5V z8sm4zdB;V0KyA##=A_nvgBy^nU&udiCTSNq3n(+C6JW7Bi2anM&QdA=q`zzP%^-Z{ zOjNf9W~3^O&Xbs!S+ai}snwNbFGnrWb5u{lNoa(Jh_}G{Ot7v{Hp9qADP8$osKypRGuH z?nTsaX?8Vq(kZf5n#-F&Js>xhl5J((j&#^5hhYBeSWxNyGVs%Abzl+qoi3_+(a+>bhtxk$L^@ zS0F^aE1ZF<#zlAl#3e8vB15_Wr#UVL zU+4(2kGB5o{KnJrM)crmQ33(k&KF~-0*&P$GKeBTp~0rsN&ldH!$4_c5D)Fb4gfV@rOe&kBFr9saf_{B0?GUHIFW zfOtx$Wi%Z^@E6j?v{(H;s)SwQ!7o!&o(-_vQ){dNU1y@VFn;cAd_$6PGrV!PqhZV? zy6=CnPR^+{W|A9l+78fQeUK)Aq!|FyhqcC!h$nE>5r7<_59Lv749`RYS{6ipe+N>r z#VZ}_Q02)uzc$g@DjA>r(Xuu+ZS)LYD1ahk3Mq`1x$R9nyvqYnu2N}Q*`dVG$(vRtMLpRd{CJKZmm{5 zXF+y;uH9nQF&ArXATtJuvC4WKC@k zG_}PUJeu7`m!lkUUah`E&;W49zEQTWH64@Lb3Z5ys^SG6x~(I$O%46`wODPk>WM({ zErmevBZT1ZPSHG!-~%N`(TP{%0x1GCIwmMO=2Gk(yO)sk5*#I-qp3F&(h1Dy)&2~^ zmYQ0x`T(dQl+-@?BEGZ&NfhqjnL2Q@W z5;lVMM<{0gORz9O(v(-Us7RX+h0Oj2Qh}uK+Dgr3&6y3gJ_doj1lnCrEONWH!@&Mf zeknBYeVbcxB9;8SAq`cS-zdo&8j{yS$zEA80v?7|B!~zCy}`zqUASDV7Ro9#nOP%+ zknMi72y0UFS0j-h2l+6@j3>k^Bt`w%?jjjetS30{3UBkPSpAE#K#m;YLh2fGe12)) z-y0%=y`rlDNdX&LP;(tyVa!NWg?_Q;Z_UjEiW<)Y3xv6h)cv56JJ)xpZNuw3s%Tll zCw}NiaSEjTD?y6@rds?pSe2MLt>c>E|5(0xjqwI}EgbWqQ^xXFYirk3Hdxk;90T}y zB_Aj?{*zesGB-~A)FG;}Ux=ZgU5?|Qp9{?$76KVzWL8Ie;h{E&$8p2=GLO_%oXt|M zG5B!n#hD0z7frqp_tVNYjO}v}c7gPpT{H$@ZDR@$-^TjZ5}4J39WCH6rV`1R3-rT~ z@ix=SL0bz!lD9bvPW3`E)K2b@K*!cbXtPPZ00bVOk}|eqz=73;6gtdqx?LVdN_&{CDIzf z;)*~6<~X#Us2X+krbJDzf)5znz0_Xno>7FrSuN;%oQNPb16-Ab=<~DI;2*SwLds#@ z6nXxdTH{Hi)Qq~);G#nLsx`(SneXgX%8LV2+uVzPPJhurC?d2 z!#);ioK)jHYz1-?XK!?OOQrD>Fm75Oj(7S$Lk%TkBd!vxi^T^a(%s*$tf@67a4OPM zE)VmWj}7&E>ClH5>{QtEc?WBXNjU3f}~-A^iWecQ)`*R%fDr z^93OU5)~{e>T57I2!TLQ$p@Ga0>mZ|n0$bI#37lG36q)GnRg&qu%Ur2Va)2bZr6L) zcBSant^M%cw#seY3PO>hx24)`?Z;ZWb-Tk(Z;RC;er$99&pGcqGl5`jyT9N4?cN!9 za?X3c-gBOF&U2pgJkL4rF6c>7Wa<9qjGBSBi>#R(VJj|p^2Ku>y2EO zxc!Cuu3T25{Qs!@@o%e#?17t%Wm3Shns}WG$x+e!3u_9V{L#6=)IxIhPuq9hGTvfZ z6L`ynfww0_UfA|^z+g~VYb0i%yme*9cOsv$(M_Z?i zWIo5{neg%-4=mge$*w`kCsmq_>MBw!i_A1@(m;Pk(QtDHr_-K|XF+Slyz<40)@cO~ zJUi4n?Yr^lOCRD`;N&`~$nkL-mW^b5DDwJ#InZ~<;I3(Ww^FKdJ5{kN)i+Y+knpOM zCXUni(YWD|W&(j(U~MF$=FD0sscIz%8_78H0eKv;vIaj$w@-oB6RXtKs}JnK_S4lG zEq#z7gQ}Hn5bD;Wk#bZMXW0xv9VCUcHeNC^^#M{v&sV)uu; zj*twe##Z&h>!Z)Xxh|X*c}M=7oAq2xG}apX6yGLL)0t)JTzq0{dt0pHDa8t~+qzc@ zJgxr3u;nOR)#$`dx0LJSz)KA@>#@ z&aGWEfS4)tS{n@MFS4pWDNzM`r<2rqS;3wdW$?mD_6xO=VfWke)`C4E1RmbIfl6vC zMK*ehrjy|cJG>b|Y;)|Hzh?rh(?RXc!~Y;zVmGs>)F2S5-ZoRmAk-vC_)m!+j8*k! zWu5P7q=fd^rxfp1IK1~R(A-m|O7&8z4rph&OFZ<5zg`Yk;3@I0nZ2~>c5mpe8?D}yG}$d zJNM0+NNz>WzO5WX&mL$R8R*T59@#YG_^hK==?d$H71mVEB*R5x*d$EynPP^EzE1vd zoC`Zeu~Q>5MDYwTX$H?1S~m@zH^n5h3|$}}y!!f3F0`g#ub;lcv|W{R8y;a{;&YI)#%GcQ zYGGZC3$e09yEysGVx3;dh&sX~jb{t+jRD-f&skSQCmo_qZ+>@1(-iQg45GO}C2zL~ z_rS-wjC03euqM9AwklTz=En0LE40Qbe_`zEJc@gni&Uz98o6SW5JF~Jd~q+LL^-hb zYO_Aq0dXCf`mhjTWGL3)donIW~(WF`+(;Pj`$$!;%M*NyoQ7f;w!P=xLS5PXI-&Ha86oAt3G+> zik;VX$?V}H`L5Wzl)g^*+^fV$i(yuupUVf1#t$@>Wt&=P14aK9*B{He=Riz)bC4@; z6m8CT$)QM*X6Np|et3Jv5a-E~cRC!EI~{U_-Q-ROeOi%|iitZNaySbUKQ-`9DY+2P zH%-Zm=M20vD>9C7f*7WV)b72P;UKI0oD#*C?)5R2tHcdhMijj>RZ77uc z9iUsRe$oT+rgKNK)jl>d9Xsa8;=!L~S`*|`O3e4|6F68mnRS^h^G3JzU*gQThr#4geigy0fWLBEo{#ww|lbINs=jGmj!D8)(W{aFpy*-Z`9r1hJX9)Aa*`!_i;(T+*52EnF?lEA0V?O}d5FTX z#Z!d+`!x8n3g3-|k%(iG*4gIRh9?zesQTtX zi7VLiDhNbud*f$DMtZZ_bQ@x~ax6ksQf|sUHf7+hEM8X{L0Yz~qb=6|HD2=Nvgir# zw+bgS_?3!_88XYttvtGOe09Y~vX;evJ+QbkvT|8l><&_cLj9gQZ~43*f2XsY#1L+Uo9#MP-7#rzTa)BW|Vb zE)+L%Eg=i=wM*2kc9aaS)y=N>6ep}5j|8@_ZsuyJ$-JxJshoe~Ww0T<;V1aG6*?zo zyT7pASH+E#5OW$|yCnH%J4yyQSNTj~!~6`@rJVQ@Cz`kANPN2_XpjGs2&FR7UT~Ya z%N0YAB62DT>CNfQ(`9^Em9aKDbphBou#`X1mD8(E?Yge&WWl}9z?)T_D7fz_aZlcJ zUDb(QS1S|Cqg5w%o~t_f5iC0H$(59UMG7Rti~-cd@^_r~aE#@?>SUy#{99Ey3kBDo zI)a|_h&-;4$A^x@e=WS+D6j;hw_ADO)M@c3EJX4Ox} z2J@|Wp7WG-f(>m>WT6rT=0=}vloyPPJ~@C}_3eAi!87CI*H95r4Nr*X?^P8Tk4LGD zn^5X2<1f3|LXR(;t)X?VOX{tj!8Mj zhMRI44yspP_BDAxtAX8AtqK~NB&BFVsc+)&VR=w~F51NLXk}AyT5x#8)&9)D^&cBA zs5s?)ap3fh^I0dqHca?nQ*MSbyiBUvZ+p8JO2ERypLK^e9z_hjE$F@D#$C5Thv z=kDkoKQ#3&lF!QiOM1!84c39b7A=A3poq$Vk?S z=n(=Bwh#iMW}O%;4&sFbHRBwTKUfIJp0@nOp-IBe9y&xNszlj-ICse+Ge3!3aYk4Cfq@oADC6cy9a-ETcjSm^TIZ=J-|se~)ohA>bP2)`^FV^*nh z4lw*LQC&pk%P6-E-!IY!EOMqJmX`|#G0=Gpv+G$I7?@=p*J`g8jQ*Do9yfQtB^rU9 z-;CF3WoqmhBm|DC!zx^1<*tZa;p%-Op6lxUZ9L1>dv0XvBdl@J z@k7(g$`7xA&c4)SGB$*bm#64%we%$U45iIs4qR@RXk>neb0Y%7j!zzhiAV_iScl^SNi` zV(Xe5?nu0Hq^XeG*t3RLW!UF+k1s9D$R51%uC%41RgPQH|Q=&blC*Ur}v>qvAVq+B`B6kad!nuP; zP5U7+9BJkI4c#*`%XS5#@;}JXZ2^Cqe$ABYzE=LmJ5wo1C*Y82-7b%Rr zO^5MC3(N$jRBW6sh7e-z5c|0b9;%;yKr+d$@ETh|?`WaeTuSL@K1)i`u6+u(Vq=OG z1QO5*6j`wML0*Zy0kZMTwP*Sz*{CsgK!vMWz+`$CO~BY)AG6@OG}KTlVew%98~j>!+hsrhh(jH(r-Zu+WQ&gx6~em{)~u{|-o9>~93c`kmhw%%28T zZezTu`{@4svh*XsyrD0s4V1lfJnvju-H7$4ZD z^cOYpUnPrt{qf-iYv{%!zsUaF@TV72BkWkC&s($iug=iA6Fy1vcGYv+r(j0B|KqYC z=iV>H)L^jw+uGUzKFt0-F-ktl>CbnwLr2)DK9@5cT`V;>nh%OrHg;Sp_T+5xK2yl^ zqmQmTD0P1{-bw*GMi3;)hnyKNx`w$mi$oBLgfn(8u1=gRl)F-{l^2vBR;4}u_~Y?O z71#DN39ZSozaT?Q%y(FV#0*c#HKhLrizNl~^mmcM=W@g^6&xvknw}p#|L>y%52?U+ zBL&J{DVbcYUZsz~3|mEmv25!DgRx0g{t8Rfv4^semmEEGx%!(8_i^;lW#Vt|tyxD^ zrT^$PyV43T2c;DX6SP5HeTeY^vN7%+Y2zT8QfMcK!j&>;4lBlE-=3Ub!lc)5m+Bk) z>wj~6uRNLDv3MKTjJ3XwF)${@RY$g8%em2~Rnpo+Cco$pxia$g$D_}4v*hcaTe4*T zk`e5ePj#&4>hit6e49Q{8gu<>u^^z>Htg_X+>tP%(y)T**tSHp>_J7%?*5^j21|zv z)7W<)s&o~k8$7lF+o@rBWq0&4)@SQV-Svh0AISM7FWGm$32x%kS)#2%9c4-sWygO$ z@UTQ0HMO-M;F)-XjTP>G4_(E*@7t$1Wt|u}V(#0gO5&abcjyZ4g4{mYDelC;88d#` zDU71NfsA-?k*IA^fb{-*Y&LIO_gszy$XJp2EjOBAE+94%t-Xt6o^w@(n&)q>LyCj> zSR~h~Qg_#t|9Ii1jDiP_R^`Ygc9Hz%*xyjfx`T4B9e1|2a5bNGRmCE8<>+NG|4)UJ zv=%!<7W22gA`EWj__4&ppI)CG^UYU=v%e|~c5{2I&rVmcr-qIf6;J*XgI!N#8>+%` zWwo_Ts`8sp%CgcNi$1D^K~%|_LwH+k-Cq)LeBCT8mb2>5512;Hn?Jth$8Wwg<7HN! zsfU@0ZLxC?P#LVOPs@n3FKtyBK9Vxnd-?87eU}4$ChT@Z2bOlM($Ur;<9fZNN_G z54HhIdd|buj7&X2BSrCv!PPCt@b~Bp~&0oH<5u`Yt?rF8>}zsPXmr~J`H#!*wddOe1+v`HdoPJXMY+n zUw;}fa(w6m@o9XClO+S+Wc!<(ABfAAQoc1EEi zaS6{PJdg-4*dy8lF0 z)C}$hK|Ri_f9P*O?>hGQO}X7z`*kxgD+``H<=A6f4Vxj~h(rQ+7*0h#i1BPieZF;B zJh$MfQ=E{o@@wPA#lUO07R?%A?1*MPEB1nKo|Dp) z2wMOBUU|K~G*h?$d#fG3^MbACaLbYG{f$Sm;wjYJ-|NTUf_P< z0pLO4A>d))5#TZ4^S~3pSAavn)4*Zi7;pl30XPL@WcCO7dA(k@d)>O#{2Cf+E9T9- z;i{`9UO}B+Ce4a};QheEz+vEYV43mx=P36CEFmMd`9&j3X6*v#%zNGuc`hj*; zM?7L;llxzFM)&H__GspPn#EUDJH~iuMocBpB{_xxxi5jX# zT>6i01*z%lISy<>ncAx%|t({p0dWZb~tX zJS@Kclz*AVcn4g;= zjDJqNxJG_Pe#RtVGVs3tNj}M)q4U4*e9jx38YEkk_Bj}MKm9LMSALTAPn`dh^oRfZ z52XK>8-LortBpVHpP=y%M?f-1w(;Kor2O~zA=(_7cT=rV4~#STPsbJ-S>udxnT6T) z_4PUOyQR!%mNLweh0SZn=Nh+_m9;lxD`%S05k~G^J$Lalj9{>zUoI&yx6RGPktJRp zjS|CeL<}GQW=a;L#2@kb@OE@8Z(Oycwy|SHeQk4xtG=ejTRhO3PB zAF20u8f%T00Qt%D+?Ckr0pkBT?!N+|h~M(|c}!0z6bPAyF$tRA(zwdy(joF_xEfY2 zPkA(!u4<}nSeXo2b8FfBg_H71&4}N<+2=8>fa&#nEw9_>z1w569CUYj%x>Q83vBnMWOQ5JfIpe<)=TCKTV3yw?-t1yjD$SqHgCv^xP4}K z#NR1po1Jc-PrX3uwcwKFcLe;Ney=sxZHZ%A(!@l)=2b|(WV-`F4+RJO;Q)B(@@(^V zrlhrT>rOG3R_d2848Zx->qUyq%#yIM8jGZQihSRo$#v<{Eo|HhMRQ z+@T#Zmh%{tPH?@9+Z*!onsuWp8N$Y#IdhC^rJM!9FJ>%9{7nIWOT^Re z>1yeTEDL#EZi_s3xc$pKo15IB+F+>3z2lCE|Bi^SHnPR#39jn2RtB~$^>mWVXt`7V z>iP71pw{>fAoHm*SZgc>mV2y5ci5_Bh;8#U2ZE8HAz}Kt-RtiPY&V)b;jnv)XGx%+ z(=%aDsC@pME}zdZX5R;Kv48h}0{=kr*$G$f{r~m$%3m_-nO*c^C&)2YXSLXa)8hmg zl^Ni%E)ohcuAIR9%oR|VWg(A;U8}^mK+EoA!Z!FJDSc{ebBa-7Tsy*+r%&RIt@7L$ zVE(H|NV$|!>tlWyh04Fiqn~osI|F@vZhu#!*YBw{UXhSCPbdrpF^sFSTpnu$kv>md zfPrcl|3kgY>e7LRu}Pknd3~Oi9YK%rB^~RA5(TA-wZ?V{X$o{jd>)+zave#ANzRpw zU_zTEv_3fr+uR|q(4t!7rxIh=sh%;Fr`oX86ShKu9Y(Hts)K@9V5vW=P18Yzw21Sh zn`>;%Y!Z62WQXNx3AB5=Jas+pknumIe3uns=1ME5%U4H-w4;K_a+0?M5@i^bnT>T# z?x4;~zN*w`a(Sg3nJ;P@v$6_4rOnMkAUq-FvQg&?gl*gy|6(ljMZ!IjVo9XCn{F_S zzs_n8c`c8G8Jn|O{XMEXy6XEoJwc)KM5vPfk0DJ?L7=WxxYqd9C1To*CaK@WS&UU< zhtr}LGS^tXR{wTpy3u54tV`99R7l%g$&vAR<{F5)skjB9O zUl?e9nEiy^rORyUXjr@ORs;3BQ4$P!x;)+JCA*Z-NGW+xnHhC%{|7BonId@o!H8vcqkuAt zio->7#GJzriwTsMhNRyPq@)i-tcx?aNz)k&&cQ|`HEod{RwRX@QZkCWv~@yp82b;* z3_L-t&JBe0duRBls#)yoBCYn5C#;`U^$0JWH@|$rEw|pbu%ZlnHa4uR*ZAt_Sk};J z`-_U_l!wjY&f-q9c+P@w5!pz)w6-M~zfeLuI$9cwCy>Zo6+Uty28)S$$8 zlb0&up{!`^p=F3`hI;}LUzgNtv&T%(Aw%Q8i+R*m+fln_xr=#qae5~e`0w$UeQxZ2 zWI`p2!F0|P3bM@`h=hGRbP{Q&DvP9c38p)ojJtS@qejPgf{7_pFfsNLp>{j#`-0XE zGZAVOVL()5Bi*8YJ`5C6qDQrDX(Z_LcFLGY4l+1XK4D`D;x7+No zw#)d_h)+~ky%4JHE5+0eTNcu53bxsUHI0SJkw47$z$RyyHefH?_) zQRo!>C(28dz>#X(iX}nWlA|FpNK)UUXrtH*DoZw}dv!;uv9aB)u;gUEcM$qkQ zy*5qg-OY0ia{{SY2*Z_3&j|$ZOKr2lJ7IYwvkjn_63&}+UFJ}btX0rKsW0(E4`DX|Hv{t0Vqg{^d_i@!VJya84#%iogdcY??jqm@;3l3o z0Xu=4c-V>OcKnrqG_J&t6&4;v&+(T!w6n_$M>dxx>qnXfzoM+HnSr39{pKRGxNEk# z+3P1j`xS-shK0;ZGYuUPp3U^=VunbnvIT+Bd1M(;*~!u54F`RgnszDcOv{b=;U)T3 ztT!bd`f9m5w~_+_tro)|rbjZM<^5*B&mth}fk&rXU);5k_l%nF$yRC}f?2Fb32Ph+ zlFX7$nJv%=nQyeIm=@7(yrnzg@=o2Udp--z47?NV~pPlG;;D%_>rQS!heA8u$uflC2?O=S)|&h$a;dZ z3F%jzK|Yt@oFzpO9DB?#ie*fzp4ai3fFz^y66?+q>|~vp5#Hgq-2HlGwn7ob2XwnN z!!SFsn0Lu)uK4X%S>=T?nBg6Ln*%;osRZZ3+@jqbomj-NP+5_XKWsX@Ggh3!2#w+d z^_Wq4SZGtS*gUl4k<~>CbYl-3QVc*@e{tD-U;hPZoc_{ia`;1r%@&(Qz(P!q+SED= zUQ>Ah&})d5Udk(-!A@oEhK`Y`!G2M)rtd48yv|UzfThWt+uz6gg{erca;lh%%3&rc z)9BL8*ed?M23=5KYu!qWzx`sl9LCJr+r2||gr3a8g%uT-E%f!vFgDcw1WE)sAPW_f zU5zIUXKs4Joo*vp(y=4=gkhbWrT)UfpDedH%&M*P z>Ajt7@MfAaUFY2jn)($^MyJuyj3nYBY`6s)pfUY|Iz{Ex3Z?k3(ozXj6gRQnnCpw@ zcWpHJqZT(|iHq^71yFUptT~z(o4i8(v{|efU?5;^zg-vsNW4&D&EP0}3Wb*qnN4&x z|Lbfmr4MvkIUu1a&IRk*#nCbz)b7&nk$tJ~8M4Q8$}9=9VIHekwZGPNq^e%a5cX3} zgfPLBvHyk7)f6ebh({eY>0&wxFX5(3nJGOU9@W~w{!Zo>qscBO@hmUl2NS~f*NVu# z+fFhnOp>MUslXRx!JcRr5LJR@oGNBMRZgLKReH+H8Y^@|8MjMcXtvr$zuGgpg_j`R zSZjzj1ZIQABEiZlBM-7aYBMiX5CRg0-%9p4sFD$)cufay8Z8|@&o+;*w3Oi_%&3Xn zXf(QhFMikPev(5T93<)2+>}fsJvI` zg?wKysQZ!<4o03FY6{CtvXR^wK=9CMb%2ww)8nb{PxUu4f~k_?o5X#;aiia%2ijO+ zU6H<^VrZBko$5@IGf$)o^9;M+?ERfIK#RRxG6;#~TI1Dk{#hho>4PFpKGsoAPWV!|3Yq<7K4H!Jg^ne&B;|T3 zVY6WsEC`g1C21rFy0nys>W$tba6GPyj!=t0N+UE)e(#2^c4~fUl3;9L%}MlQFj#6Y zpDDeZ#Fy|z4ti8Q{{TKot-H-~v%wR+_Uu3i zq$QBZFA@p>wdy3tr7b~LFQJZ!@#+g~LAJ(g1%B`YtM& zJM)9pH!LnSW~|?^anpx)?z+ctTF%yuLy^HA;ZzcQGELw* zmJaBPboOv?Hr%tB4LS2u3H>5)9+t66%a!{)EV(<(k`Svp!hS}N9QS47+oRjp&)9=4 zQT&G%ZpmI;%f)0(6+DXTaE3HZ@q-f99SZc3K$0^sDT+%!zEDPY$&2Df&7kLzszX7 zOJ6$uFqbpta$nADATjn+*9Dd;a4HHEwI}_3x*tae<8T!Y52X0fG4x6{{wmEFDQ_ZY`lp6B(k=X*HDG{vBrNGM`0ZzE+=+r7bO4pE(-zxc+iXScWRpAU8MbDvUhIo=~oHb?xo%Es)6%Z|; z**0hXoCR~{nI-ef$`;HmD~D0ORJg09cIDFAHBxoPLeg*c1rWF(%`zG5DSqdKvk=iB zbV||bMBp61$1-_oxseF^J?W&;05dnQ{(j_S)+s8aP~sat9xl5)n0-awf}?r_-C$I;giYACII zED}b7TX{Sz8ulCohGMy351S4+Iv^=>PaS1=;4zbaa9)!`fZ%A0avem3p)iO$#n$;@X z;`NKF)y97DMk!s|yi`dfop@m@>=b5+jq%EPQc9wX64~L*l#=YN^Cil%)2R}jlu}NQ zS?yn}+qTA2$~#zQlz5CCto_(!H`1m9&YV|8`4_8hH%c4KYRyBiMo=CHPe%nXilobC z*m_y`PIrg}NAzNPFw!?!VFNN8a>2ouxlNJ-Y9=%kfy)jXbrL4U$HVkhWLQ+yH zH$wg{ubW|mY@t&Pl+q^hH>p2Ml~4U`7Vm2Ak_fS$ioYerzf7rI8Lzq*Ow%5(_KT!J z%r;q=Q26iA44e>{KKE97%jePc?lY^24#?sq-C2j~A1$y{*d8}y%TJv=f)g}2@IHDT zI(6|xIy-uUNEsrXFv(js&o7@hf3~?b+<6O^SBUy$OSjB|5Kh#+FYU*5; zvP+vUe2?9InjaOmN%z%ioz5;Vr6&a&33Hd^%!3ZXgJ{~~N}V_Mv~d zSru%f8jZ(xvswwK7_^*bH|=%XRAH*3c5KP2HNu#GxNP>k+4E;Fn7wfJyjyq8b_Ta5 zih_^rxFqgs9UAB$qp->pDd%EeYU#%2HOnT zM=1JJK1RH=(a=NLD4oSTXbGx>GFF{6POd)D6JAwUXqT-nwAnMotK}Kx_I@_&lZftdRG_0&^Y+Wje9bbaC zwZ}{9@*}&IIqdo8&XK?3&Q4LaD7eB~rQB=-{x;;9;$AAP)@ZUvA&vA`U~{iw zvaQ0tB4yX$=q6FHC~dQtKWSqg=?f`e?FUk`*c*j8#JSXZEaP448$`b0KvPoEYRe5$ zbk5F-PWp@RBi+ZIk9vv?KtjYoQh4U2b>en(u&#D!`bkoGPDsureuizBml`fRl+n+U zFQ6nd*ktNeze7ZD5^hrz#!S$DU%013O=>Bhasom7v4eVSj%-mWJ33fzQ=WC{*pabA zc5)|kqF?Y>7_Yf~BGhr}Eak5f8@&X5k)FuYdmOe~Zre6Y%EUZHhxb6VgyYyO20Kp7 zSaBL>GA1rnC((_wztd`Q(mDIY(YAO=TfK;A@JWXd51S*#BjZ5t*6DY};Y&PYN$GPtI^fzMrX3wx z1ft_ehZ4m$xsfsM(5VF9DJ9d(Y;fpPy(wZrD%EqI6+mX1&}ff;3)Hkn`SmkguovV#StJ#z$vQ*wCCCe*c!u zl85x2QvTgN%2BQpww3wrCKA`MIX&F|d1Ynu*jM|*NQET-R-q4D1IkgZ6V@qQAaT8J z6m?VvuhARy8+Ndv^u%`E`@&n@{$8(YgA;GJA!TDrt@3|EC8y3r9dOl0&DlkZ z);)|lrw?RK3sgGN8(ZoqvV_D;V=|G1G+x`v*x{8*RbCw{DGXzP4>~$-h7|1lQi*{b zCUhh}Sw*V1*45FTb-C@S0Od+D&61je#@<(ili%AdP`E2GSTvV<3%zGzQWbNMj(4fiwov z7)WCvje#@<(ili%AdP`E2GSTvV<3%zGzQWbNMj(4f&bJP5Zi#$7!>4S;yBT6$+h^! z7E*qnOz{un7u!hr{Y8rZz7+rcDgM7q@qawU|A`cT7G?1TTxFAaFRq#MiK}oDKe3nk z$*{J`d;)g@&wFsi81gP$v2$2}dl_yv?&Y|r@2xei!2JsDG~AuIQfLeA)wt7fufcs4 zdx`0|PvgpA^UveTheIF2y&Lyl+;?&J;mUU-`f>gJW5YmD+hv@6ZDgd`B_|aB_+RtV zKP~?wnM;gU0r`ooM`}${pT&P2kyXH*fZ*V-fv*DJ16~I%V{DWGD}g@1$%A>nu?`UX zNydor72qY{H$Wlj<^oNC50IZYR|1X=obSLG5(B6z&JqqSjI#?AmdG32@_ZP zUE*Y{I&o62<@5n2K=-S$6vCCdN;@R|03dbVZMz@EmH0tG;`abj4s%7_hxcjw`2eoe?-4-W z_gO&FJq1Ypz70tH4*-du22un+8JXE?iar8@@A~MDkKRC-{QmBz+CA{7c6a~nX&Kr^ z%{>FkeT?)+4*uw%siQCYyZd)KsK$1``aaXw+UcJp{dYd|>SwMt{^c{V&#b?6`S%=9 zIaV_uR{v +#include +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +int nbProfiledCall; +double timeInProfiledCall; +double worstProfiledCall; +int insufficientClockPrecision; +int doExtensiveProfiling; + +/**** Local declarations. ****/ +/* None */ + +/**** Local functions declarations. ****/ +static ErrorNumber testTAFunction_ALL( void ); +static ErrorNumber test_with_simulator( void ); +static void printUsage(void); + +/**** Local variables definitions. ****/ +/* None */ + +/**** Global functions definitions. ****/ +int main( int argc, char **argv ) +{ +#ifdef WIN32 + LARGE_INTEGER QPFrequency; +#endif + double freq; + + ErrorNumber retValue; + + (void)argv; + + insufficientClockPrecision = 0; + timeInProfiledCall = 0.0; + worstProfiledCall = 0.0; + nbProfiledCall = 0; + doExtensiveProfiling = 0; + + printf( "\n" ); + printf( "ta_regtest V%s - Regression Tests of TA-Lib code\n", TA_GetVersionString() ); + printf( "\n" ); + + if( argc == 2 ) + { + /* Detect option to perform extended profiling. */ + if( (argv[1][0] == '-') && (argv[1][1] == 'p') && (argv[1][2] == '\0')) + { + doExtensiveProfiling = 1; + } + else + { + printUsage(); + return TA_REGTEST_BAD_USER_PARAM; + } + } + + if( argc > 2 ) + { + printUsage(); + return TA_REGTEST_BAD_USER_PARAM; + } + + /* Some tests are using randomness. */ + srand( (unsigned)time( NULL ) ); + + /* Test utility like List/Stack/Dictionary/Memory Allocation etc... */ + retValue = test_internals(); + if( retValue != TA_TEST_PASS ) + { + printf( "\nFailed an internal test with code=%d\n", retValue ); + return retValue; + } + + /* Test abstract interface. */ + retValue = test_abstract(); + if( retValue != TA_TEST_PASS ) + { + printf( "Failed: Abstract interface Tests (error number = %d)\n", retValue ); + return retValue; + } + + /* Perform all regresstions tests (except when ta_regtest is executed for profiling only). */ + if( !doExtensiveProfiling ) + { + retValue = test_with_simulator(); + if( retValue != TA_TEST_PASS ) + return retValue; + + if( insufficientClockPrecision != 0 ) + { + printf( "\nWarning: Code profiling not supported for this platform.\n" ); + } + else if( nbProfiledCall > 0 ) + { + printf( "\nNumber profiled function call = %d function calls", nbProfiledCall ); + +#ifdef WIN32 + QueryPerformanceFrequency(&QPFrequency); + freq = (double)QPFrequency.QuadPart; + printf( "\nTotal execution time = %g milliseconds", (timeInProfiledCall/freq)*1000.0 ); + printf( "\nWorst single function call = %g milliseconds", (worstProfiledCall/freq)*1000.0 ); + printf( "\nAverage execution time per function = %g microseconds\n", ((timeInProfiledCall/freq)*1000000.0)/((double)nbProfiledCall) ); +#else + freq = (double)CLOCKS_PER_SEC; + printf( "\nTotal execution time = %g milliseconds", timeInProfiledCall/freq/1000.0 ); + printf( "\nWorst single function call = %g milliseconds", worstProfiledCall/freq/1000.0 ); + printf( "\nAverage execution time per function = %g microseconds\n", (timeInProfiledCall/freq/1000000.0)/((double)nbProfiledCall) ); +#endif + } + printf( "\n* All tests succeeded. Enjoy the library. *\n" ); + } + + + return TA_TEST_PASS; /* Everything succeed !!! */ +} + +/**** Local functions definitions. ****/ +static ErrorNumber test_with_simulator( void ) +{ + ErrorNumber retValue; + + /* Initialize the library. */ + retValue = allocLib(); + if( retValue != TA_TEST_PASS ) + return retValue; + + /* Perform testing of each of the TA Functions. */ + retValue = testTAFunction_ALL(); + if( retValue != TA_TEST_PASS ) + { + return retValue; + } + + /* Clean-up and exit. */ + + retValue = freeLib( ); + if( retValue != TA_TEST_PASS ) + return retValue; + + return TA_TEST_PASS; /* All test succeed. */ +} + +extern TA_Real TA_SREF_open_daily_ref_0_PRIV[]; +extern TA_Real TA_SREF_high_daily_ref_0_PRIV[]; +extern TA_Real TA_SREF_low_daily_ref_0_PRIV[]; +extern TA_Real TA_SREF_close_daily_ref_0_PRIV[]; +extern TA_Real TA_SREF_volume_daily_ref_0_PRIV[]; + +static ErrorNumber testTAFunction_ALL( void ) +{ + ErrorNumber retValue; + TA_History history; + + history.nbBars = 252; + history.open = TA_SREF_open_daily_ref_0_PRIV; + history.high = TA_SREF_high_daily_ref_0_PRIV; + history.low = TA_SREF_low_daily_ref_0_PRIV; + history.close = TA_SREF_close_daily_ref_0_PRIV; + history.volume = TA_SREF_volume_daily_ref_0_PRIV; + + printf( "Testing the TA functions\n" ); + + initGlobalBuffer(); + + /* Make tests for each TA functions. */ + #define DO_TEST(func,str) \ + { \ + printf( "%50s: Testing....", str ); \ + fflush(stdout); \ + showFeedback(); \ + TA_SetCompatibility( TA_COMPATIBILITY_DEFAULT ); \ + retValue = func( &history ); \ + if( retValue != TA_TEST_PASS ) \ + return retValue; \ + hideFeedback(); \ + printf( "done.\n" ); \ + fflush(stdout); \ + } + DO_TEST( test_func_1in_1out, "MATH,VECTOR,DCPERIOD/PHASE,TRENDLINE/MODE" ); + DO_TEST( test_func_ma, "All Moving Averages" ); + DO_TEST( test_func_per_hl, "AROON,CORREL,BETA" ); + DO_TEST( test_func_per_hlc, "CCI,WILLR,ULTOSC,NATR" ); + DO_TEST( test_func_per_ohlc, "BOP,AVGPRICE" ); + DO_TEST( test_func_rsi, "RSI,CMO" ); + DO_TEST( test_func_minmax, "MIN,MAX,MININDEX,MAXINDEX,MINMAX,MINMAXINDEX" ); + DO_TEST( test_func_po, "PO,APO" ); + DO_TEST( test_func_adx, "ADX,ADXR,DI,DM,DX" ); + DO_TEST( test_func_sar, "SAR,SAREXT" ); + DO_TEST( test_func_stoch, "STOCH,STOCHF,STOCHRSI" ); + DO_TEST( test_func_per_hlcv, "MFI,AD,ADOSC" ); + DO_TEST( test_func_1in_2out, "PHASOR,SINE" ); + DO_TEST( test_func_per_ema, "TRIX" ); + DO_TEST( test_func_macd, "MACD,MACDFIX,MACDEXT" ); + DO_TEST( test_func_mom_roc, "MOM,ROC,ROCP,ROCR,ROCR100" ); + DO_TEST( test_func_trange, "TRANGE,ATR" ); + DO_TEST( test_func_stddev, "STDDEV,VAR" ); + DO_TEST( test_func_bbands, "BBANDS" ); + DO_TEST( test_candlestick, "All Candlesticks" ); + + return TA_TEST_PASS; /* All tests succeeded. */ +} + +static void printUsage(void) +{ + printf( "Usage: ta_regtest [-p]\n" ); + printf( "\n" ); + printf( " No parameter needed for regression testing.\n" ); + printf( "\n" ); + printf( " This tool will execute a series of tests to\n" ); + printf( " make sure that the library is behaving as\n" ); + printf( " expected.\n"); + printf( "\n" ); + printf( " ** Must be run from the 'bin' directory.\n" ); + printf( "\n" ); + printf( " OPTION:\n" ); + printf( " -p Only generate profiling data on stdout. This is\n" ); + printf( " intended only for the TA-Lib developers. It is\n" ); + printf( " not further documented for general use.\n" ); + printf( "\n" ); + printf( " On success, the exit code is 0.\n" ); + printf( " On failure, the exit code is a number that can be\n" ); + printf( " found in c/src/tools/ta_regtest/ta_error_number.h\n" ); +} diff --git a/src/tools/ta_regtest/ta_test_func.h b/src/tools/ta_regtest/ta_test_func.h new file mode 100644 index 000000000..acdbdd472 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func.h @@ -0,0 +1,27 @@ +#ifndef TA_TEST_FUNC_H +#define TA_TEST_FUNC_H + +ErrorNumber test_candlestick ( TA_History *history ); +ErrorNumber test_func_adx ( TA_History *history ); +ErrorNumber test_func_ma ( TA_History *history ); +ErrorNumber test_func_trange ( TA_History *history ); +ErrorNumber test_func_rsi ( TA_History *history ); +ErrorNumber test_func_po ( TA_History *history ); +ErrorNumber test_func_macd ( TA_History *history ); +ErrorNumber test_func_stddev ( TA_History *history ); +ErrorNumber test_func_bbands ( TA_History *history ); +ErrorNumber test_func_mom_roc ( TA_History *history ); +ErrorNumber test_func_stoch ( TA_History *history ); +ErrorNumber test_func_minmax ( TA_History *history ); +ErrorNumber test_func_per_ema ( TA_History *history ); +ErrorNumber test_func_per_hl ( TA_History *history ); +ErrorNumber test_func_per_hlc ( TA_History *history ); +ErrorNumber test_func_per_hlcv( TA_History *history ); +ErrorNumber test_func_per_ohlc( TA_History *history ); +ErrorNumber test_func_per ( TA_History *history ); +ErrorNumber test_func_sar ( TA_History *history ); +ErrorNumber test_func_1in_1out( TA_History *history ); +ErrorNumber test_func_1in_2out( TA_History *history ); + + +#endif diff --git a/src/tools/ta_regtest/ta_test_func/test_1in_1out.c b/src/tools/ta_regtest/ta_test_func/test_1in_1out.c new file mode 100644 index 000000000..ea6eaf677 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_1in_1out.c @@ -0,0 +1,507 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 020203 MF First version. + * + */ + +/* Description: + * + * Test functions which have the following + * characterisic: + * - have one input and one output + * - there is no optional parameters + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" +#include "ta_memory.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { + TA_HT_DCPERIOD_TEST, + TA_HT_DCPHASE_TEST, + TA_HT_TRENDLINE_TEST, + TA_HT_TRENDMODE_TEST, + TA_SIN_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + TA_Integer unstablePeriod; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *price; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /********************************/ + /* Some Hilbert Transform Tests */ + /********************************/ + { 1, TA_HT_TRENDMODE_TEST, 0, 0, 251, TA_SUCCESS, 0, 1.0, 63, 252-63 }, /* First Value */ + + { 1, TA_HT_TRENDLINE_TEST, 0, 0, 251, TA_SUCCESS, 0, 88.257, 63, 252-63 }, /* First Value */ + { 0, TA_HT_TRENDLINE_TEST, 0, 0, 251, TA_SUCCESS, 0, 88.257, 63, 252-63 }, + { 0, TA_HT_TRENDLINE_TEST, 0, 0, 251, TA_SUCCESS, 252-66, 109.69, 63, 252-63 }, + { 0, TA_HT_TRENDLINE_TEST, 0, 0, 251, TA_SUCCESS, 252-65, 110.18, 63, 252-63 }, + { 0, TA_HT_TRENDLINE_TEST, 0, 0, 251, TA_SUCCESS, 252-64, 110.46, 63, 252-63 }, /* Last Value */ + + { 1, TA_HT_DCPHASE_TEST, 0, 0, 251, TA_SUCCESS, 0, 22.1495, 63, 252-63 }, /* First Value */ + { 0, TA_HT_DCPHASE_TEST, 0, 0, 251, TA_SUCCESS, 252-66, -31.182, 63, 252-63 }, + { 0, TA_HT_DCPHASE_TEST, 0, 0, 251, TA_SUCCESS, 252-65, 23.2691, 63, 252-63 }, + { 0, TA_HT_DCPHASE_TEST, 0, 0, 251, TA_SUCCESS, 252-64, 47.2765, 63, 252-63 }, /* Last Value */ + + { 1, TA_HT_DCPERIOD_TEST, 0, 0, 251, TA_SUCCESS, 0, 15.5527, 32, 252-32 }, /* First Value */ + { 0, TA_HT_DCPERIOD_TEST, 0, 0, 251, TA_SUCCESS, 252-33, 18.6140, 32, 252-32 }, /* Last Value */ + + /*********************************/ + /* Trigonometric and Vector Math */ + /*********************************/ + { 1, TA_SIN_TEST, 0, 0, 251, TA_SUCCESS, 0, -0.38371, 0, 252 }, /* First Value */ + { 0, TA_SIN_TEST, 0, 0, 251, TA_SUCCESS, 251, 0.870319, 0, 252 } /* Last Value */ + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_1in_1out( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + for( i=0; i < NB_TEST; i++ ) + { + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + TA_Integer *intBuffer; + int size, i; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + switch( testParam->test->theFunction ) + { + case TA_HT_DCPERIOD_TEST: + retCode = TA_HT_DCPERIOD( startIdx, + endIdx, + testParam->price, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_HT_DCPERIOD_Lookback(); + break; + case TA_HT_DCPHASE_TEST: + retCode = TA_HT_DCPHASE( startIdx, + endIdx, + testParam->price, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_HT_DCPHASE_Lookback(); + break; + case TA_HT_TRENDLINE_TEST: + retCode = TA_HT_TRENDLINE( startIdx, + endIdx, + testParam->price, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_HT_TRENDLINE_Lookback(); + break; + case TA_HT_TRENDMODE_TEST: + /* Trendmode returns integers, but this test + * is comparing real, so a translation is done + * here. + */ + #define PRE_SENTINEL ((TA_Integer)0xABABFEDC) + #define POST_SENTINEL ((TA_Integer)0xEFABCDFF) + #define ALLOC_INT_BUFFER(varSize) \ + { \ + intBuffer = TA_Malloc(sizeof(TA_Integer)*(varSize+2)); \ + intBuffer[0] = PRE_SENTINEL; \ + intBuffer[varSize+1] = POST_SENTINEL; \ + } + + size = endIdx-startIdx+1; \ + ALLOC_INT_BUFFER(size); + retCode = TA_HT_TRENDMODE( startIdx, + endIdx, + testParam->price, + outBegIdx, + outNbElement, + &intBuffer[1] ); + *lookback = TA_HT_TRENDMODE_Lookback(); + + #define FREE_INT_BUFFER( destBuffer, varNbElement ) \ + { \ + if( intBuffer[0] != PRE_SENTINEL ) \ + { \ + retCode = TA_INTERNAL_ERROR(138); \ + } \ + else if( intBuffer[size+1] != POST_SENTINEL ) \ + { \ + retCode = TA_INTERNAL_ERROR(139); \ + } \ + else \ + { \ + for( i=0; i < varNbElement; i++ ) \ + destBuffer[i] = (double)intBuffer[i+1]; \ + } \ + TA_Free( intBuffer ); \ + } + + FREE_INT_BUFFER( outputBuffer, *outNbElement ); + break; + case TA_SIN_TEST: + retCode = TA_SIN( startIdx, + endIdx, + testParam->price, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_SIN_Lookback(); + break; + default: + retCode = TA_INTERNAL_ERROR(132); + } + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + const TA_Real *referenceInput; + + TA_Integer *intBuffer; + int size, i; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + + /* Change the input to MEDPRICE for some tests. */ + switch( test->theFunction ) + { + case TA_HT_DCPERIOD_TEST: + case TA_HT_DCPHASE_TEST: + case TA_HT_TRENDLINE_TEST: + case TA_HT_TRENDMODE_TEST: + TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low, + &outBegIdx, &outNbElement, gBuffer[0].in ); + + /* Will be use as reference */ + TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low, + &outBegIdx, &outNbElement, gBuffer[1].in ); + + referenceInput = gBuffer[1].in; + break; + default: + referenceInput = history->close; + } + + /* Make a simple first call. */ + size = (test->endIdx-test->startIdx)+1; + + switch( test->theFunction ) + { + case TA_HT_DCPERIOD_TEST: + retCode = TA_HT_DCPERIOD( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TA_HT_DCPHASE_TEST: + retCode = TA_HT_DCPHASE( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + case TA_HT_TRENDLINE_TEST: + retCode = TA_HT_TRENDLINE( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + case TA_HT_TRENDMODE_TEST: + ALLOC_INT_BUFFER(size); + retCode = TA_HT_TRENDMODE( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + &intBuffer[1] ); + FREE_INT_BUFFER( gBuffer[0].out0, outNbElement ); + break; + case TA_SIN_TEST: + retCode = TA_SIN( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + default: + retCode = TA_INTERNAL_ERROR(133); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, referenceInput, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output + * are the same buffer. + */ + switch( test->theFunction ) + { + case TA_HT_DCPERIOD_TEST: + retCode = TA_HT_DCPERIOD( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in + ); + break; + + case TA_HT_DCPHASE_TEST: + retCode = TA_HT_DCPHASE( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in + ); + break; + case TA_HT_TRENDLINE_TEST: + retCode = TA_HT_TRENDLINE( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in + ); + break; + case TA_HT_TRENDMODE_TEST: + ALLOC_INT_BUFFER(size); + retCode = TA_HT_TRENDMODE( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + &intBuffer[1] + ); + FREE_INT_BUFFER( gBuffer[0].in, outNbElement ); + break; + case TA_SIN_TEST: + retCode = TA_SIN( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in + ); + break; + default: + retCode = TA_INTERNAL_ERROR(134); + } + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.price = referenceInput; + + if( test->doRangeTestFlag ) + { + switch( test->theFunction ) + { + case TA_HT_DCPERIOD_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_HT_DCPERIOD, + (void *)&testParam, 1, 0 ); + break; + + case TA_HT_DCPHASE_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_HT_DCPHASE, + (void *)&testParam, 1, 360 ); + break; + + case TA_HT_TRENDLINE_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_HT_TRENDLINE, + (void *)&testParam, 1, 0 ); + break; + + case TA_HT_TRENDMODE_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_HT_TRENDMODE, + (void *)&testParam, 1, 0 ); + break; + + default: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + } + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_1in_2out.c b/src/tools/ta_regtest/ta_test_func/test_1in_2out.c new file mode 100644 index 000000000..91232ad1c --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_1in_2out.c @@ -0,0 +1,469 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 020203 MF First version. + * + */ + +/* Description: + * + * Test functions which have the following + * characterisic: + * - have one input and two outputs + * - there is no optional parameters + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" +#include "ta_memory.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { + TA_HT_PHASOR_TEST, + TA_HT_SINE_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + TA_Integer unstablePeriod; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer oneOfTheExpectedOutRealIndex1; + TA_Real oneOfTheExpectedOutReal1; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *price; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /********************************/ + /* Some Hilbert Transform Tests */ + /********************************/ + { 1, TA_HT_SINE_TEST, 0, 0, 251, TA_SUCCESS, 0, 0.38, + 0, 0.92, + 63, 252-63 }, + { 0, TA_HT_SINE_TEST, 0, 0, 251, TA_SUCCESS, 1, 0.77, + 1, 1.00, + 63, 252-63 }, + + { 0, TA_HT_SINE_TEST, 0, 0, 251, TA_SUCCESS, 5, 0.65, + 5, -0.08, + 63, 252-63 }, + + { 0, TA_HT_SINE_TEST, 0, 0, 251, TA_SUCCESS, 252-67, -0.94, + 252-67, -0.44, + 63, 252-63 }, + + { 0, TA_HT_SINE_TEST, 0, 0, 251, TA_SUCCESS, 252-66, -0.52, + 252-66, 0.24, + 63, 252-63 }, + + { 0, TA_HT_SINE_TEST, 0, 0, 251, TA_SUCCESS, 252-64, 0.73, + 252-64, 1.00, + 63, 252-63 }, + + { 1, TA_HT_PHASOR_TEST, 0, 0, 251, TA_SUCCESS, 0, 0.9456, + 0, 5.2143, + 32, 252-32 }, /* First Value */ + + { 0, TA_HT_PHASOR_TEST, 0, 0, 251, TA_SUCCESS, 1, 2.7539, + 1, 2.4129, + 32, 252-32 }, + + { 0, TA_HT_PHASOR_TEST, 0, 0, 251, TA_SUCCESS, 9, -0.7235, + 9, -5.9336, + 32, 252-32 }, + + { 0, TA_HT_PHASOR_TEST, 0, 0, 251, TA_SUCCESS, 252-34, 0.8386, + 252-34, -0.8913, + 32, 252-32 }, + + { 0, TA_HT_PHASOR_TEST, 0, 0, 251, TA_SUCCESS, 252-33, 0.3258, + 252-33, -0.9447, + 32, 252-32 }, /* Last Value */ + + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_1in_2out( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + + for( i=0; i < NB_TEST; i++ ) + { + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + TA_Real *out1; + TA_Real *out2; + TA_Real *dummyOutput; + + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + dummyOutput = TA_Malloc( (endIdx-startIdx+1) * sizeof(TA_Real) ); + + if( outputNb == 0 ) + { + out1 = outputBuffer; + out2 = dummyOutput; + } + else + { + out1 = dummyOutput; + out2 = outputBuffer; + } + + switch( testParam->test->theFunction ) + { + case TA_HT_PHASOR_TEST: + retCode = TA_HT_PHASOR( startIdx, + endIdx, + testParam->price, + outBegIdx, + outNbElement, + out1, out2 ); + *lookback = TA_HT_PHASOR_Lookback(); + break; + case TA_HT_SINE_TEST: + retCode = TA_HT_SINE( startIdx, + endIdx, + testParam->price, + outBegIdx, + outNbElement, + out1, out2 ); + *lookback = TA_HT_SINE_Lookback(); + break; + default: + retCode = TA_INTERNAL_ERROR(132); + } + + TA_Free(dummyOutput); + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + const TA_Real *referenceInput; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + setInputBuffer( 2, history->close, history->nbBars ); + + /* Change the input to MEDPRICE for some tests. */ + switch( test->theFunction ) + { + case TA_HT_PHASOR_TEST: + case TA_HT_SINE_TEST: + TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low, + &outBegIdx, &outNbElement, gBuffer[0].in ); + + TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low, + &outBegIdx, &outNbElement, gBuffer[1].in ); + + /* Will be use as reference */ + TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low, + &outBegIdx, &outNbElement, gBuffer[2].in ); + + referenceInput = gBuffer[2].in; + break; + default: + referenceInput = history->close; + } + + /* Make a simple first call. */ + switch( test->theFunction ) + { + case TA_HT_PHASOR_TEST: + retCode = TA_HT_PHASOR( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1 ); + break; + case TA_HT_SINE_TEST: + retCode = TA_HT_SINE( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1 ); + break; + default: + retCode = TA_INTERNAL_ERROR(133); + } + + /* Check that the inputs were preserved. */ + errNb = checkDataSame( gBuffer[0].in, referenceInput, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkDataSame( gBuffer[1].in, referenceInput, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[0].out1, 1 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output + * are the same buffer. + */ + switch( test->theFunction ) + { + case TA_HT_PHASOR_TEST: + retCode = TA_HT_PHASOR( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in, + gBuffer[1].out1 + ); + break; + case TA_HT_SINE_TEST: + retCode = TA_HT_SINE( test->startIdx, + test->endIdx, + gBuffer[0].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in, + gBuffer[1].out1 + ); + break; + default: + retCode = TA_INTERNAL_ERROR(134); + } + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkSameContent( gBuffer[0].out1, gBuffer[1].out1 ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[1].out1, 1 ); + + /* Make another call where the input and the output + * are the same buffer. + */ + switch( test->theFunction ) + { + case TA_HT_PHASOR_TEST: + retCode = TA_HT_PHASOR( test->startIdx, + test->endIdx, + gBuffer[1].in, + &outBegIdx, + &outNbElement, + gBuffer[1].out0, + gBuffer[1].in + ); + break; + case TA_HT_SINE_TEST: + retCode = TA_HT_SINE( test->startIdx, + test->endIdx, + gBuffer[1].in, + &outBegIdx, + &outNbElement, + gBuffer[1].out0, + gBuffer[1].in + ); + break; + default: + retCode = TA_INTERNAL_ERROR(134); + } + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out1, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].out0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[1].out0, 0 ); + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.price = referenceInput; + + if( test->doRangeTestFlag ) + { + switch( test->theFunction ) + { + case TA_HT_PHASOR_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_HT_PHASOR, + (void *)&testParam, 1, 0 ); + break; + case TA_HT_SINE_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_HT_SINE, + (void *)&testParam, 1, 10 ); + break; + + default: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + } + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_adx.c b/src/tools/ta_regtest/ta_test_func/test_adx.c new file mode 100644 index 000000000..96abcc040 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_adx.c @@ -0,0 +1,682 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Test all the directional movement functions. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum +{ + TST_MINUS_DM, + TST_MINUS_DI, + TST_PLUS_DM, + TST_PLUS_DI, + TST_DX, + TST_ADX, + TST_ADXR +} TestId; + +typedef struct +{ + TestId id; + + TA_Integer doRangeTestFlag; + + TA_Integer unstablePeriod; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInTimePeriod; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *high; + const TA_Real *low; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /* Test the fixes for Bug#1089506 */ + { TST_MINUS_DI, 1, 0, 0, 251, 1, TA_SUCCESS, 0, 0.0, 1, 252-1 }, + { TST_PLUS_DI, 1, 0, 0, 251, 1, TA_SUCCESS, 0, 0.478, 1, 252-1 }, + { TST_MINUS_DM, 1, 0, 0, 251, 1, TA_SUCCESS, 0, 0.0, 1, 252-1 }, + { TST_PLUS_DM, 1, 0, 0, 251, 1, TA_SUCCESS, 0, 1.69, 1, 252-1 }, + + /* Normal regression tests. */ + { TST_ADXR,1, 0, 0, 251, 14, TA_SUCCESS, 0, 19.8666, 40, 252-40 }, /* First Value */ + { TST_ADXR,0, 0, 0, 251, 14, TA_SUCCESS, 1, 18.9092, 40, 252-40 }, + + { TST_ADXR,0, 0, 0, 251, 14, TA_SUCCESS, 210, 21.5972, 40, 252-40 }, + { TST_ADXR,0, 0, 0, 251, 14, TA_SUCCESS, 211, 20.4920, 40, 252-40 }, /* Last Value */ + + { TST_PLUS_DM, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 10.28, 13, 252-13 }, /* First Value */ + { TST_PLUS_DM, 0, 0, 0, 251, 14, TA_SUCCESS, 237, 10.317, 13, 252-13 }, + { TST_PLUS_DM, 0, 0, 0, 251, 14, TA_SUCCESS, 238, 9.58, 13, 252-13 }, /* Last Value */ + + { TST_PLUS_DI, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 20.3781, 14, 252-14 }, /* First Value */ + + { TST_PLUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 13, 22.1073, 14, 252-14 }, + { TST_PLUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 14, 20.3746, 14, 252-14 }, + { TST_PLUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 237, 21.0000, 14, 252-14 }, /* Last Value */ + + { TST_MINUS_DM, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 12.995, 13, 252-13 }, /* First Value */ + { TST_MINUS_DM, 0, 0, 0, 251, 14, TA_SUCCESS, 237, 8.33, 13, 252-13 }, + { TST_MINUS_DM, 0, 0, 0, 251, 14, TA_SUCCESS, 238, 9.672, 13, 252-13 }, /* Last Value */ + + { TST_MINUS_DI, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 30.1684, 14, 252-14 }, /* First Value */ + { TST_MINUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 14, 24.969182, 14, 252-14 }, + { TST_MINUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 237, 21.1988, 14, 252-14 }, /* Last Value */ + + { TST_DX, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 19.3689, 14, 252-14 }, /* First Value */ + { TST_DX, 0, 0, 0, 251, 14, TA_SUCCESS, 1, 9.7131, 14, 252-14 }, + { TST_DX, 0, 0, 0, 251, 14, TA_SUCCESS, 2, 17.2905, 14, 252-14 }, + { TST_DX, 0, 0, 0, 251, 14, TA_SUCCESS, 236, 10.6731, 14, 252-14 }, + { TST_DX, 0, 0, 0, 251, 14, TA_SUCCESS, 237, 0.4722, 14, 252-14 }, /* Last Value */ + + { TST_ADX, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 23.0000, 27, 252-27 }, /* First Value */ + { TST_ADX, 0, 0, 0, 251, 14, TA_SUCCESS, 1, 22.0802, 27, 252-27 }, + { TST_ADX, 0, 0, 0, 251, 14, TA_SUCCESS, 223, 16.6840, 27, 252-27 }, + { TST_ADX, 0, 0, 0, 251, 14, TA_SUCCESS, 224, 15.5260, 27, 252-27 } /* Last Value */ + +#if 0 + /*These were the values when using integer rounding in the logic */ + { TST_ADXR,1, 0, 0, 251, 14, TA_SUCCESS, 0, 19.0, 40, 252-40 }, /* First Value */ + { TST_ADXR,0, 0, 0, 251, 14, TA_SUCCESS, 1, 18.0, 40, 252-40 }, + { TST_ADXR,0, 0, 0, 251, 14, TA_SUCCESS, 210, 22.0, 40, 252-40 }, + { TST_ADXR,0, 0, 0, 251, 14, TA_SUCCESS, 211, 21.0, 40, 252-40 }, /* Last Value */ + + { TST_PLUS_DI, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 20.0, 14, 252-14 }, /* First Value */ + { TST_PLUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 13, 22.0, 14, 252-14 }, + { TST_PLUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 14, 20.0, 14, 252-14 }, + { TST_PLUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 237, 21.0, 14, 252-14 }, /* Last Value */ + + { TST_MINUS_DI, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 30.0, 14, 252-14 }, /* First Value */ + { TST_MINUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 14, 25.0, 14, 252-14 }, + { TST_MINUS_DI, 0, 0, 0, 251, 14, TA_SUCCESS, 237, 21.0, 14, 252-14 }, /* Last Value */ + + { TST_DX, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 20.0, 14, 252-14 }, /* First Value */ + { TST_DX, 0, 0, 0, 251, 14, TA_SUCCESS, 1, 9.0, 14, 252-14 }, + { TST_DX, 0, 0, 0, 251, 14, TA_SUCCESS, 2, 18.0, 14, 252-14 }, + { TST_DX, 0, 0, 0, 251, 14, TA_SUCCESS, 236, 10.0, 14, 252-14 }, + { TST_DX, 0, 0, 0, 251, 14, TA_SUCCESS, 237, 0.0, 14, 252-14 }, /* Last Value */ + + { TST_ADX, 1, 0, 0, 251, 14, TA_SUCCESS, 0, 23.0, 27, 252-27 }, /* First Value */ + { TST_ADX, 0, 0, 0, 251, 14, TA_SUCCESS, 1, 22.0, 27, 252-27 }, + { TST_ADX, 0, 0, 0, 251, 14, TA_SUCCESS, 223, 17.0, 27, 252-27 }, + { TST_ADX, 0, 0, 0, 251, 14, TA_SUCCESS, 224, 16.0, 27, 252-27 } /* Last Value */ +#endif +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_adx( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", __FILE__, + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", __FILE__, + i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + switch( testParam->test->id ) + { + case TST_MINUS_DM: + retCode = TA_MINUS_DM( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_MINUS_DM_Lookback( testParam->test->optInTimePeriod ); + break; + + case TST_MINUS_DI: + retCode = TA_MINUS_DI( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_MINUS_DI_Lookback( testParam->test->optInTimePeriod ); + break; + + case TST_DX: + retCode = TA_DX( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_DX_Lookback( testParam->test->optInTimePeriod ); + break; + + case TST_ADX: + retCode = TA_ADX( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_ADX_Lookback( testParam->test->optInTimePeriod ); + break; + + case TST_PLUS_DM: + retCode = TA_PLUS_DM( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_PLUS_DM_Lookback( testParam->test->optInTimePeriod ); + break; + + case TST_PLUS_DI: + retCode = TA_PLUS_DI( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_PLUS_DI_Lookback( testParam->test->optInTimePeriod ); + break; + + case TST_ADXR: + retCode = TA_ADXR( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_ADXR_Lookback( testParam->test->optInTimePeriod ); + break; + default: + retCode = TA_BAD_PARAM; + } + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->high, history->nbBars ); + setInputBuffer( 1, history->low, history->nbBars ); + setInputBuffer( 2, history->close, history->nbBars ); + setInputBuffer( 3, history->high, history->nbBars ); + + /* Make a simple first call. */ + switch( test->id ) + { + case TST_MINUS_DM: + retCode = TA_SetUnstablePeriod( + TA_FUNC_UNST_MINUS_DM, + test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + retCode = TA_MINUS_DM( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TST_MINUS_DI: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_MINUS_DI, + test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + retCode = TA_MINUS_DI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TST_DX: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_DX, + test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + retCode = TA_DX( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TST_ADX: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_ADX, + test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + retCode = TA_ADX( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TST_PLUS_DM: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_PLUS_DM, + test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + retCode = TA_PLUS_DM( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TST_PLUS_DI: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_PLUS_DI, + test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + retCode = TA_PLUS_DI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TST_ADXR: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_ADX, + test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + retCode = TA_ADXR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + default: + retCode = TA_BAD_PARAM; + } + + /* Verify that the inputs were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->id ) + { + case TST_MINUS_DM: + retCode = TA_MINUS_DM( test->startIdx, + test->endIdx, + gBuffer[3].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + + case TST_MINUS_DI: + retCode = TA_MINUS_DI( test->startIdx, + test->endIdx, + gBuffer[3].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + + case TST_DX: + retCode = TA_DX( test->startIdx, + test->endIdx, + gBuffer[3].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + + case TST_ADX: + retCode = TA_ADX( test->startIdx, + test->endIdx, + gBuffer[3].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + + case TST_PLUS_DM: + retCode = TA_PLUS_DM( test->startIdx, + test->endIdx, + gBuffer[3].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + + case TST_PLUS_DI: + retCode = TA_PLUS_DI( test->startIdx, + test->endIdx, + gBuffer[3].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + + case TST_ADXR: + retCode = TA_ADXR( test->startIdx, + test->endIdx, + gBuffer[3].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + default: + retCode = TA_BAD_PARAM; + } + + /* Verify that the inputs were preserved. */ + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[3].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[3].in, 0 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.high = history->high; + testParam.low = history->low; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + switch( test->id ) + { + case TST_MINUS_DM: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_MINUS_DM, + (void *)&testParam, 1, 0 ); + break; + + case TST_MINUS_DI: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_MINUS_DI, + (void *)&testParam, 1, 2 ); + break; + + case TST_DX: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_DX, + (void *)&testParam, 1, 2 ); + break; + + case TST_ADX: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_ADX, + (void *)&testParam, 1, 2 ); + break; + + case TST_PLUS_DM: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_PLUS_DM, + (void *)&testParam, 1, 0 ); + break; + + case TST_PLUS_DI: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_PLUS_DI, + (void *)&testParam, 1, 2 ); + break; + + case TST_ADXR: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_ADX, + (void *)&testParam, 1, 2 ); + break; + } + + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} diff --git a/src/tools/ta_regtest/ta_test_func/test_bbands.c b/src/tools/ta_regtest/ta_test_func/test_bbands.c new file mode 100644 index 000000000..d77741977 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_bbands.c @@ -0,0 +1,533 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Regression test of Bollinger Bands (BBANDS). + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" +#include "ta_memory.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInTimePeriod; + TA_Real optInNbDevUp; + TA_Real optInNbDevDn; + TA_Integer optInMethod_3; + TA_Integer compatibility; + + TA_RetCode expectedRetCode; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer oneOfTheExpectedOutRealIndex1; + TA_Real oneOfTheExpectedOutReal1; + + TA_Integer oneOfTheExpectedOutRealIndex2; + TA_Real oneOfTheExpectedOutReal2; + +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ +static TA_Test tableTest[] = +{ + + /****************************/ + /* BBANDS - CLASSIC - EMA */ + /****************************/ + + /* No multiplier */ + /* With upper band multiplier only. */ + /* With lower band multiplier only. */ + /* With identical upper/lower multiplier. */ + { 0, 0, 251, 20, 2.0, 2.0, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, + 19, 252-19, + 13, 93.674, /* Upper */ + 13, 87.679, /* Middle */ + 13, 81.685 }, /* Lower */ + + { 0, 0, 251, 20, 2.0, 2.0, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, + 19, 252-19, + 0, 98.0734, /* Upper */ + 0, 92.8910, /* Middle */ + 0, 87.7086 }, /* Lower */ + /* With distinctive upper/lower multiplier. */ + + /****************************/ + /* BBANDS - CLASSIC - SMA */ + /****************************/ + /* No multiplier */ + /* With upper band multiplier only. */ + /* With lower band multiplier only. */ + /* With identical upper/lower multiplier. */ + { 1, 0, 251, 20, 2.0, 2.0, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, + 19, 252-19, + 0, 98.0734, /* Upper */ + 0, 92.8910, /* Middle */ + 0, 87.7086 }, /* Lower */ + /* With distinctive upper/lower multiplier. */ + + + /******************************/ + /* BBANDS - METASTOCK - SMA */ + /******************************/ + + /* No multiplier */ + /* With upper band multiplier only. */ + /* With lower band multiplier only. */ + + /* With identical upper/lower multiplier. */ + { 1, 0, 251, 20, 2.0, 2.0, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 0, 98.0734, /* Upper */ + 0, 92.8910, /* Middle */ + 0, 87.7086 }, /* Lower */ + + /* With distinctive upper/lower multiplier. */ + + /******************************/ + /* BBANDS - METASTOCK - EMA */ + /******************************/ + + /* No multiplier */ + { 1, 0, 251, 20, 1.0, 1.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 0, 94.6914, /* Upper */ + 0, 92.1002, /* Middle */ + 0, 89.5090 }, /* Lower */ + { 0, 0, 251, 20, 1.0, 1.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 3, 94.0477, /* Upper */ + 3, 90.7270, /* Middle */ + 3, 87.4063 }, /* Lower */ + { 0, 0, 251, 20, 1.0, 1.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 252-20, 111.5415, /* Upper */ + 252-20, 108.5265, /* Middle */ + 252-20, 105.5115 }, /* Lower */ + + /* With upper band multiplier only. */ + { 0, 0, 251, 20, 1.5, 1.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 0, 95.9870, /* Upper */ + 0, 92.1002, /* Middle */ + 0, 89.5090}, /* Lower */ + { 0, 0, 251, 20, 1.5, 1.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 3, 95.7080, /* Upper */ + 3, 90.7270, /* Middle */ + 3, 87.4063}, /* Lower */ + { 0, 0, 251, 20, 1.5, 1.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 252-20, 113.0490, /* Upper */ + 252-20, 108.5265, /* Middle */ + 252-20, 105.5115 }, /* Lower */ + + /* With lower band multiplier only. */ + { 1, 0, 251, 20, 1.0, 1.5, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 0, 94.6914, /* Upper */ + 0, 92.1002, /* Middle */ + 0, 88.2134 }, /* Lower */ + { 0, 0, 251, 20, 1.0, 1.5, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 3, 94.0477, /* Upper */ + 3, 90.7270, /* Middle */ + 3, 85.7460}, /* Lower */ + { 0, 0, 251, 20, 1.0, 1.5, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 252-20, 111.5415, /* Upper */ + 252-20, 108.5265, /* Middle */ + 252-20, 104.0040}, /* Lower */ + + /* With identical upper/lower multiplier. */ + { 0, 0, 251, 20, 2.0, 2.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 0, 97.2826, /* Upper */ + 0, 92.1002, /* Middle */ + 0, 86.9178}, /* Lower */ + { 0, 0, 251, 20, 2.0, 2.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 1, 97.2637, /* Upper */ + 1, 91.7454, /* Middle */ + 1, 86.2271}, /* Lower */ + { 0, 0, 251, 20, 2.0, 2.0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 252-20, 114.5564, /* Upper */ + 252-20, 108.5265, /* Middle */ + 252-20, 102.4965}, /* Lower */ + + /* With distinctive upper/lower multiplier. */ + { 0, 0, 251, 20, 2.0, 1.5, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 0, 97.2826, /* Upper */ + 0, 92.1002, /* Middle */ + 0, 88.2134 }, /* Lower */ + { 0, 0, 251, 20, 2.0, 1.5, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 3, 97.3684, /* Upper */ + 3, 90.7270, /* Middle */ + 3, 85.7460}, /* Lower */ + { 0, 0, 251, 20, 2.0, 1.5, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, + 19, 252-19, + 252-20, 114.5564, /* Upper */ + 252-20, 108.5265, /* Middle */ + 252-20, 104.0040} /* Lower */ + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_bbands( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + for( i=0; i < NB_TEST; i++ ) + { + + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", __FILE__, + i, + tableTest[i].expectedNbElement, + history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", __FILE__, i, retValue ); + return retValue; + } + } + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + TA_Real *dummyBuffer1, *dummyBuffer2; + TA_Real *out1, *out2, *out3; + + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + dummyBuffer1 = TA_Malloc( ((endIdx-startIdx)+1)*sizeof(TA_Real)); + if( !dummyBuffer1 ) + return TA_ALLOC_ERR; + + dummyBuffer2 = TA_Malloc( ((endIdx-startIdx)+1)*sizeof(TA_Real)); + if( !dummyBuffer2 ) + { + TA_Free( dummyBuffer1 ); + return TA_ALLOC_ERR; + } + + switch( outputNb ) + { + case 0: + out1 = outputBuffer; + out2 = dummyBuffer1; + out3 = dummyBuffer2; + break; + case 1: + out2 = outputBuffer; + out1 = dummyBuffer1; + out3 = dummyBuffer2; + break; + case 2: + out3 = outputBuffer; + out2 = dummyBuffer1; + out1 = dummyBuffer2; + break; + default: + TA_Free( dummyBuffer1 ); + TA_Free( dummyBuffer2 ); + return TA_BAD_PARAM; + } + + retCode = TA_BBANDS( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + testParam->test->optInNbDevUp, + testParam->test->optInNbDevDn, + (TA_MAType)testParam->test->optInMethod_3, + outBegIdx, outNbElement, + out1, out2, out3 ); + + *lookback = TA_BBANDS_Lookback( testParam->test->optInTimePeriod, + testParam->test->optInNbDevUp, + testParam->test->optInNbDevDn, + (TA_MAType)testParam->test->optInMethod_3 ); + + TA_Free( dummyBuffer1 ); + TA_Free( dummyBuffer2 ); + + return retCode; +} + + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_EMA, 0 ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + setInputBuffer( 2, history->close, history->nbBars ); + setInputBuffer( 3, history->close, history->nbBars ); + + TA_SetCompatibility( (TA_Compatibility)test->compatibility ); + + /* Make a simple first call. */ + retCode = TA_BBANDS( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + test->optInNbDevUp, + test->optInNbDevDn, + (TA_MAType)test->optInMethod_3, + + &outBegIdx, &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1, + gBuffer[0].out2 ); + + errNb = checkDataSame( gBuffer[0].in, history->close, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[0].out1, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[0].out2, 2 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = TA_BBANDS( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + test->optInNbDevUp, + test->optInNbDevDn, + (TA_MAType)test->optInMethod_3, + &outBegIdx, &outNbElement, + gBuffer[1].in, gBuffer[1].out1, gBuffer[1].out2 ); + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[1].out1, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[1].out2, 2 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = TA_BBANDS( test->startIdx, + test->endIdx, + gBuffer[2].in, + test->optInTimePeriod, + test->optInNbDevUp, + test->optInNbDevDn, + (TA_MAType)test->optInMethod_3, + &outBegIdx, &outNbElement, + gBuffer[2].out1, + gBuffer[2].in, + gBuffer[2].out2 ); + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[1].out1, gBuffer[2].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[2].out1, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[2].in, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[2].out2, 2 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = TA_BBANDS( test->startIdx, + test->endIdx, + gBuffer[3].in, + test->optInTimePeriod, + test->optInNbDevUp, + test->optInNbDevDn, + (TA_MAType)test->optInMethod_3, + &outBegIdx, &outNbElement, + gBuffer[3].out0, + gBuffer[3].out1, + gBuffer[3].in ); + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[2].out2, gBuffer[3].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[3].out0, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[3].out1, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[3].in, 2 ); + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + if( test->optInMethod_3 == TA_MAType_EMA ) + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_EMA, + (void *)&testParam, 3, 0 ); + } + else + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 3, 0 ); + } + + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} diff --git a/src/tools/ta_regtest/ta_test_func/test_candlestick.c b/src/tools/ta_regtest/ta_test_func/test_candlestick.c new file mode 100644 index 000000000..5ce05a43b --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_candlestick.c @@ -0,0 +1,744 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 082304 MF First version. + * 041305 MF Add latest list of function. + */ + +/* Description: + * Test functions for candlestick. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +#define MAX_OPTIN_PARAM 5 +#define MAX_TESTED_OUTPUT 3 + +TA_RetCode TA_SetCandleSettings( TA_CandleSettingType settingType, + TA_RangeType rangeType, + int avgPeriod, + double factor ); + +typedef struct +{ + TA_RangeType bodyLong_type; + int bodyLong_avg; + double bodyLong_factor; + TA_RangeType bodyVeryLong_type; + int bodyVeryLong_avg; + double bodyVeryLong_factor; + TA_RangeType bodyShort_type; + int bodyShort_avg; + double bodyShort_factor; + TA_RangeType bodyDoji_type; + int bodyDoji_avg; + double bodyDoji_factor; + TA_RangeType shadowLong_type; + int shadowLong_avg; + double shadowLong_factor; + TA_RangeType shadowVeryLong_type; + int shadowVeryLong_avg; + double shadowVeryLong_factor; + TA_RangeType shadowShort_type; + int shadowShort_avg; + double shadowShort_factor; + TA_RangeType shadowVeryShort_type; + int shadowVeryShort_avg; + double shadowVeryShort_factor; + TA_RangeType near_type; + int near_avg; + double near_factor; + TA_RangeType far_type; + int far_avg; + double far_factor; +} TA_CDLGlobals; + +typedef struct +{ + int index; + int value; +} TA_ExpectedOutput; + + +typedef struct +{ + /* Indicate which function will be called */ + const char *name; + + /* Indicate if ranging test should be done. + * (These tests are very time consuming). + */ + int doRangeTestFlag; + + /* Range for the function call. + * When both value are -1 a series of automated range + * tests are performed. + */ + TA_Integer startIdx; + TA_Integer endIdx; + + /* Up to 5 parameters depending of functions. + * Will be converted to integer when input is integer. + */ + TA_Real params[MAX_OPTIN_PARAM]; + + /* The expected return code. */ + TA_RetCode expectedRetCode; + + /* When return code is TA_SUCCESS, the following output's + * element are verified. + */ + TA_ExpectedOutput output[MAX_TESTED_OUTPUT]; +} TA_Test; + + +typedef struct +{ + /* Allows to pass key information as an + * opaque parameter for doRangeTest. + */ + const TA_Test *test; + const TA_Real *open; + const TA_Real *high; + const TA_Real *low; + const TA_Real *close; + + TA_ParamHolder *paramHolder; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +static ErrorNumber callCandlestick( TA_ParamHolder **paramHolderPtr, + const char *name, + int startIdx, + int endIdx, + const double *inOpen, + const double *inHigh, + const double *inLow, + const double *inClose, + const double optInArray[], + int *outBegIdx, + int *outNbElement, + int outInteger[], + int *lookback, + TA_RetCode *retCode ); +/**** Local variables definitions. ****/ + +/* Some set of globals */ + +/* List of test to perform. */ +static TA_Test tableTest[] = +{ + { "CDL2CROWS",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDL3BLACKCROWS",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDL3INSIDE",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDL3LINESTRIKE",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDL3OUTSIDE",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDL3STARSINSOUTH",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDL3WHITESOLDIERS",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLABANDONEDBABY",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLADVANCEBLOCK",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLBELTHOLD",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLBREAKAWAY",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLCLOSINGMARUBOZU",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLCONCEALBABYSWALL",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLCOUNTERATTACK",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLDARKCLOUDCOVER",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLDOJI",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLDOJISTAR",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLDRAGONFLYDOJI",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLENGULFING",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLEVENINGDOJISTAR",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLEVENINGSTAR",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLGAPSIDESIDEWHITE",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLGRAVESTONEDOJI",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLHAMMER",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLHANGINGMAN",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLHARAMI",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLHARAMICROSS",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLHIKKAKE",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLHIKKAKEMOD",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLHIGHWAVE",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLHOMINGPIGEON",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLIDENTICAL3CROWS",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLINNECK",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLINVERTEDHAMMER",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLKICKING",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLKICKINGBYLENGTH",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLLADDERBOTTOM",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLLONGLEGGEDDOJI",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLLONGLINE",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLMARUBOZU",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLMATCHINGLOW",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLMATHOLD",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLMORNINGDOJISTAR",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLMORNINGSTAR",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLONNECK",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLPIERCING",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLRICKSHAWMAN",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLRISEFALL3METHODS",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLSEPARATINGLINES",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLSHOOTINGSTAR",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLSHORTLINE",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLSPINNINGTOP",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLSTALLEDPATTERN",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLSTICKSANDWICH",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLTAKURI",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLTASUKIGAP",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLTHRUSTING",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLTRISTAR",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLUNIQUE3RIVER",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLUPSIDEGAP2CROWS",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }}, + { "CDLXSIDEGAP3METHODS",1, 0, 0, {0.0,0.0}, TA_SUCCESS, { {0,0}, {1,1} }} +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_candlestick( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Initialize all the unstable period with a large number that would + * break the logic if a candlestick unexpectably use a function affected + * by an unstable period. + */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 20000 ); + + /* Perform sequentialy all the tests. */ + for( i=0; i < NB_TEST; i++ ) + { + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "Failed Test #%d for %s (retValue=%d)\n", i, tableTest[i].name, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All tests succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ + +/* Abstract call for all candlestick functions. + * + * Call the function by 'name'. + * + * Optional inputs are pass as an array of double. + * Elements will be converted to integer as needed. + * + * All outputs are returned in the remaining parameters. + * + * 'lookback' is the return value of the corresponding Lookback function. + * taFuncRetCode is the return code from the call of the TA function. + * + */ +static ErrorNumber callCandlestick( TA_ParamHolder **paramHolderPtr, + const char *name, + int startIdx, + int endIdx, + const double *inOpen, + const double *inHigh, + const double *inLow, + const double *inClose, + const double optInArray[], + int *outBegIdx, + int *outNbElement, + int outInteger[], + int *lookback, + TA_RetCode *taFuncRetCode ) +{ + + /* Use the abstract interface to call the function by name. */ + TA_ParamHolder *paramHolder; + const TA_FuncHandle *handle; + const TA_FuncInfo *funcInfo; + const TA_InputParameterInfo *inputInfo; + const TA_OutputParameterInfo *outputInfo; + + TA_RetCode retCode; + + (void)optInArray; + + /* Speed optimization if paramHolder is already initialized. */ + paramHolder = *paramHolderPtr; + if( !paramHolder ) + { + retCode = TA_GetFuncHandle( name, &handle ); + if( retCode != TA_SUCCESS ) + { + printf( "Can't get the function handle [%d]\n", retCode ); + return TA_TSTCDL_GETFUNCHANDLE_FAIL; + } + + retCode = TA_ParamHolderAlloc( handle, ¶mHolder ); + if( retCode != TA_SUCCESS ) + { + printf( "Can't allocate the param holder [%d]\n", retCode ); + return TA_TSTCDL_PARAMHOLDERALLOC_FAIL; + } + + *paramHolderPtr = paramHolder; + TA_GetFuncInfo( handle, &funcInfo ); + + /* Verify that the input are only OHLC. */ + if( funcInfo->nbInput != 1 ) + { + printf( "Candlestick are expected to use only OHLC as input.\n" ); + return TA_TSTCDL_NBINPUT_WRONG; + } + + TA_GetInputParameterInfo( handle, 0, &inputInfo ); + + if( inputInfo->type != TA_Input_Price ) + { + printf( "Candlestick are expected to use only OHLC as input.\n" ); + return TA_TSTCDL_INPUT_TYPE_WRONG; + } + + if( inputInfo->flags != (TA_IN_PRICE_OPEN | + TA_IN_PRICE_HIGH | + TA_IN_PRICE_LOW | + TA_IN_PRICE_CLOSE) ) + { + printf( "Candlestick are expected to use only OHLC as input.\n" ); + return TA_TSTCDL_INPUT_FLAG_WRONG; + } + + /* Set the optional inputs. */ + + /* Verify that there is only one output. */ + if( funcInfo->nbOutput != 1 ) + { + printf( "Candlestick are expected to have only one output array.\n" ); + return TA_TSTCDL_NBOUTPUT_WRONG; + } + + TA_GetOutputParameterInfo( handle, 0, &outputInfo ); + if( outputInfo->type != TA_Output_Integer ) + { + printf( "Candlestick are expected to have only one output array of type integer.\n" ); + return TA_TSTCDL_OUTPUT_TYPE_WRONG; + } + + /* !!!!!!!!!!!!! TO BE DONE !!!!!!!!!!!!!!!!!! + * For now all candlestick functions will be called with default optional parameter. + */ + } + + /* Set the input buffers. */ + TA_SetInputParamPricePtr( paramHolder, 0, + inOpen, inHigh, inLow, inClose, NULL, NULL ); + + TA_SetOutputParamIntegerPtr(paramHolder,0,outInteger); + + + /* Do the function call. */ + *taFuncRetCode = TA_CallFunc(paramHolder,startIdx,endIdx,outBegIdx,outNbElement); + + if( *taFuncRetCode != TA_SUCCESS ) + { + printf( "TA_CallFunc() failed [%d]\n", *taFuncRetCode ); + TA_ParamHolderFree( paramHolder ); + return TA_TSTCDL_CALLFUNC_FAIL; + } + + /* Do the lookback function call. */ + retCode = TA_GetLookback( paramHolder, lookback ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_GetLookback() failed [%d]\n", retCode ); + TA_ParamHolderFree( paramHolder ); + return TA_TSTCDL_GETLOOKBACK_FAIL; + } + + return TA_TEST_PASS; +} + +/* rangeTestFunction is a different way to call any of + * the TA function. + * + * This is called by doRangeTest found in test_util.c + * + * The doRangeTest verifies behavior that should be common + * for ALL TA functions. It detects bugs like: + * - outBegIdx, outNbElement and lookback inconsistency. + * - off-by-one writes to output. + * - output inconsistency for different start/end index. + * - ... many other limit cases... + * + * In the case of candlestick, the output is integer and + * should be put in outputBufferInt, and outputBuffer is + * ignored. + */ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RangeTestParam *testParam1; + const TA_Test *testParam2; + ErrorNumber errNb; + + TA_RetCode retCode; + + (void)outputBuffer; + (void)outputNb; + + testParam1 = (TA_RangeTestParam *)opaqueData; + testParam2 = (const TA_Test *)testParam1->test; + + *isOutputInteger = 1; /* Must be != 0 */ + + retCode = TA_INTERNAL_ERROR(166); + + /* Call the TA function by name */ + errNb = callCandlestick( &testParam1->paramHolder, + testParam2->name, + startIdx, endIdx, + testParam1->open, + testParam1->high, + testParam1->low, + testParam1->close, + testParam2->params, + outBegIdx, + outNbElement, + outputBufferInt, + lookback, + &retCode ); + + if( errNb != TA_TEST_PASS ) + retCode = TA_INTERNAL_ERROR(168); + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RangeTestParam testParam; + ErrorNumber errNb; + TA_RetCode retCode; + + (void)test; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->open, history->nbBars ); + setInputBuffer( 1, history->high, history->nbBars ); + setInputBuffer( 2, history->low, history->nbBars ); + setInputBuffer( 3, history->close, history->nbBars ); + + +#if 0 + /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ + /* Test for specific value not yet implemented */ + + /* Make a simple first call. */ + switch( test->theFunction ) + { + case TA_CCI_TEST: + retCode = TA_CCI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TA_WILLR_TEST: + retCode = TA_WILLR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + default: + retCode = TA_INTERNAL_ERROR(133); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_CCI_TEST: + retCode = TA_CCI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + break; + case TA_WILLR_TEST: + retCode = TA_WILLR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(134); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call to TA_MA should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + setInputBuffer( 0, history->high, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_CCI_TEST: + retCode = TA_CCI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_WILLR_TEST: + retCode = TA_WILLR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(135); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + setInputBuffer( 1, history->low, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_CCI_TEST: + retCode = TA_CCI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + break; + case TA_WILLR_TEST: + retCode = TA_WILLR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(136); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call to TA_MA should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[2].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[2].in, 0 ); + setInputBuffer( 2, history->close, history->nbBars ); +#endif + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.open = history->open; + testParam.high = history->high; + testParam.low = history->low; + testParam.close = history->close; + testParam.paramHolder = NULL; + + if( test->doRangeTestFlag ) + { + + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + + if( testParam.paramHolder ) + { + retCode = TA_ParamHolderFree( testParam.paramHolder ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_ParamHolderFree failed [%d]\n", retCode ); + return TA_TSTCDL_PARAMHOLDERFREE_FAIL; + } + } + + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} diff --git a/src/tools/ta_regtest/ta_test_func/test_ma.c b/src/tools/ta_regtest/ta_test_func/test_ma.c new file mode 100644 index 000000000..7d0ebd6a0 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_ma.c @@ -0,0 +1,816 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * 031707 MF Add TA_MAVP tests. + */ + +/* Description: + * Test all MA (Moving Average) functions. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" +#include "ta_memory.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { + TA_ANY_MA_TEST, + TA_MAMA_TEST, + TA_FAMA_TEST +} TA_TestId; + + +typedef struct +{ + TA_Integer doRangeTestFlag; + TA_TestId id; + + TA_Integer unstablePeriod; + + TA_Integer startIdx; + TA_Integer endIdx; + TA_Integer optInTimePeriod; + TA_Integer optInMAType_1; + TA_Integer compatibility; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex; + TA_Real oneOfTheExpectedOutReal; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; + const TA_Real *mavpPeriod; + int testMAVP; /* Boolean */ +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test_ma( const TA_History *history, + const TA_Test *test, + int testMAVP /* Boolean */ ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /************/ + /* T3 TEST */ + /************/ + { 1, TA_ANY_MA_TEST, 0, 0, 251, 5, TA_MAType_T3, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 85.73, 24, 252-24 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 5, TA_MAType_T3, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 84.37, 24, 252-24 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 5, TA_MAType_T3, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-26, 109.03, 24, 252-24 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 5, TA_MAType_T3, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-25, 108.88, 24, 252-24 }, /* Last Value */ + + /***************/ + /* TRIMA TEST */ + /***************/ + { 1, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_TRIMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 93.6043, 9, 252-9 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_TRIMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 93.4252, 9, 252-9 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_TRIMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-11, 109.1850, 9, 252-9 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_TRIMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-10, 109.1407, 9, 252-9 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 0, 0, 251, 9, TA_MAType_TRIMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 93.8176, 8, 252-8 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 9, TA_MAType_TRIMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-9, 109.1312, 8, 252-8 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 0, 0, 251, 12, TA_MAType_TRIMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 93.5329, 11, 252-11 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 12, TA_MAType_TRIMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-12, 109.1157, 11, 252-11 }, /* Last Value */ + + + + /************* + * MAMA TEST * + *************/ + { 1, TA_MAMA_TEST, 0, 0, 251, 10, TA_MAType_MAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 85.3643, 32, 252-32 }, /* First Value */ + { 0, TA_MAMA_TEST, 0, 0, 251, 10, TA_MAType_MAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-33, 110.1116, 32, 252-32 }, /* Last Value */ + + { 0, TA_FAMA_TEST, 0, 0, 251, 10, TA_MAType_MAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 81.88, 32, 252-32 }, /* First Value */ + { 0, TA_FAMA_TEST, 0, 0, 251, 10, TA_MAType_MAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-33, 108.82, 32, 252-32 }, /* Last Value */ + + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_MAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 85.3643, 32, 252-32 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_MAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-33, 110.1116, 32, 252-32 }, /* Last Value */ + + /***************************/ + /* KAMA TEST - Classic */ + /***************************/ + + /* No output value. */ + { 0, TA_ANY_MA_TEST, 0, 1, 1, 14, TA_MAType_KAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 0, 0, 0}, +#ifndef TA_FUNC_NO_RANGE_CHECK + { 0, TA_ANY_MA_TEST, 0, 0, 251, 0, TA_MAType_KAMA, TA_COMPATIBILITY_DEFAULT, TA_BAD_PARAM, 0, 0, 0, 0 }, +#endif + + /* Test with period 10 */ + { 1, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_KAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 92.6575, 10, 252-10 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_KAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 92.7783, 10, 252-10 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_KAMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-11, 109.294, 10, 252-10 }, /* Last Value */ + + + /*****************************************/ + /* SMA TEST - CLASSIC/METASTOCK */ + /*****************************************/ + +#ifndef TA_FUNC_NO_RANGE_CHECK + /* Test with invalid parameters */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, -1, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_BAD_PARAM, 0, 0, 0, 0 }, +#endif + + /* Test suppose to succeed. */ + { 1, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 93.15, 1, 252-1 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 94.59, 1, 252-1 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 2, 94.73, 1, 252-1 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 250, 108.31, 1, 252-1 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 90.42, 29, 252-29 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 90.21, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 2, 89.96, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 29, 87.12, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 221, 107.95, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 222, 108.42, 29, 252-29 }, /* Last Value */ + + /* Same test and result as TA_COMPATIBILITY_DEFAULT */ + { 1, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 93.15, 1, 252-1 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 94.59, 1, 252-1 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 94.73, 1, 252-1 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 250, 108.31, 1, 252-1 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 90.42, 29, 252-29 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 90.21, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 89.96, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 29, 87.12, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 221, 107.95, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 222, 108.42, 29, 252-29 }, /* Last Value */ + + + /*******************************/ + /* WMA TEST - CLASSIC */ + /*******************************/ + +#ifndef TA_FUNC_NO_RANGE_CHECK + /* No output value. */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 0, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_BAD_PARAM, 0, 0, 0, 0 }, +#endif + + /* One value tests. */ + { 0, TA_ANY_MA_TEST, 0, 2, 2, 2, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 94.52, 2, 1 }, + + /* Misc tests: period 2, 30 */ + + { 1, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 93.71, 1, 252-1 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 94.52, 1, 252-1 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 2, 94.85, 1, 252-1 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 250, 108.16, 1, 252-1 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 88.567, 29, 252-29 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 88.233, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 2, 88.034, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 29, 87.191, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 221, 109.3413, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 222, 109.3466, 29, 252-29 }, /* Last Value */ + + /*******************************/ + /* WMA TEST - METASTOCK */ + /*******************************/ + + /* No output value. */ + { 0, TA_ANY_MA_TEST, 0, 1, 1, 14, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0}, +#ifndef TA_FUNC_NO_RANGE_CHECK + { 0, TA_ANY_MA_TEST, 0, 0, 251, 0, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_BAD_PARAM, 0, 0, 0, 0 }, +#endif + + /* One value tests. */ + { 0, TA_ANY_MA_TEST, 0, 2, 2, 2, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 94.52, 2, 1 }, + + /* Misc tests: period 2, 30 */ + { 1, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 93.71, 1, 252-1 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 94.52, 1, 252-1 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 94.85, 1, 252-1 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 250, 108.16, 1, 252-1 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 88.567, 29, 252-29 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 88.233, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 88.034, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 29, 87.191, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 221, 109.3413, 29, 252-29 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 30, TA_MAType_WMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 222, 109.3466, 29, 252-29 }, /* Last Value */ + + /*******************************/ + /* EMA TEST - Classic */ + /*******************************/ + + /* No output value. */ + { 0, TA_ANY_MA_TEST, 0, 1, 1, 14, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 0, 0, 0}, +#ifndef TA_FUNC_NO_RANGE_CHECK + { 0, TA_ANY_MA_TEST, 0, 0, 251, 0, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_BAD_PARAM, 0, 0, 0, 0 }, +#endif + + /* Misc tests: period 2, 10 */ + { 1, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 93.15, 1, 251 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 93.96, 1, 251 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 250, 108.21, 1, 251 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 93.22, 9, 243 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 93.75, 9, 243 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 20, 86.46, 9, 243 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 242, 108.97, 9, 243 }, /* Last Value */ + + /*******************************/ + /* EMA TEST - Metastock */ + /*******************************/ + + + /* No output value. */ + { 0, TA_ANY_MA_TEST, 0, 1, 1, 14, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0}, +#ifndef TA_FUNC_NO_RANGE_CHECK + { 0, TA_ANY_MA_TEST, 0, 0, 251, 0, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_BAD_PARAM, 0, 0, 0, 0 }, +#endif + + /* Test with 1 unstable price bar. Test for period 2, 10 */ + { 1, TA_ANY_MA_TEST, 1, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 94.15, 1+1, 251-1 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 1, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 94.78, 1+1, 251-1 }, + { 0, TA_ANY_MA_TEST, 1, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 250-1, 108.21, 1+1, 251-1 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 1, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 93.24, 9+1, 243-1 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 1, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 93.97, 9+1, 243-1 }, + { 0, TA_ANY_MA_TEST, 1, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 20, 86.23, 9+1, 243-1 }, + { 0, TA_ANY_MA_TEST, 1, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 242-1, 108.97, 9+1, 243-1 }, /* Last Value */ + + /* Test with 2 unstable price bar. Test for period 2, 10 */ + { 0, TA_ANY_MA_TEST, 2, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 94.78, 1+2, 251-2 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 2, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 94.11, 1+2, 251-2 }, + { 0, TA_ANY_MA_TEST, 2, 0, 251, 2, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 250-2, 108.21, 1+2, 251-2 }, /* Last Value */ + + { 0, TA_ANY_MA_TEST, 2, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 93.97, 9+2, 243-2 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 2, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 94.79, 9+2, 243-2 }, + { 0, TA_ANY_MA_TEST, 2, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 20, 86.39, 9+2, 243-2 }, + { 0, TA_ANY_MA_TEST, 2, 0, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 242-2, 108.97, 9+2, 243-2 }, /* Last Value */ + + /* Last 3 value with 1 unstable, period 10 */ + { 0, TA_ANY_MA_TEST, 1, 249, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 109.22, 249, 3 }, + { 0, TA_ANY_MA_TEST, 1, 249, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 108.97, 249, 3 }, + + /* Last 3 value with 2 unstable, period 10 */ + { 0, TA_ANY_MA_TEST, 2, 249, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 108.97, 249, 3 }, + + /* Last 3 value with 3 unstable, period 10 */ + { 0, TA_ANY_MA_TEST, 3, 249, 251, 10, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 108.97, 249, 3 }, + + /*******************************/ + /* DEMA TEST - Metastock */ + /*******************************/ + + /* No output value. */ + { 0, TA_ANY_MA_TEST, 0, 1, 1, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0}, +#ifndef TA_FUNC_NO_RANGE_CHECK + { 0, TA_ANY_MA_TEST, 0, 0, 251, 0, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_BAD_PARAM, 0, 0, 0, 0 }, +#endif + + /* Test with period 14 */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 83.785, 26, 252-26 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 84.768, 26, 252-26 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-27, 109.467, 26, 252-26 }, /* Last Value */ + + /* Test with 1 unstable price bar. Test for period 2, 14 */ + { 1, TA_ANY_MA_TEST, 1, 0, 251, 2, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 93.960, 4, 252-4 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 1, 0, 251, 2, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 94.522, 4, 252-4 }, + { 0, TA_ANY_MA_TEST, 1, 0, 251, 2, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-5, 107.94, 4, 252-4 }, /* Last Value */ + + { 1, TA_ANY_MA_TEST, 1, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 84.91, (13*2)+2, 252-((13*2)+2) }, /* First Value */ + { 0, TA_ANY_MA_TEST, 1, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 84.97, (13*2)+2, 252-((13*2)+2) }, + { 0, TA_ANY_MA_TEST, 1, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 84.80, (13*2)+2, 252-((13*2)+2) }, + { 0, TA_ANY_MA_TEST, 1, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 3, 85.14, (13*2)+2, 252-((13*2)+2) }, + { 0, TA_ANY_MA_TEST, 1, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 20, 89.83, (13*2)+2, 252-((13*2)+2) }, + { 0, TA_ANY_MA_TEST, 1, 0, 251, 14, TA_MAType_DEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-((13*2)+2+1), 109.4676, (13*2)+2, 252-((13*2)+2) }, /* Last Value */ + + /*******************************/ + /* TEMA TEST - Metastock */ + /*******************************/ + /* No output value. */ + { 0, TA_ANY_MA_TEST, 0, 1, 1, 14, TA_MAType_TEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0}, +#ifndef TA_FUNC_NO_RANGE_CHECK + { 0, TA_ANY_MA_TEST, 0, 0, 251, 0, TA_MAType_TEMA, TA_COMPATIBILITY_METASTOCK, TA_BAD_PARAM, 0, 0, 0, 0 }, +#endif + + /* Test with period 14 */ + { 1, TA_ANY_MA_TEST, 0, 0, 251, 14, TA_MAType_TEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 84.721, 39, 252-39 }, /* First Value */ + { 0, TA_ANY_MA_TEST, 0, 0, 251, 14, TA_MAType_TEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 84.089, 39, 252-39 }, + { 0, TA_ANY_MA_TEST, 0, 0, 251, 14, TA_MAType_TEMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-40, 108.418, 39, 252-39 }, /* Last Value */ +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_ma( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + for( i=0; i < NB_TEST; i++ ) + { + + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "TA_MA Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test_ma( history, &tableTest[i], 0 ); + if( retValue != 0 ) + { + printf( "TA_MA Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + + /* If TA_ANY_MA_TEST. repeat test with TA_MAVP */ + if( tableTest[i].id == TA_ANY_MA_TEST ) + { + retValue = do_test_ma( history, &tableTest[i], 1 ); + if( retValue != 0 ) + { + printf( "TA_MAVP Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + TA_Real *dummyBuffer; + + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + switch( testParam->test->optInMAType_1 ) + { + case TA_MAType_MAMA: + dummyBuffer = TA_Malloc( sizeof(TA_Real)*(endIdx-startIdx+600) ); + if( outputNb == 0 ) + { + retCode = TA_MAMA( startIdx, + endIdx, + testParam->close, + 0.5, 0.05, + outBegIdx, + outNbElement, + outputBuffer, + &dummyBuffer[300] ); + } + else + { + retCode = TA_MAMA( startIdx, + endIdx, + testParam->close, + 0.5, 0.05, + outBegIdx, + outNbElement, + &dummyBuffer[300], + outputBuffer ); + } + TA_Free( dummyBuffer ); + *lookback = TA_MAMA_Lookback( 0.5, 0.05 ); + break; + default: + if( testParam->testMAVP ) + { + retCode = TA_MAVP( startIdx, + endIdx, + testParam->close, + testParam->mavpPeriod, + 2,testParam->test->optInTimePeriod, + (TA_MAType)testParam->test->optInMAType_1, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_MAVP_Lookback( 2, testParam->test->optInTimePeriod, + (TA_MAType)testParam->test->optInMAType_1 ); + } + else + { + /* Test for the TA_MA function. All the MA can be done + * through that function. + */ + retCode = TA_MA( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + (TA_MAType)testParam->test->optInMAType_1, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_MA_Lookback( testParam->test->optInTimePeriod, + (TA_MAType)testParam->test->optInMAType_1 ); + } + break; + } + + return retCode; +} + +static ErrorNumber do_test_ma( const TA_History *history, + const TA_Test *test, + int testMAVP ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + TA_Integer temp, temp2; + const TA_Real *referenceInput; + + /* TA_MAVP is tested only for TA_ANY_MA_TEST */ + if( testMAVP && (test->id != TA_ANY_MA_TEST) ) + { + return TA_TEST_PASS; + } + + TA_SetCompatibility( (TA_Compatibility)test->compatibility ); + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + if( testMAVP ) + { + setInputBufferValue( 2, test->optInTimePeriod, history->nbBars ); + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* Set the unstable period requested for that test. */ + switch( test->optInMAType_1 ) + { + case TA_MAType_TEMA: + case TA_MAType_DEMA: + case TA_MAType_EMA: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_EMA, test->unstablePeriod ); + break; + case TA_MAType_KAMA: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_KAMA, test->unstablePeriod ); + break; + case TA_MAType_MAMA: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_MAMA, test->unstablePeriod ); + break; + case TA_MAType_T3: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_T3, test->unstablePeriod ); + break; + default: + retCode = TA_SUCCESS; + break; + } + + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + /* Transform the inputs for MAMA (it is an AVGPRICE in John Ehlers book). */ + if( test->optInMAType_1 == TA_MAType_MAMA ) + { + TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low, + &outBegIdx, &outNbElement, gBuffer[0].in ); + + TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low, + &outBegIdx, &outNbElement, gBuffer[1].in ); + + /* Will be use as reference */ + TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low, + &outBegIdx, &outNbElement, gBuffer[2].in ); + referenceInput = gBuffer[2].in; + } + else + referenceInput = history->close; + + + + /* Make a simple first call. */ + switch( test->id ) + { + case TA_ANY_MA_TEST: + if(testMAVP) + { + retCode = TA_MAVP( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[2].in, + 2, test->optInTimePeriod, + (TA_MAType)test->optInMAType_1, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + } + else + { + retCode = TA_MA( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + (TA_MAType)test->optInMAType_1, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + } + break; + case TA_MAMA_TEST: + retCode = TA_MAMA( test->startIdx, + test->endIdx, + gBuffer[0].in, + 0.5, 0.05, + &outBegIdx, + &outNbElement, + gBuffer[0].out0, + gBuffer[0].out2 ); + + break; + case TA_FAMA_TEST: + retCode = TA_MAMA( test->startIdx, + test->endIdx, + gBuffer[0].in, + 0.5, 0.05, + &outBegIdx, + &outNbElement, + gBuffer[0].out2, + gBuffer[0].out0 ); + + break; + } + + errNb = checkDataSame( gBuffer[0].in, referenceInput, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkExpectedValue( gBuffer[0].out0, + retCode, test->expectedRetCode, + outBegIdx, test->expectedBegIdx, + outNbElement, test->expectedNbElement, + test->oneOfTheExpectedOutReal, + test->oneOfTheExpectedOutRealIndex ); + if( errNb != TA_TEST_PASS ) + return errNb; + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->id ) + { + case TA_ANY_MA_TEST: + if(testMAVP) + { + retCode = TA_MAVP( test->startIdx, + test->endIdx, + gBuffer[1].in, + gBuffer[2].in, + 2,test->optInTimePeriod, + (TA_MAType)test->optInMAType_1, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + } + else + { + retCode = TA_MA( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + (TA_MAType)test->optInMAType_1, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + } + break; + case TA_MAMA_TEST: + retCode = TA_MAMA( test->startIdx, + test->endIdx, + gBuffer[1].in, + 0.5, 0.05, + &outBegIdx, + &outNbElement, + gBuffer[1].in, + gBuffer[0].out2 ); + break; + case TA_FAMA_TEST: + retCode = TA_MAMA( test->startIdx, + test->endIdx, + gBuffer[1].in, + 0.5, 0.05, + &outBegIdx, + &outNbElement, + gBuffer[0].out2, + gBuffer[1].in ); + break; + } + + /* The previous call to TA_MA should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkExpectedValue( gBuffer[1].in, + retCode, test->expectedRetCode, + outBegIdx, test->expectedBegIdx, + outNbElement, test->expectedNbElement, + test->oneOfTheExpectedOutReal, + test->oneOfTheExpectedOutRealIndex ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Verify that the "all-purpose" TA_MA_Lookback is consistent + * with the corresponding moving average lookback function. + */ + if( test->optInTimePeriod >= 2 ) + { + switch( test->optInMAType_1 ) + { + case TA_MAType_WMA: + temp = TA_WMA_Lookback( test->optInTimePeriod ); + break; + + case TA_MAType_SMA: + temp = TA_SMA_Lookback( test->optInTimePeriod ); + break; + + case TA_MAType_EMA: + temp = TA_EMA_Lookback( test->optInTimePeriod ); + break; + + case TA_MAType_DEMA: + temp = TA_DEMA_Lookback( test->optInTimePeriod ); + break; + + case TA_MAType_TEMA: + temp = TA_TEMA_Lookback( test->optInTimePeriod ); + break; + + case TA_MAType_KAMA: + temp = TA_KAMA_Lookback( test->optInTimePeriod ); + break; + + case TA_MAType_MAMA: + temp = TA_MAMA_Lookback( 0.5, 0.05 ); + break; + + case TA_MAType_TRIMA: + temp = TA_TRIMA_Lookback( test->optInTimePeriod ); + break; + + case TA_MAType_T3: + temp = TA_T3_Lookback( test->optInTimePeriod, 0.7 ); + break; + + default: + return TA_TEST_TFRR_BAD_MA_TYPE; + } + + temp2 = TA_MA_Lookback( test->optInTimePeriod, (TA_MAType)test->optInMAType_1 ); + + if( temp != temp2 ) + { + printf( "\nFailed for MA Type #%d for period %d\n", test->optInMAType_1, test->optInTimePeriod ); + return TA_TEST_TFFR_BAD_MA_LOOKBACK; + } + } + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = referenceInput; + testParam.testMAVP = testMAVP; + testParam.mavpPeriod = gBuffer[2].in; + + if( test->doRangeTestFlag ) + { + switch( test->optInMAType_1 ) + { + case TA_MAType_TEMA: + case TA_MAType_DEMA: + case TA_MAType_EMA: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_EMA, + (void *)&testParam, 1, 0 ); + break; + case TA_MAType_T3: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_T3, + (void *)&testParam, 1, 0 ); + break; + case TA_MAType_KAMA: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_KAMA, + (void *)&testParam, 1, 0 ); + break; + case TA_MAType_MAMA: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_MAMA, + (void *)&testParam, 2, 0 ); + break; + default: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + } + + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_macd.c b/src/tools/ta_regtest/ta_test_func/test_macd.c new file mode 100644 index 000000000..554c962ec --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_macd.c @@ -0,0 +1,603 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Regression test of MACD. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" +#include "ta_memory.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_MACD_TEST, +TA_MACDFIX_TEST, +TA_MACDEXT_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + TA_TestId testId; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInFastPeriod; + TA_Integer optInSlowPeriod; + TA_Integer optInSignalPeriod_2; + TA_Integer compatibility; + + TA_RetCode expectedRetCode; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer oneOfTheExpectedOutRealIndex1; + TA_Real oneOfTheExpectedOutReal1; + + TA_Integer oneOfTheExpectedOutRealIndex2; + TA_Real oneOfTheExpectedOutReal2; + +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ +static TA_Test tableTest[] = +{ + + /*********************/ + /* MACD - CLASSIC */ + /*********************/ + { 0, TA_MACD_TEST, 0, 251, 12, 26, 9, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 33, 252-33, /* 25, 252-25,*/ + 0, -1.9738, /* MACD */ + 0, -2.7071, /* Signal */ + 0, (-1.9738)-(-2.7071) }, /* Histogram */ + + /* Test period inversion */ + { 0, TA_MACD_TEST, 0, 251, 26, 12, 9, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 33, 252-33, /* 25, 252-25,*/ + 0, -1.9738, /* MACD */ + 0, -2.7071, /* Signal */ + 0, (-1.9738)-(-2.7071) }, /* Histogram */ + + /***********************/ + /* MACD - METASTOCK */ + /***********************/ + + /*******************************/ + /* MACDEXT - MIMIC CLASSIC */ + /*******************************/ + { 0, TA_MACDEXT_TEST, 0, 251, 12, 26, 9, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 33, 252-33, /* 25, 252-25,*/ + 0, -1.9738, /* MACD */ + 0, -2.7071, /* Signal */ + 0, (-1.9738)-(-2.7071)}, /* Histogram */ + + /***************************/ + /* MACD FIX - CLASSIC */ + /***************************/ + + /***************************/ + /* MACD FIX - METASTOCK */ + /***************************/ + { 1, TA_MACDFIX_TEST, 0, 251, 12, 26, 9, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 33, 252-33, /* 25, 252-25,*/ + 0, -1.2185, /* MACD */ + 0, -1.7119, /* Signal */ + 0, (-1.2185)-(-1.7119) }, /* Histogram */ + + { 0, TA_MACDFIX_TEST, 0, 251, 12, 26, 9, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 33, 252-33, + 252-34, 0.8764, /* MACD */ + 252-34, 1.3533, /* Signal */ + 252-34, (0.8764)-(1.3533)}, /* Histogram */ + /* Test period inversion */ + { 0, TA_MACDFIX_TEST, 0, 251, 26, 12, 9, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 33, 252-33, + 252-34, 0.8764, /* MACD */ + 252-34, 1.3533, /* Signal */ + 252-34, (0.8764)-(1.3533)} /* Histogram */ + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_macd( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + for( i=0; i < NB_TEST; i++ ) + { + + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "TA_MACD Failed Bad Parameter for Test #%d (%d,%d)\n", + i, + tableTest[i].expectedNbElement, + history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "TA_MACD Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + TA_Real *dummyBuffer1, *dummyBuffer2; + TA_Real *out1, *out2, *out3; + + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + dummyBuffer1 = TA_Malloc( ((endIdx-startIdx)+1)*sizeof(TA_Real)); + if( !dummyBuffer1 ) + return TA_ALLOC_ERR; + + dummyBuffer2 = TA_Malloc( ((endIdx-startIdx)+1)*sizeof(TA_Real)); + if( !dummyBuffer2 ) + { + TA_Free( dummyBuffer1 ); + return TA_ALLOC_ERR; + } + + switch( outputNb ) + { + case 0: + out1 = outputBuffer; + out2 = dummyBuffer1; + out3 = dummyBuffer2; + break; + case 1: + out2 = outputBuffer; + out1 = dummyBuffer1; + out3 = dummyBuffer2; + break; + case 2: + out3 = outputBuffer; + out2 = dummyBuffer1; + out1 = dummyBuffer2; + break; + default: + TA_Free( dummyBuffer1 ); + TA_Free( dummyBuffer2 ); + return TA_BAD_PARAM; + } + + switch( testParam->test->testId ) + { + case TA_MACDFIX_TEST: + retCode = TA_MACDFIX( startIdx, + endIdx, + testParam->close, + testParam->test->optInSignalPeriod_2, + outBegIdx, outNbElement, + out1, out2, out3 ); + *lookback = TA_MACDFIX_Lookback( testParam->test->optInSignalPeriod_2 ); + break; + case TA_MACD_TEST: + retCode = TA_MACD( startIdx, + endIdx, + testParam->close, + testParam->test->optInFastPeriod, + testParam->test->optInSlowPeriod, + testParam->test->optInSignalPeriod_2, + outBegIdx, outNbElement, + out1, out2, out3 ); + + *lookback = TA_MACD_Lookback( testParam->test->optInFastPeriod, + testParam->test->optInSlowPeriod, + testParam->test->optInSignalPeriod_2 ); + break; + case TA_MACDEXT_TEST: + retCode = TA_MACDEXT( startIdx, + endIdx, + testParam->close, + testParam->test->optInFastPeriod, + TA_MAType_EMA, + testParam->test->optInSlowPeriod, + TA_MAType_EMA, + testParam->test->optInSignalPeriod_2, + TA_MAType_EMA, + outBegIdx, outNbElement, + out1, out2, out3 ); + + *lookback = TA_MACDEXT_Lookback( testParam->test->optInFastPeriod, + TA_MAType_EMA, + testParam->test->optInSlowPeriod, + TA_MAType_EMA, + testParam->test->optInSignalPeriod_2, + TA_MAType_EMA ); + break; + default: + retCode = TA_BAD_PARAM; + } + + TA_Free( dummyBuffer1 ); + TA_Free( dummyBuffer2 ); + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_EMA, 0 ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + TA_SetCompatibility( (TA_Compatibility)test->compatibility ); + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + setInputBuffer( 2, history->close, history->nbBars ); + setInputBuffer( 3, history->close, history->nbBars ); + + CLEAR_EXPECTED_VALUE(0); + CLEAR_EXPECTED_VALUE(1); + CLEAR_EXPECTED_VALUE(2); + + /* Make a simple first call. */ + switch( test->testId ) + { + case TA_MACDFIX_TEST: + retCode = TA_MACDFIX( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInSignalPeriod_2, + &outBegIdx, &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1, + gBuffer[0].out2 ); + break; + case TA_MACD_TEST: + retCode = TA_MACD(test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInFastPeriod, + test->optInSlowPeriod, + test->optInSignalPeriod_2, + &outBegIdx, &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1, + gBuffer[0].out2 ); + break; + case TA_MACDEXT_TEST: + retCode = TA_MACDEXT( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInFastPeriod, + TA_MAType_EMA, + test->optInSlowPeriod, + TA_MAType_EMA, + test->optInSignalPeriod_2, + TA_MAType_EMA, + &outBegIdx, &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1, + gBuffer[0].out2 ); + break; + } + + + errNb = checkDataSame( gBuffer[0].in, history->close, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[0].out1, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[0].out2, 2 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->testId ) + { + case TA_MACDFIX_TEST: + retCode = TA_MACDFIX( + test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInSignalPeriod_2, + &outBegIdx, &outNbElement, + gBuffer[1].in, + gBuffer[1].out1, + gBuffer[1].out2 ); + break; + case TA_MACD_TEST: + retCode = TA_MACD(test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInFastPeriod, + test->optInSlowPeriod, + test->optInSignalPeriod_2, + &outBegIdx, &outNbElement, + gBuffer[1].in, + gBuffer[1].out1, + gBuffer[1].out2 ); + break; + case TA_MACDEXT_TEST: + retCode = TA_MACDEXT( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInFastPeriod, + TA_MAType_EMA, + test->optInSlowPeriod, + TA_MAType_EMA, + test->optInSignalPeriod_2, + TA_MAType_EMA, + &outBegIdx, &outNbElement, + gBuffer[1].in, + gBuffer[1].out1, + gBuffer[1].out2 ); + break; + } + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[1].out1, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[1].out2, 2 ); + + outBegIdx = outNbElement = 0; + + CLEAR_EXPECTED_VALUE(0); + CLEAR_EXPECTED_VALUE(1); + CLEAR_EXPECTED_VALUE(2); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->testId ) + { + case TA_MACDFIX_TEST: + retCode = TA_MACDFIX( + test->startIdx, + test->endIdx, + gBuffer[2].in, + test->optInSignalPeriod_2, + &outBegIdx, &outNbElement, + gBuffer[2].out1, + gBuffer[2].in, + gBuffer[2].out2 ); + break; + + case TA_MACD_TEST: + retCode = TA_MACD( + test->startIdx, + test->endIdx, + gBuffer[2].in, + test->optInFastPeriod, + test->optInSlowPeriod, + test->optInSignalPeriod_2, + &outBegIdx, &outNbElement, + gBuffer[2].out1, + gBuffer[2].in, + gBuffer[2].out2 ); + break; + case TA_MACDEXT_TEST: + retCode = TA_MACDEXT( + test->startIdx, + test->endIdx, + gBuffer[2].in, + test->optInFastPeriod, + TA_MAType_EMA, + test->optInSlowPeriod, + TA_MAType_EMA, + test->optInSignalPeriod_2, + TA_MAType_EMA, + &outBegIdx, &outNbElement, + gBuffer[2].out1, + gBuffer[2].in, + gBuffer[2].out2 ); + break; + } + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[1].out1, gBuffer[2].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[2].out1, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[2].in, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[2].out2, 2 ); + + outBegIdx = outNbElement = 0; + + CLEAR_EXPECTED_VALUE(0); + CLEAR_EXPECTED_VALUE(1); + CLEAR_EXPECTED_VALUE(2); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->testId ) + { + case TA_MACDFIX_TEST: + retCode = TA_MACDFIX( test->startIdx, + test->endIdx, + gBuffer[3].in, + test->optInSignalPeriod_2, + &outBegIdx, &outNbElement, + gBuffer[3].out1, + gBuffer[3].out2, + gBuffer[3].in ); + break; + case TA_MACD_TEST: + retCode = TA_MACD(test->startIdx, + test->endIdx, + gBuffer[3].in, + test->optInFastPeriod, + test->optInSlowPeriod, + test->optInSignalPeriod_2, + &outBegIdx, &outNbElement, + gBuffer[3].out1, + gBuffer[3].out2, + gBuffer[3].in ); + break; + case TA_MACDEXT_TEST: + retCode = TA_MACDEXT( test->startIdx, + test->endIdx, + gBuffer[3].in, + test->optInFastPeriod, + TA_MAType_EMA, + test->optInSlowPeriod, + TA_MAType_EMA, + test->optInSignalPeriod_2, + TA_MAType_EMA, + &outBegIdx, &outNbElement, + gBuffer[3].out1, + gBuffer[3].out2, + gBuffer[3].in ); + break; + } + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[2].out2, gBuffer[3].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[3].out1, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[3].out2, 1 ); + CHECK_EXPECTED_VALUE( gBuffer[3].in, 2 ); + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_EMA, + (void *)&testParam, 3, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} diff --git a/src/tools/ta_regtest/ta_test_func/test_minmax.c b/src/tools/ta_regtest/ta_test_func/test_minmax.c new file mode 100644 index 000000000..251de602a --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_minmax.c @@ -0,0 +1,833 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * 122506 MF Add tests for MININDEX,MAXINDEX,MINMAX and MINMAXINDEX. + */ + +/* Description: + * Test the min/max related functions. + * + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" +#include "ta_memory.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_MIN_TEST, +TA_MAX_TEST, +TA_MINMAX_TEST, +TA_MININDEX_TEST, +TA_MAXINDEX_TEST, +TA_MINMAXINDEX_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInTimePeriod; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Real *input; + unsigned int nbElement; +} TA_RefTest; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +static TA_RetCode referenceMin( TA_Integer startIdx, + TA_Integer endIdx, + const TA_Real inReal[], + TA_Integer optInTimePeriod, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Real outReal[] ); + +static TA_RetCode referenceMax( TA_Integer startIdx, + TA_Integer endIdx, + const TA_Real inReal[], + TA_Integer optInTimePeriod, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Real outReal[] ); + +static ErrorNumber testCompareToReference( const TA_Real *input, int nbElement ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /**********************/ + /* MIN TEST */ + /**********************/ + + /* No output value. */ + { 0, TA_MIN_TEST, 1, 1, 14, TA_SUCCESS, 0, 0, 0, 0}, + + /* One value tests. */ + { 0, TA_MIN_TEST, 14, 14, 14, TA_SUCCESS, 0, 91.125, 14, 1}, + + /* Index too low test. */ + { 0, TA_MIN_TEST, 0, 15, 14, TA_SUCCESS, 0, 91.125, 13, 3}, + { 0, TA_MIN_TEST, 1, 15, 14, TA_SUCCESS, 0, 91.125, 13, 3}, + { 0, TA_MIN_TEST, 2, 16, 14, TA_SUCCESS, 0, 91.125, 13, 4}, + { 0, TA_MIN_TEST, 2, 16, 14, TA_SUCCESS, 1, 91.125, 13, 4}, + { 0, TA_MIN_TEST, 2, 16, 14, TA_SUCCESS, 2, 91.125, 13, 4}, + { 0, TA_MIN_TEST, 0, 14, 14, TA_SUCCESS, 0, 91.125, 13, 2}, + { 0, TA_MIN_TEST, 0, 13, 14, TA_SUCCESS, 0, 91.125, 13, 1}, + + /* Middle of data test. */ + { 0, TA_MIN_TEST, 20, 21, 14, TA_SUCCESS, 0, 89.345, 20, 2 }, + { 0, TA_MIN_TEST, 20, 21, 14, TA_SUCCESS, 1, 87.94, 20, 2 }, + + /* Misc tests: 2 and 14 periods */ + { 1, TA_MIN_TEST, 0, 251, 14, TA_SUCCESS, 0, 91.125, 13, 252-13 }, /* First Value */ + { 0, TA_MIN_TEST, 0, 251, 14, TA_SUCCESS, 1, 91.125, 13, 252-13 }, + { 0, TA_MIN_TEST, 0, 251, 14, TA_SUCCESS, 2, 91.125, 13, 252-13 }, + { 0, TA_MIN_TEST, 0, 251, 14, TA_SUCCESS, 3, 91.125, 13, 252-13 }, + { 0, TA_MIN_TEST, 0, 251, 14, TA_SUCCESS, 4, 89.75, 13, 252-13 }, + { 0, TA_MIN_TEST, 0, 251, 14, TA_SUCCESS, 252-14, 107.75, 13, 252-13 }, /* Last Value */ + + { 1, TA_MIN_TEST, 0, 251, 2, TA_SUCCESS, 0, 91.5, 1, 252-1 }, /* First Value */ + { 0, TA_MIN_TEST, 0, 251, 2, TA_SUCCESS, 1, 91.5, 1, 252-1 }, + { 0, TA_MIN_TEST, 0, 251, 2, TA_SUCCESS, 2, 93.97, 1, 252-1 }, + { 0, TA_MIN_TEST, 0, 251, 2, TA_SUCCESS, 3, 93.97, 1, 252-1 }, + { 0, TA_MIN_TEST, 0, 251, 2, TA_SUCCESS, 4, 94.5, 1, 252-1 }, + { 0, TA_MIN_TEST, 0, 251, 2, TA_SUCCESS, 252-2, 109.19, 1, 252-1 }, /* Last Value */ + + /**********************/ + /* MAX TEST */ + /**********************/ + + /* One value tests. */ + { 0, TA_MAX_TEST, 14, 14, 14, TA_SUCCESS, 0, 98.815, 14, 1}, + + /* Index too low test. */ + { 0, TA_MAX_TEST, 0, 15, 14, TA_SUCCESS, 0, 98.815, 13, 3}, + { 0, TA_MAX_TEST, 1, 15, 14, TA_SUCCESS, 0, 98.815, 13, 3}, + { 0, TA_MAX_TEST, 2, 16, 14, TA_SUCCESS, 0, 98.815, 13, 4}, + { 0, TA_MAX_TEST, 2, 16, 14, TA_SUCCESS, 1, 98.815, 13, 4}, + { 0, TA_MAX_TEST, 2, 16, 14, TA_SUCCESS, 2, 98.815, 13, 4}, + { 0, TA_MAX_TEST, 0, 14, 14, TA_SUCCESS, 0, 98.815, 13, 2}, + { 0, TA_MAX_TEST, 0, 13, 14, TA_SUCCESS, 0, 98.815, 13, 1}, + + /* Middle of data test. */ + { 0, TA_MAX_TEST, 20, 21, 14, TA_SUCCESS, 0, 98.815, 20, 2 }, + { 0, TA_MAX_TEST, 20, 21, 14, TA_SUCCESS, 1, 98.815, 20, 2 }, + { 0, TA_MAX_TEST, 20, 99, 14, TA_SUCCESS, 6, 93.405, 20, 80 }, + { 0, TA_MAX_TEST, 20, 99, 14, TA_SUCCESS, 6, 93.405, 20, 80 }, + { 0, TA_MAX_TEST, 20, 99, 14, TA_SUCCESS, 13, 89.78, 20, 80 }, + + /* Misc tests: 1, 2 and 14 periods */ + { 1, TA_MAX_TEST, 0, 251, 14, TA_SUCCESS, 0, 98.815, 13, 252-13 }, /* First Value */ + { 0, TA_MAX_TEST, 0, 251, 14, TA_SUCCESS, 1, 98.815, 13, 252-13 }, + { 0, TA_MAX_TEST, 0, 251, 14, TA_SUCCESS, 2, 98.815, 13, 252-13 }, + { 0, TA_MAX_TEST, 0, 251, 14, TA_SUCCESS, 3, 98.815, 13, 252-13 }, + { 0, TA_MAX_TEST, 0, 251, 14, TA_SUCCESS, 4, 98.815, 13, 252-13 }, + { 0, TA_MAX_TEST, 0, 251, 14, TA_SUCCESS, 252-14, 110.69, 13, 252-13 }, /* Last Value */ + + { 1, TA_MAX_TEST, 0, 251, 2, TA_SUCCESS, 0, 92.5, 1, 252-1 }, /* First Value */ + { 0, TA_MAX_TEST, 0, 251, 2, TA_SUCCESS, 1, 95.155, 1, 252-1 }, + { 0, TA_MAX_TEST, 0, 251, 2, TA_SUCCESS, 2, 95.155, 1, 252-1 }, + { 0, TA_MAX_TEST, 0, 251, 2, TA_SUCCESS, 3, 95.5, 1, 252-1 }, + { 0, TA_MAX_TEST, 0, 251, 2, TA_SUCCESS, 4, 95.5, 1, 252-1 }, + { 0, TA_MAX_TEST, 0, 251, 2, TA_SUCCESS, 5, 95.0, 1, 252-1 }, + { 0, TA_MAX_TEST, 0, 251, 2, TA_SUCCESS, 252-2, 109.69, 1, 252-1 }, /* Last Value */ + + /*************************************/ + /* MINMAX and INDEX Functions tests */ + /*************************************/ + + /* Note: for now only range tests done on these */ + { 1, TA_MINMAX_TEST, 0, 251, 14, TA_SUCCESS, 0, 91.125, 13, 252-13 }, + { 1, TA_MINMAXINDEX_TEST, 0, 251, 14, TA_SUCCESS, 0, 91.125, 13, 252-13 }, + { 1, TA_MININDEX_TEST, 0, 251, 14, TA_SUCCESS, 0, 91.125, 13, 252-13 }, + { 1, TA_MAXINDEX_TEST, 0, 251, 14, TA_SUCCESS, 0, 91.125, 13, 252-13 } +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +static TA_Real testSerie1[] = {9,8,7,6,5}; +static TA_Real testSerie2[] = {3,7,9,10,15,33,50}; +static TA_Real testSerie3[] = {0,0,0,1,2,0,0,0}; +static TA_Real testSerie4[] = {0,0,0,2,1,0,0,0}; +static TA_Real testSerie5[] = {2,0,0,0,0,0,0,0}; +static TA_Real testSerie6[] = {0,0,0,0,0,0,0,1}; +static TA_Real testSerie7[] = {-3,2}; +static TA_Real testSerie8[] = {2,-2}; +static TA_Real testSerie9[] = {4,2,3}; +static TA_Real testSerie10[] = {3,3,-3,2,-1,0,2}; + +static TA_RefTest tableRefTest[] = +{ + {testSerie1, sizeof(testSerie1)/sizeof(TA_Real)}, + {testSerie2, sizeof(testSerie2)/sizeof(TA_Real)}, + {testSerie3, sizeof(testSerie3)/sizeof(TA_Real)}, + {testSerie4, sizeof(testSerie4)/sizeof(TA_Real)}, + {testSerie5, sizeof(testSerie5)/sizeof(TA_Real)}, + {testSerie6, sizeof(testSerie6)/sizeof(TA_Real)}, + {testSerie7, sizeof(testSerie7)/sizeof(TA_Real)}, + {testSerie8, sizeof(testSerie8)/sizeof(TA_Real)}, + {testSerie9, sizeof(testSerie10)/sizeof(TA_Real)} +}; + +#define NB_TEST_REF (sizeof(tableRefTest)/sizeof(TA_RefTest)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_minmax( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", __FILE__, + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", __FILE__, + i, retValue ); + return retValue; + } + } + + /* Do tests against a local reference which is the non-optimized implementation */ + for( i=0; i < NB_TEST_REF; i++ ) + { + retValue = testCompareToReference( tableRefTest[i].input, + tableRefTest[i].nbElement ); + if( retValue != 0 ) + { + printf( "%s Failed Ref Test #%d (Code=%d)\n", __FILE__, + i, retValue ); + return retValue; + } + } + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + TA_Real *dummyBufferReal; + TA_Real *out1Real; + TA_Real *out2Real; + + TA_Integer *dummyBufferInt; + TA_Integer *out1Int; + TA_Integer *out2Int; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + dummyBufferReal = TA_Malloc( ((endIdx-startIdx)+1)*sizeof(TA_Real)); + if( !dummyBufferReal ) + return TA_ALLOC_ERR; + + dummyBufferInt = TA_Malloc( ((endIdx-startIdx)+1)*sizeof(TA_Integer)); + if( !dummyBufferInt ) + { + TA_Free( dummyBufferReal ); + return TA_ALLOC_ERR; + } + + switch( outputNb ) + { + case 0: + out1Real = outputBuffer; + out2Real = dummyBufferReal; + out1Int = outputBufferInt; + out2Int = dummyBufferInt; + break; + case 1: + out1Real = dummyBufferReal; + out2Real = outputBuffer; + out1Int = dummyBufferInt; + out2Int = outputBufferInt; + break; + default: + TA_Free( dummyBufferReal ); + return TA_BAD_PARAM; + } + + switch( testParam->test->theFunction ) + { + case TA_MIN_TEST: + retCode = TA_MIN( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_MIN_Lookback( testParam->test->optInTimePeriod ); + break; + + case TA_MAX_TEST: + retCode = TA_MAX( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_MAX_Lookback( testParam->test->optInTimePeriod ); + break; + + case TA_MINMAX_TEST: + retCode = TA_MINMAX( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + out1Real, out2Real ); + *lookback = TA_MINMAX_Lookback( testParam->test->optInTimePeriod ); + break; + + case TA_MINMAXINDEX_TEST: + retCode = TA_MINMAXINDEX( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + out1Int, out2Int ); + *lookback = TA_MINMAXINDEX_Lookback( testParam->test->optInTimePeriod ); + *isOutputInteger = 1; + break; + + case TA_MININDEX_TEST: + retCode = TA_MININDEX( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + out1Int ); + *lookback = TA_MININDEX_Lookback( testParam->test->optInTimePeriod ); + *isOutputInteger = 1; + break; + + case TA_MAXINDEX_TEST: + retCode = TA_MAXINDEX( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + out1Int ); + *lookback = TA_MAXINDEX_Lookback( testParam->test->optInTimePeriod ); + *isOutputInteger = 1; + break; + + default: + retCode = TA_INTERNAL_ERROR(129); + break; + } + + TA_Free( dummyBufferReal ); + TA_Free( dummyBufferInt ); + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->open, history->nbBars ); + setInputBuffer( 1, history->open, history->nbBars ); + + CLEAR_EXPECTED_VALUE(0); + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + + /* Make a simple first call. */ + if( test->theFunction == TA_MIN_TEST ) + { + retCode = TA_MIN( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + } + else if( test->theFunction == TA_MAX_TEST ) + { + retCode = TA_MAX( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + } + else + { + /* For now, tests only MIN and MAX. Only range check tests implemented. */ + return TA_TEST_PASS; + } + + errNb = checkDataSame( gBuffer[0].in, history->open,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + CLEAR_EXPECTED_VALUE(0); + if( test->theFunction == TA_MIN_TEST ) + { + retCode = TA_MIN( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + } + else if( test->theFunction == TA_MAX_TEST ) + { + retCode = TA_MAX( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + } + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + + return TA_TEST_PASS; +} + + +/* These reference functions were the original non-optimized + * version of TA_MIN and TA_MAX. + * + * TA-Lib might implement a faster algorithm, at the cost + * of complexity. Consequently, it is important to verify the + * equivalence between the optimize and non-optimized version. + */ +static TA_RetCode referenceMin( TA_Integer startIdx, + TA_Integer endIdx, + const TA_Real inReal[], + TA_Integer optInTimePeriod, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Real outReal[] ) +{ + TA_Real lowest, tmp; + TA_Integer outIdx, nbInitialElementNeeded; + TA_Integer trailingIdx, today, i; + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + *outBegIdx = 0; + *outNbElement = 0; + return TA_SUCCESS; + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + + while( today <= endIdx ) + { + lowest = inReal[trailingIdx++]; + for( i=trailingIdx; i <= today; i++ ) + { + tmp = inReal[i]; + if( tmp < lowest) lowest= tmp; + } + + outReal[outIdx++] = lowest; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + *outBegIdx = startIdx; + *outNbElement = outIdx; + + return TA_SUCCESS; +} + +static TA_RetCode referenceMax( TA_Integer startIdx, + TA_Integer endIdx, + const TA_Real inReal[], + TA_Integer optInTimePeriod, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Real outReal[] ) +{ + /* Insert local variables here. */ + TA_Real highest, tmp; + TA_Integer outIdx, nbInitialElementNeeded; + TA_Integer trailingIdx, today, i; + + +#ifndef TA_FUNC_NO_RANGE_CHECK + + /* Validate the requested output range. */ + if( startIdx < 0 ) + return TA_OUT_OF_RANGE_START_INDEX; + if( (endIdx < 0) || (endIdx < startIdx)) + return TA_OUT_OF_RANGE_END_INDEX; + + /* Validate the parameters. */ + if( !inReal ) return TA_BAD_PARAM; + /* min/max are checked for optInTimePeriod. */ + if( optInTimePeriod == TA_INTEGER_DEFAULT ) + optInTimePeriod = 30; + + if( outReal == NULL ) + return TA_BAD_PARAM; + +#endif /* TA_FUNC_NO_RANGE_CHECK */ + + /* Insert TA function code here. */ + + /* Identify the minimum number of price bar needed + * to identify at least one output over the specified + * period. + */ + nbInitialElementNeeded = (optInTimePeriod-1); + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < nbInitialElementNeeded ) + startIdx = nbInitialElementNeeded; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + *outBegIdx = 0; + *outNbElement = 0; + return TA_SUCCESS; + } + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + today = startIdx; + trailingIdx = startIdx-nbInitialElementNeeded; + + while( today <= endIdx ) + { + highest = inReal[trailingIdx++]; + for( i=trailingIdx; i <= today; i++ ) + { + tmp = inReal[i]; + if( tmp > highest ) highest = tmp; + } + + outReal[outIdx++] = highest; + today++; + } + + /* Keep the outBegIdx relative to the + * caller input before returning. + */ + *outBegIdx = startIdx; + *outNbElement = outIdx; + + return TA_SUCCESS; +} + +static ErrorNumber testCompareToReference( const TA_Real *input, int nbElement ) +{ + TA_Integer outBegIdx, outNbElement; + TA_RetCode retCode; + + TA_Integer outBegIdxRef, outNbElementRef; + TA_RetCode retCodeRef; + + int period, startIdx, endIdx, testNb; + + ErrorNumber errNb; + + outBegIdxRef = outNbElementRef = -1; + + /* Do a systematic tests, even for failure cases. */ + for( testNb=0; testNb <= 1; testNb++ ) /* 0=TA_MIN, 1=TA_MAX */ + { + for( period=2; period <= nbElement; period++ ) + { + for( startIdx=0; startIdx < nbElement; startIdx++ ) + { + for( endIdx=0; (endIdx < nbElement) && (startIdx <= endIdx); endIdx++ ) + { + /* Set to NAN all the elements of the gBuffers. + * Note: These buffer are used as an attempt to detect + * out-of-bound writing in the output. + */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, input, nbElement ); + + /* Get the reference output. */ + if( testNb == 0 ) + retCodeRef = referenceMin( startIdx, endIdx, input, period, + &outBegIdxRef, &outNbElementRef, gBuffer[0].out0 ); + else + retCodeRef = referenceMax( startIdx, endIdx, input, period, + &outBegIdxRef, &outNbElementRef, gBuffer[0].out0 ); + + /* Verify that the input was preserved */ + errNb = checkDataSame( gBuffer[0].in, input, nbElement ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Get the TA-Lib implementation output. */ + if( testNb == 0 ) + retCode = TA_MIN( startIdx, endIdx, input, period, + &outBegIdx, &outNbElement, gBuffer[1].out0 ); + else + retCode = TA_MAX( startIdx, endIdx, input, period, + &outBegIdx, &outNbElement, gBuffer[1].out0 ); + + /* Verify that the input was preserved */ + errNb = checkDataSame( gBuffer[0].in, input, nbElement ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The reference and TA-LIB should have the same output. */ + if( retCode != retCodeRef ) + { + printf( "Failure: retCode != retCodeRef\n" ); + return TA_REGTEST_OPTIMIZATION_REF_ERROR; + } + + if( outBegIdx != outBegIdxRef ) + { + printf( "Failure: outBegIdx != outBegIdxRef\n" ); + return TA_REGTEST_OPTIMIZATION_REF_ERROR; + } + + if( outNbElement != outNbElementRef ) + { + printf( "Failure: outNbElement != outNbElementRef\n" ); + return TA_REGTEST_OPTIMIZATION_REF_ERROR; + } + + /* checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].out0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + + if( retCode == TA_SUCCESS ) + { + /* Make another test using the same input/output buffer. + * The output should still be the same. + */ + if( testNb == 0 ) + retCode = TA_MIN( startIdx, endIdx, gBuffer[0].in, period, + &outBegIdx, &outNbElement, gBuffer[0].in ); + else + retCode = TA_MAX( startIdx, endIdx, gBuffer[0].in, period, + &outBegIdx, &outNbElement, gBuffer[0].in ); + + /* The reference and TA-LIB should have the same output. */ + if( retCode != retCodeRef ) + { + printf( "Failure: retCode != retCodeRef (2)\n" ); + return TA_REGTEST_OPTIMIZATION_REF_ERROR; + } + + if( outBegIdx != outBegIdxRef ) + { + printf( "Failure: outBegIdx != outBegIdxRef (2)\n" ); + return TA_REGTEST_OPTIMIZATION_REF_ERROR; + } + + if( outNbElement != outNbElementRef ) + { + printf( "Failure: outNbElement != outNbElementRef (2)\n" ); + return TA_REGTEST_OPTIMIZATION_REF_ERROR; + } + + /* checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + } + } + } + } + + return TA_TEST_PASS; +} diff --git a/src/tools/ta_regtest/ta_test_func/test_mom.c b/src/tools/ta_regtest/ta_test_func/test_mom.c new file mode 100644 index 000000000..d95f1d824 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_mom.c @@ -0,0 +1,553 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Test the momentum functions + * + * The interpretation of the rate of change varies widely depending + * which software and/or books you are refering to. + * + * The following is the table of Rate-Of-Change implemented in TA-LIB: + * MOM = (price - prevPrice) [Momentum] + * ROC = ((price/prevPrice)-1)*100 [Rate of change] + * ROCP = (price-prevPrice)/prevPrice [Rate of change Percentage] + * ROCR = (price/prevPrice) [Rate of change ratio] + * ROCR100 = (price/prevPrice)*100 [Rate of change ratio 100 Scale] + * + * Here are the equivalent function in other software: + * TA-Lib | Tradestation | Metastock + * ================================================= + * MOM | Momentum | ROC (Point) + * ROC | ROC | ROC (Percent) + * ROCP | PercentChange | - + * ROCR | - | - + * ROCR100 | - | MO + * + * The MOM function is the only one who is not normalized, and thus + * should be avoided for comparing different time serie of prices. + * + * ROC and ROCP are centered at zero and can have positive and negative + * value. Here are some equivalence: + * ROC = ROCP/100 + * = ((price-prevPrice)/prevPrice)/100 + * = ((price/prevPrice)-1)*100 + * + * ROCR and ROCR100 are ratio respectively centered at 1 and 100 and are + * always positive values. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_MOM_TEST, +TA_ROC_TEST, +TA_ROCP_TEST, +TA_ROCR_TEST, +TA_ROCR100_TEST } TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + TA_TestId theFunction; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInTimePeriod; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /**********************/ + /* MOM TEST */ + /**********************/ + +#ifndef TA_FUNC_NO_RANGE_CHECK + /* Test out of range. */ + { 0, TA_MOM_TEST, -1, 3, 14, TA_OUT_OF_RANGE_START_INDEX, 0, 0, 0, 0}, + { 0, TA_MOM_TEST, 3, -1, 14, TA_OUT_OF_RANGE_END_INDEX, 0, 0, 0, 0}, + { 0, TA_MOM_TEST, 4, 3, 14, TA_OUT_OF_RANGE_END_INDEX, 0, 0, 0, 0}, +#endif + + { 1, TA_MOM_TEST, 0, 251, 14, TA_SUCCESS, 0, -0.50, 14, 252-14 }, /* First Value */ + { 0, TA_MOM_TEST, 0, 251, 14, TA_SUCCESS, 1, -2.00, 14, 252-14 }, + { 0, TA_MOM_TEST, 0, 251, 14, TA_SUCCESS, 2, -5.22, 14, 252-14 }, + { 0, TA_MOM_TEST, 0, 251, 14, TA_SUCCESS, 252-15, -1.13, 14, 252-14 }, /* Last Value */ + + /* No output value. */ + { 0, TA_MOM_TEST, 1, 1, 14, TA_SUCCESS, 0, 0, 0, 0}, + + /* One value tests. */ + { 0, TA_MOM_TEST, 14, 14, 14, TA_SUCCESS, 0, -0.50, 14, 1}, + + /* Index too low test. */ + { 0, TA_MOM_TEST, 0, 15, 14, TA_SUCCESS, 0, -0.50, 14, 2}, + { 0, TA_MOM_TEST, 1, 15, 14, TA_SUCCESS, 0, -0.50, 14, 2}, + { 0, TA_MOM_TEST, 2, 16, 14, TA_SUCCESS, 0, -0.50, 14, 3}, + { 0, TA_MOM_TEST, 2, 16, 14, TA_SUCCESS, 1, -2.00, 14, 3}, + { 0, TA_MOM_TEST, 2, 16, 14, TA_SUCCESS, 2, -5.22, 14, 3}, + { 0, TA_MOM_TEST, 0, 14, 14, TA_SUCCESS, 0, -0.50, 14, 1}, + { 0, TA_MOM_TEST, 0, 13, 14, TA_SUCCESS, 0, -0.50, 14, 0}, + + /* Middle of data test. */ + { 0, TA_MOM_TEST, 20, 21, 14, TA_SUCCESS, 0, -4.15, 20, 2 }, + { 0, TA_MOM_TEST, 20, 21, 14, TA_SUCCESS, 1, -5.12, 20, 2 }, + + /**********************/ + /* ROC TEST */ + /**********************/ + { 1, TA_ROC_TEST, 0, 251, 14, TA_SUCCESS, 0, -0.546, 14, 252-14 }, /* First Value */ + { 0, TA_ROC_TEST, 0, 251, 14, TA_SUCCESS, 1, -2.109, 14, 252-14 }, + { 0, TA_ROC_TEST, 0, 251, 14, TA_SUCCESS, 2, -5.53, 14, 252-14 }, + { 0, TA_ROC_TEST, 0, 251, 14, TA_SUCCESS, 252-15, -1.0367, 14, 252-14 }, /* Last Value */ + + /* No output value. */ + { 0, TA_ROC_TEST, 1, 1, 14, TA_SUCCESS, 0, 0, 0, 0}, + + /* One value tests. */ + { 0, TA_ROC_TEST, 14, 14, 14, TA_SUCCESS, 0, -0.546, 14, 1}, + + /* Index too low test. */ + { 0, TA_ROC_TEST, 0, 15, 14, TA_SUCCESS, 0, -0.546, 14, 2}, + { 0, TA_ROC_TEST, 1, 15, 14, TA_SUCCESS, 0, -0.546, 14, 2}, + { 0, TA_ROC_TEST, 2, 16, 14, TA_SUCCESS, 0, -0.546, 14, 3}, + { 0, TA_ROC_TEST, 2, 16, 14, TA_SUCCESS, 1, -2.109, 14, 3}, + { 0, TA_ROC_TEST, 2, 16, 14, TA_SUCCESS, 2, -5.53, 14, 3}, + { 0, TA_ROC_TEST, 0, 14, 14, TA_SUCCESS, 0, -0.546, 14, 1}, + { 0, TA_ROC_TEST, 0, 13, 14, TA_SUCCESS, 0, -0.546, 14, 0}, + + /* Middle of data test. */ + { 0, TA_ROC_TEST, 20, 21, 14, TA_SUCCESS, 0, -4.49, 20, 2 }, + { 0, TA_ROC_TEST, 20, 21, 14, TA_SUCCESS, 1, -5.5256, 20, 2 }, + + + /**********************/ + /* ROCR TEST */ + /**********************/ + { 1, TA_ROCR_TEST, 0, 251, 14, TA_SUCCESS, 0, 0.994536, 14, 252-14 }, /* First Value */ + { 0, TA_ROCR_TEST, 0, 251, 14, TA_SUCCESS, 1, 0.978906, 14, 252-14 }, + { 0, TA_ROCR_TEST, 0, 251, 14, TA_SUCCESS, 2, 0.944689, 14, 252-14 }, + { 0, TA_ROCR_TEST, 0, 251, 14, TA_SUCCESS, 252-15, 0.989633, 14, 252-14 }, /* Last Value */ + + /* No output value. */ + { 0, TA_ROCR_TEST, 1, 1, 14, TA_SUCCESS, 0, 0, 0, 0}, + + /* One value tests. */ + { 0, TA_ROCR_TEST, 14, 14, 14, TA_SUCCESS, 0, 0.994536, 14, 1}, + + /* Index too low test. */ + { 0, TA_ROCR_TEST, 0, 15, 14, TA_SUCCESS, 0, 0.994536, 14, 2}, + { 0, TA_ROCR_TEST, 1, 15, 14, TA_SUCCESS, 0, 0.994536, 14, 2}, + { 0, TA_ROCR_TEST, 2, 16, 14, TA_SUCCESS, 0, 0.994536, 14, 3}, + { 0, TA_ROCR_TEST, 2, 16, 14, TA_SUCCESS, 1, 0.978906, 14, 3}, + { 0, TA_ROCR_TEST, 2, 16, 14, TA_SUCCESS, 2, 0.944689, 14, 3}, + { 0, TA_ROCR_TEST, 0, 14, 14, TA_SUCCESS, 0, 0.994536, 14, 1}, + { 0, TA_ROCR_TEST, 0, 13, 14, TA_SUCCESS, 0, 0.994536, 14, 0}, + + /* Middle of data test. */ + { 0, TA_ROCR_TEST, 20, 21, 14, TA_SUCCESS, 0, 0.955096, 20, 2 }, + { 0, TA_ROCR_TEST, 20, 21, 14, TA_SUCCESS, 1, 0.944744, 20, 2 }, + + /**********************/ + /* ROCR100 TEST */ + /**********************/ + { 1, TA_ROCR100_TEST, 0, 251, 14, TA_SUCCESS, 0, 99.4536, 14, 252-14 }, /* First Value */ + { 0, TA_ROCR100_TEST, 0, 251, 14, TA_SUCCESS, 1, 97.8906, 14, 252-14 }, + { 0, TA_ROCR100_TEST, 0, 251, 14, TA_SUCCESS, 2, 94.4689, 14, 252-14 }, + { 0, TA_ROCR100_TEST, 0, 251, 14, TA_SUCCESS, 252-15, 98.9633, 14, 252-14 }, /* Last Value */ + + /* No output value. */ + { 0, TA_ROCR100_TEST, 1, 1, 14, TA_SUCCESS, 0, 0, 0, 0}, + + /* One value tests. */ + { 0, TA_ROCR100_TEST, 14, 14, 14, TA_SUCCESS, 0, 99.4536, 14, 1}, + + /* Index too low test. */ + { 0, TA_ROCR100_TEST, 0, 15, 14, TA_SUCCESS, 0, 99.4536, 14, 2}, + { 0, TA_ROCR100_TEST, 1, 15, 14, TA_SUCCESS, 0, 99.4536, 14, 2}, + { 0, TA_ROCR100_TEST, 2, 16, 14, TA_SUCCESS, 0, 99.4536, 14, 3}, + { 0, TA_ROCR100_TEST, 2, 16, 14, TA_SUCCESS, 1, 97.8906, 14, 3}, + { 0, TA_ROCR100_TEST, 2, 16, 14, TA_SUCCESS, 2, 94.4689, 14, 3}, + { 0, TA_ROCR100_TEST, 0, 14, 14, TA_SUCCESS, 0, 99.4536, 14, 1}, + { 0, TA_ROCR100_TEST, 0, 13, 14, TA_SUCCESS, 0, 99.4536, 14, 0}, + + /* Middle of data test. */ + { 0, TA_ROCR100_TEST, 20, 21, 14, TA_SUCCESS, 0, 95.5096, 20, 2 }, + { 0, TA_ROCR100_TEST, 20, 21, 14, TA_SUCCESS, 1, 94.4744, 20, 2 } + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_mom_roc( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", __FILE__, + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", __FILE__, + i, retValue ); + return retValue; + } + } + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + switch( testParam->test->theFunction ) + { + case TA_MOM_TEST: + retCode = TA_MOM( + startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_MOM_Lookback(testParam->test->optInTimePeriod ); + break; + case TA_ROC_TEST: + retCode = TA_ROC( + startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_ROC_Lookback(testParam->test->optInTimePeriod ); + break; + case TA_ROCR_TEST: + retCode = TA_ROCR( + startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_ROCR_Lookback(testParam->test->optInTimePeriod ); + break; + case TA_ROCR100_TEST: + retCode = TA_ROCR100( + startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_ROCR100_Lookback(testParam->test->optInTimePeriod ); + break; + case TA_ROCP_TEST: + retCode = TA_ROCP( + startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_ROCP_Lookback(testParam->test->optInTimePeriod ); + break; + default: + retCode = TA_INTERNAL_ERROR(130); + } + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + + CLEAR_EXPECTED_VALUE(0); + + /* Make a simple first call. */ + switch( test->theFunction ) + { + case TA_MOM_TEST: + retCode = TA_MOM( + test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TA_ROC_TEST: + retCode = TA_ROC( + test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + case TA_ROCR_TEST: + retCode = TA_ROCR( + test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + case TA_ROCR100_TEST: + retCode = TA_ROCR100( + test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TA_ROCP_TEST: + retCode = TA_ROCP( + test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + default: + retCode = TA_BAD_PARAM; + } + + errNb = checkDataSame( gBuffer[0].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + CLEAR_EXPECTED_VALUE(0); + switch( test->theFunction ) + { + case TA_MOM_TEST: + retCode = TA_MOM( + test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_ROC_TEST: + retCode = TA_ROC( + test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_ROCR_TEST: + retCode = TA_ROCR( + test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_ROCR100_TEST: + retCode = TA_ROCR100( + test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_ROCP_TEST: + retCode = TA_ROCP( + test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + } + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + errNb = doRangeTest( + rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_per_ema.c b/src/tools/ta_regtest/ta_test_func/test_per_ema.c new file mode 100644 index 000000000..b3399e506 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_per_ema.c @@ -0,0 +1,306 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Test functions that have one output and takes a period and + * basically use only an EMA in its algorithm. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_TRIX_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + + TA_Integer unstablePeriod; + + TA_Integer startIdx; + TA_Integer endIdx; + TA_Integer optInTimePeriod; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex; + TA_Real oneOfTheExpectedOutReal; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test_per_ema( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /****************/ + /* TRIX TEST */ + /****************/ + { 0, TA_TRIX_TEST, 0, 0, 251, 5, TA_SUCCESS, 0, 0.2589, 13, 252-13 }, /* First Value */ + { 0, TA_TRIX_TEST, 0, 0, 251, 5, TA_SUCCESS, 1, 0.010495, 13, 252-13 }, + { 0, TA_TRIX_TEST, 0, 0, 251, 5, TA_SUCCESS, 252-15, -0.058, 13, 252-13 }, + { 0, TA_TRIX_TEST, 0, 0, 251, 5, TA_SUCCESS, 252-14, -0.095, 13, 252-13 }, /* Last Value */ + +#if 0 + /* Metastock values. */ + { 0, TA_TRIX_TEST, 0, 0, 251, 5, TA_SUCCESS, 0, 0.221, 13, 252-13 }, /* First Value */ + { 0, TA_TRIX_TEST, 0, 0, 251, 5, TA_SUCCESS, 1, -0.009, 13, 252-13 }, + { 0, TA_TRIX_TEST, 0, 0, 251, 5, TA_SUCCESS, 252-15, -0.058, 13, 252-13 }, + { 0, TA_TRIX_TEST, 0, 0, 251, 5, TA_SUCCESS, 252-14, -0.095, 13, 252-13 }, /* Last Value */ +#endif + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_per_ema( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "TA_MA Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test_per_ema( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "TA_MA Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + switch( testParam->test->theFunction ) + { + case TA_TRIX_TEST: + retCode = TA_TRIX( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_TRIX_Lookback( testParam->test->optInTimePeriod ); + default: + retCode = TA_INTERNAL_ERROR(131); + } + + return retCode; +} + +static ErrorNumber do_test_per_ema( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + + /* Set the unstable period requested for that test. */ + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_EMA, test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + /* Make a simple first call. */ + switch( test->theFunction ) + { + case TA_TRIX_TEST: + retCode = TA_TRIX( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + + } + + errNb = checkDataSame( gBuffer[0].in, history->close,history->nbBars ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkExpectedValue( gBuffer[0].out0, + retCode, test->expectedRetCode, + outBegIdx, test->expectedBegIdx, + outNbElement, test->expectedNbElement, + test->oneOfTheExpectedOutReal, + test->oneOfTheExpectedOutRealIndex ); + if( errNb != TA_TEST_PASS ) + return errNb; + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_TRIX_TEST: + retCode = TA_TRIX( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + } + + /* The previous call to TA_MA should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkExpectedValue( gBuffer[1].in, + retCode, test->expectedRetCode, + outBegIdx, test->expectedBegIdx, + outNbElement, test->expectedNbElement, + test->oneOfTheExpectedOutReal, + test->oneOfTheExpectedOutRealIndex ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_EMA, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_per_hl.c b/src/tools/ta_regtest/ta_test_func/test_per_hl.c new file mode 100644 index 000000000..ce3adf0aa --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_per_hl.c @@ -0,0 +1,640 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 020203 MF First version. + * 122506 MF Add TA_BETA tests. + */ + +/* Description: + * + * Test functions which have the following characterisic: + * - two inputs are needed (high and low are used here). + * - has zero or one parameter being a period. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" +#include "ta_memory.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_AROON_UP_TEST, +TA_AROON_DOWN_TEST, +TA_AROONOSC_TEST, +TA_CORREL_TEST, +TA_BETA_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + + TA_Integer startIdx; + TA_Integer endIdx; + TA_Integer optInTimePeriod; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *high; + const TA_Real *low; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /*****************/ + /* BETA TEST */ + /*****************/ + + /* Uncomment following to enable tons of tests. Replace 999.99 with the first + * value you are expecting. + */ + + { 1, TA_BETA_TEST, 0, 251, 5, TA_SUCCESS, 0, 0.62907, 5, 252-5 }, + { 0, TA_BETA_TEST, 0, 251, 5, TA_SUCCESS, 1, 0.83604, 5, 252-5 }, + + /*****************/ + /* CORREL TEST */ + /*****************/ + { 1, TA_CORREL_TEST, 0, 251, 20, TA_SUCCESS, 0, 0.9401569, 19, 252-19 }, /* First Value */ + { 0, TA_CORREL_TEST, 0, 251, 20, TA_SUCCESS, 1, 0.9471812, 19, 252-19 }, + { 0, TA_CORREL_TEST, 0, 251, 20, TA_SUCCESS, 252-20, 0.8866901, 19, 252-19 }, /* Last Value */ + + + /*******************/ + /* AROON UP TEST */ + /*******************/ + { 1, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 0, 78.571, 14, 252-14 }, /* First Value */ + { 0, TA_AROON_UP_TEST, 0, 251, 14, TA_SUCCESS, 1, 71.429, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 2, 64.2857, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 3, 57.143, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 0, 251, 14, TA_SUCCESS, 4, 50.000, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 5, 42.857, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 6, 35.714, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 7, 28.571, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 8, 21.429, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 0, 251, 14, TA_SUCCESS, 9, 14.286, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 10, 7.1429, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 11, 0.0000, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 12, 0.0000, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 13, 21.429, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 14, 14.286, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 15, 7.1429, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 16, 0.0000, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 17, 14.286, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 20, 0.00, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 21, 92.857, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 27, 50.000, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 28, 42.857, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 13, 251, 14, TA_SUCCESS, 29,100.000, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 1, 251, 14, TA_SUCCESS, 252-16, 0.0, 14, 252-14 }, + { 0, TA_AROON_UP_TEST, 0, 251, 14, TA_SUCCESS, 252-15, 7.1429, 14, 252-14 }, /* Last Value */ + + /*******************/ + /* AROON DOWN TEST */ + /*******************/ + { 1, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 0, 100.0, 14, 252-14 }, /* First Value */ + { 0, TA_AROON_DOWN_TEST, 0, 251, 14, TA_SUCCESS, 1, 92.857, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 2, 85.714, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 3, 78.571, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 0, 251, 14, TA_SUCCESS, 4, 71.429, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 5, 64.286, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 6, 57.143, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 7,100.000, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 8,100.000, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 0, 251, 14, TA_SUCCESS, 9,100.000, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 10,100.000, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 11,100.000, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 12, 92.857, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 13, 85.714, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 14, 78.571, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 15, 71.429, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 16, 64.286, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 17, 57.143, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 18, 50.000, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 19, 42.857, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 20, 35.714, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 0, 251, 14, TA_SUCCESS, 21, 28.571, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 0, 251, 14, TA_SUCCESS, 22, 21.429, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 0, 251, 14, TA_SUCCESS, 23, 14.286, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 24, 7.1429, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 25, 0.0, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 26, 0.0, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 27, 92.857, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 13, 251, 14, TA_SUCCESS, 28, 85.714, 14, 252-14 }, + + { 0, TA_AROON_DOWN_TEST, 4, 251, 14, TA_SUCCESS, 252-16, 28.571, 14, 252-14 }, + { 0, TA_AROON_DOWN_TEST, 0, 251, 14, TA_SUCCESS, 252-15, 21.429, 14, 252-14 }, /* Last Value */ + + /******************/ + /* AROON OSC TEST */ + /******************/ + { 0, TA_AROONOSC_TEST, 13, 251, 14, TA_SUCCESS, 0, -21.4285, 14, 252-14 }, /* First Value */ + { 0, TA_AROONOSC_TEST, 13, 251, 14, TA_SUCCESS, 6, -21.4285, 14, 252-14 }, + { 0, TA_AROONOSC_TEST, 13, 251, 14, TA_SUCCESS, 7, -71.4285, 14, 252-14 }, + { 0, TA_AROONOSC_TEST, 0, 251, 14, TA_SUCCESS, 252-16, -28.5714, 14, 252-14 }, + { 0, TA_AROONOSC_TEST, 0, 251, 14, TA_SUCCESS, 252-15, -14.28571, 14, 252-14 }, /* Last Value */ + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_per_hl( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + double *dummyBuffer; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + /* Allocate a buffer for the output who is going + * to be ignored (make it slightly larger to play + * safe) + */ + dummyBuffer = TA_Malloc( sizeof(double) * (endIdx-startIdx+100) ); + switch( testParam->test->theFunction ) + { + case TA_AROON_UP_TEST: + retCode = TA_AROON( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + &dummyBuffer[20], + outputBuffer ); + + *lookback = TA_AROON_Lookback( testParam->test->optInTimePeriod ); + break; + case TA_AROON_DOWN_TEST: + retCode = TA_AROON( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer, + &dummyBuffer[20] + ); + *lookback = TA_AROON_Lookback( testParam->test->optInTimePeriod ); + break; + case TA_AROONOSC_TEST: + retCode = TA_AROONOSC( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_AROONOSC_Lookback( testParam->test->optInTimePeriod ); + break; + case TA_CORREL_TEST: + retCode = TA_CORREL( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_CORREL_Lookback( testParam->test->optInTimePeriod ); + break; + + case TA_BETA_TEST: + retCode = TA_BETA( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->test->optInTimePeriod, /* time period */ + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_BETA_Lookback(testParam->test->optInTimePeriod); + break; + + default: + retCode = TA_INTERNAL_ERROR(132); + } + + TA_Free( dummyBuffer ); + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->high, history->nbBars ); + setInputBuffer( 1, history->low, history->nbBars ); + + /* Make a simple first call. */ + switch( test->theFunction ) + { + case TA_AROON_UP_TEST: + retCode = TA_AROON( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].out0, + gBuffer[0].out0 + ); + break; + + case TA_AROON_DOWN_TEST: + retCode = TA_AROON( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0, + gBuffer[1].out0 + ); + break; + + case TA_AROONOSC_TEST: + retCode = TA_AROONOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 + ); + break; + + case TA_CORREL_TEST: + retCode = TA_CORREL( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 + ); + break; + + case TA_BETA_TEST: + retCode = TA_BETA( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 + ); + break; + + default: + retCode = TA_INTERNAL_ERROR(133); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where one of the input and one of the output + * are the same buffer. + */ + switch( test->theFunction ) + { + case TA_AROON_UP_TEST: + retCode = TA_AROON( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].out1, + gBuffer[0].in + ); + break; + + case TA_AROON_DOWN_TEST: + retCode = TA_AROON( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].in, + gBuffer[1].out1 + ); + break; + + case TA_AROONOSC_TEST: + retCode = TA_AROONOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].in + ); + break; + + case TA_CORREL_TEST: + retCode = TA_CORREL( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].in + ); + break; + + case TA_BETA_TEST: + retCode = TA_BETA( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].in + ); + break; + + default: + retCode = TA_INTERNAL_ERROR(134); + } + + /* Check that the other input was preserved. */ + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkSameContent( gBuffer[1].out1, gBuffer[1].out0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + setInputBuffer( 0, history->high, history->nbBars ); + setInputBuffer( 1, history->low, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_AROON_UP_TEST: + retCode = TA_AROON( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].out2, + gBuffer[1].in + ); + break; + + case TA_AROON_DOWN_TEST: + retCode = TA_AROON( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in, + gBuffer[1].out2 + ); + break; + + case TA_AROONOSC_TEST: + retCode = TA_AROONOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in + ); + break; + + case TA_CORREL_TEST: + retCode = TA_CORREL( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in + ); + break; + + case TA_BETA_TEST: + retCode = TA_BETA( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in + ); + break; + + default: + retCode = TA_INTERNAL_ERROR(135); + } + + /* Check that the other input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.high = history->high; + testParam.low = history->low; + + if( test->doRangeTestFlag ) + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_per_hlc.c b/src/tools/ta_regtest/ta_test_func/test_per_hlc.c new file mode 100644 index 000000000..0b6166375 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_per_hlc.c @@ -0,0 +1,542 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * 061904 MF Add test to detect cummulative errors in CCI algorithm + * when some values were close to zero (epsilon). + * 021106 MF Add tests for ULTOSC. + * 042206 MF Add tests for NATR + * + */ + +/* Description: + * + * Test functions which have the following + * characterisic: + * - the input is high,low and close. + * + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_CCI_TEST, +TA_WILLR_TEST, +TA_ULTOSC_TEST, +TA_NATR_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInTimePeriod1; + TA_Integer optInTimePeriod2; + TA_Integer optInTimePeriod3; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *high; + const TA_Real *low; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /****************/ + /* NATR TEST */ + /****************/ + /* TODO Analyze further why NATR requires a very large unstable period. + * for now, just disable range testing. + */ + { 0, TA_NATR_TEST, 0, 251, 14, 0, 0, TA_SUCCESS, 0, 3.9321, 14, 252-14 }, + { 0, TA_NATR_TEST, 0, 251, 14, 0, 0, TA_SUCCESS, 1, 3.7576, 14, 252-14 }, + { 0, TA_NATR_TEST, 0, 251, 14, 0, 0, TA_SUCCESS, 252-15, 3.0229, 14, 252-14 }, + + /****************/ + /* ULTOSC TEST */ + /****************/ + { 0, TA_ULTOSC_TEST, 0, 251, 7, 14, 28, TA_SUCCESS, 0, 47.1713, 28, 252-28 }, + { 0, TA_ULTOSC_TEST, 0, 251, 7, 14, 28, TA_SUCCESS, 1, 46.2802, 28, 252-28 }, + { 1, TA_ULTOSC_TEST, 0, 251, 7, 14, 28, TA_SUCCESS, 252-29, 40.0854, 28, 252-28 }, + + + /****************/ + /* WILLR TEST */ + /****************/ + { 0, TA_WILLR_TEST, 13, 251, 14, 0, 0, TA_SUCCESS, 1, -66.9903, 13, 252-13 }, /* First Value */ + { 1, TA_WILLR_TEST, 0, 251, 14, 0, 0, TA_SUCCESS, 0, -90.1943, 13, 252-13 }, + { 0, TA_WILLR_TEST, 0, 251, 14, 0, 0, TA_SUCCESS, 112, 0.0, 13, 252-13 }, + + { 0, TA_WILLR_TEST, 24, 24, 14, 0, 0, TA_SUCCESS, 0, -89.2857, 24, 1 }, + { 0, TA_WILLR_TEST, 25, 25, 14, 0, 0, TA_SUCCESS, 0, -97.2602, 25, 1 }, + { 0, TA_WILLR_TEST, 26, 26, 14, 0, 0, TA_SUCCESS, 0, -71.5482, 26, 1 }, + + { 0, TA_WILLR_TEST, 251, 251, 14, 0, 0, TA_SUCCESS, 0, -59.1515, 251, 1 }, + { 0, TA_WILLR_TEST, 14, 251, 14, 0, 0, TA_SUCCESS, 252-15, -59.1515, 14, 252-14 }, + + /****************/ + /* CCI TEST */ + /****************/ + + /* The following two should always be identical. */ + { 0, TA_CCI_TEST, 186,187, 2, 0, 0, TA_SUCCESS, 1, 0.0, 186, 2 }, + { 0, TA_CCI_TEST, 187,187, 2, 0, 0, TA_SUCCESS, 0, 0.0, 187, 1 }, + + /* Test period 2, 5 and 11 */ + { 0, TA_CCI_TEST, 0, 251, 2, 0, 0, TA_SUCCESS, 0, 66.666, 1, 252-1 }, + { 1, TA_CCI_TEST, 0, 251, 5, 0, 0, TA_SUCCESS, 0, 18.857, 4, 252-4 }, + + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 0, 87.927, 10, 252-10 }, /* First Value */ + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 1, 180.005, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 2, 143.5190963, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 3, -113.8669783, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 4, -111.064497, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 5, -26.77393309, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 6, -70.77933765, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 7, -83.15662884, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 8, -41.14421073, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 9, -49.63059589, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 10, -86.45142995, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 11, -105.6275799, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 12, -157.698269, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 13, -190.5251436, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 14, -142.8364298, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 15, -122.4448056, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 16, -79.95100041, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 17, 22.03829204, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 18, 7.765575065, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 19, 32.38905945, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 20, -0.005587727, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 21, 43.84607294, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 22, 40.35152301, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 23, 92.89237535, 10, 252-10 }, + { 0, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 24, 113.4778681, 10, 252-10 }, + { 1, TA_CCI_TEST, 0, 251, 11, 0, 0, TA_SUCCESS, 252-11, -169.65514, 10, 252-10 }, /* Last Value */ +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_per_hlc( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + switch( testParam->test->theFunction ) + { + case TA_NATR_TEST: + retCode = TA_NATR( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod1, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_NATR_Lookback( testParam->test->optInTimePeriod1 ); + break; + + case TA_CCI_TEST: + retCode = TA_CCI( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod1, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_CCI_Lookback( testParam->test->optInTimePeriod1 ); + break; + case TA_WILLR_TEST: + retCode = TA_WILLR( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod1, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_WILLR_Lookback( testParam->test->optInTimePeriod1 ); + break; + + case TA_ULTOSC_TEST: + retCode = TA_ULTOSC( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod1, + testParam->test->optInTimePeriod2, + testParam->test->optInTimePeriod3, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_ULTOSC_Lookback( testParam->test->optInTimePeriod1, + testParam->test->optInTimePeriod2, + testParam->test->optInTimePeriod3 ); + break; + + default: + retCode = TA_INTERNAL_ERROR(132); + } + + return retCode; +} + +static TA_RetCode do_call( const TA_Test *test, + const double high[], + const double low[], + const double close[], + int *outBegIdx, + int *outNbElement, + double output[] ) +{ + TA_RetCode retCode; + + switch( test->theFunction ) + { + case TA_NATR_TEST: + retCode = TA_NATR( test->startIdx, + test->endIdx, + high, low, close, + test->optInTimePeriod1, + outBegIdx, + outNbElement, + output ); + break; + + case TA_CCI_TEST: + retCode = TA_CCI( test->startIdx, + test->endIdx, + high, low, close, + test->optInTimePeriod1, + outBegIdx, + outNbElement, + output ); + break; + + case TA_WILLR_TEST: + retCode = TA_WILLR( test->startIdx, + test->endIdx, + high, low, close, + test->optInTimePeriod1, + outBegIdx, + outNbElement, + output ); + break; + + case TA_ULTOSC_TEST: + retCode = TA_ULTOSC( test->startIdx, + test->endIdx, + high, low, close, + test->optInTimePeriod1, + test->optInTimePeriod2, + test->optInTimePeriod3, + outBegIdx, + outNbElement, + output ); + break; + + default: + retCode = TA_INTERNAL_ERROR(133); + } + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->high, history->nbBars ); + setInputBuffer( 1, history->low, history->nbBars ); + setInputBuffer( 2, history->close, history->nbBars ); + + /* Make a simple first call. */ + retCode = do_call( test, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = do_call( test, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + setInputBuffer( 0, history->high, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = do_call( test, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + setInputBuffer( 1, history->low, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = do_call( test, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[2].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[2].in, 0 ); + setInputBuffer( 2, history->close, history->nbBars ); + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.high = history->high; + testParam.low = history->low; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + switch( test->theFunction ) + { + case TA_NATR_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NATR, + (void *)&testParam, 1, 0 ); + break; + default: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + break; + } + + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_per_hlcv.c b/src/tools/ta_regtest/ta_test_func/test_per_hlcv.c new file mode 100644 index 000000000..8485e010c --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_per_hlcv.c @@ -0,0 +1,710 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 011103 MF First version. + * 111705 MF Add test for Fix#1359452 (AD Function). + * 110206 AC Change volume and open interest to double + */ + +/* Description: + * + * Test functions which have the following + * characterisic: + * - the inputs are high,low, close and volume. + * - have one output of type real. + * - might have an optional parameter. + * + * + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_MFI_TEST, +TA_AD_TEST, +TA_ADOSC_3_10_TEST, +TA_ADOSC_5_2_TEST, +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + + TA_Integer startIdx; + TA_Integer endIdx; + TA_Integer optInTimePeriod; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *high; + const TA_Real *low; + const TA_Real *close; + const TA_Real *volume; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /*************/ + /* AD TEST */ + /*************/ + /* Note: the period field is ignored. The period is irrelevant */ + { 1, TA_AD_TEST, 0, 251, -1, TA_SUCCESS, 0, -1631000.00, 0, 252 }, /* First Value */ + { 0, TA_AD_TEST, 0, 251, -1, TA_SUCCESS, 1, 2974412.02, 0, 252 }, + { 0, TA_AD_TEST, 0, 251, -1, TA_SUCCESS, 250, 8707691.07, 0, 252 }, + { 0, TA_AD_TEST, 0, 251, -1, TA_SUCCESS, 251, 8328944.54, 0, 252 }, /* Last Value */ + + /****************/ + /* ADOSC TEST */ + /****************/ + /* Note: the period field is ignored. The periods are always 3 and 10 */ + { 1, TA_ADOSC_3_10_TEST, 0, 251, -1, TA_SUCCESS, 0, 841238.32, 9, 243 }, /* First Value */ + { 0, TA_ADOSC_3_10_TEST, 0, 251, -1, TA_SUCCESS, 1, 2255663.07, 9, 243 }, + { 0, TA_ADOSC_3_10_TEST, 0, 251, -1, TA_SUCCESS, 241, -526700.32, 9, 243 }, + { 0, TA_ADOSC_3_10_TEST, 0, 251, -1, TA_SUCCESS, 242, -1139932.729, 9, 243 }, /* Last Value */ + + /* Note: the period field is ignored. The periods are always 2 and 5 */ + { 1, TA_ADOSC_5_2_TEST, 0, 251, -1, TA_SUCCESS, 0, 585361.28, 4, 248 }, /* First Value */ + + /**************/ + /* MFI TEST */ + /**************/ + { 0, TA_MFI_TEST, 0, 251, 14, TA_SUCCESS, 0, 42.8923, 14, 252-14 }, /* First Value */ + { 0, TA_MFI_TEST, 0, 251, 14, TA_SUCCESS, 1, 45.6072, 14, 252-14 }, + { 0, TA_MFI_TEST, 0, 251, 14, TA_SUCCESS, 252-15, 53.1997, 14, 252-14 }, /* Last Value */ + + { 1, TA_MFI_TEST, 0, 251, 49, TA_SUCCESS, 0, 44.7902, 49, 252-49 }, /* First Value */ + { 0, TA_MFI_TEST, 0, 251, 49, TA_SUCCESS, 1, 43.1963, 49, 252-49 }, + { 0, TA_MFI_TEST, 0, 251, 49, TA_SUCCESS, 252-50, 57.4806, 49, 252-49 }, /* Last Value */ + + { 1, TA_MFI_TEST, 0, 251, 50, TA_SUCCESS, 0, 44.2414, 50, 252-50 }, /* First Value */ + { 0, TA_MFI_TEST, 0, 251, 50, TA_SUCCESS, 1, 42.1108, 50, 252-50 }, + { 0, TA_MFI_TEST, 0, 251, 50, TA_SUCCESS, 252-51, 50.5905, 50, 252-50 }, /* Last Value */ + + { 1, TA_MFI_TEST, 0, 251, 51, TA_SUCCESS, 0, 43.1496, 51, 252-51 }, /* First Value */ + { 0, TA_MFI_TEST, 0, 251, 51, TA_SUCCESS, 1, 40.7692, 51, 252-51 }, + { 0, TA_MFI_TEST, 0, 251, 51, TA_SUCCESS, 252-52, 51.7265, 51, 252-51 }, /* Last Value */ + + { 1, TA_MFI_TEST, 0, 251, 100, TA_SUCCESS, 0, 50.0166, 100, 252-100 }, /* First Value */ + { 0, TA_MFI_TEST, 0, 251, 100, TA_SUCCESS, 1, 50.2648, 100, 252-100 }, + { 0, TA_MFI_TEST, 0, 251, 100, TA_SUCCESS, 252-101, 48.4264, 100, 252-100 } /* Last Value */ + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_per_hlcv( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + + for( i=0; i < NB_TEST; i++ ) + { + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + switch( testParam->test->theFunction ) + { + case TA_MFI_TEST: + retCode = TA_MFI( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->volume, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_MFI_Lookback( testParam->test->optInTimePeriod ); + break; + + case TA_AD_TEST: + retCode = TA_AD( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->volume, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_AD_Lookback(); + break; + + case TA_ADOSC_3_10_TEST: + retCode = TA_ADOSC( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->volume, + 3, 10, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_ADOSC_Lookback(3,10); + break; + + case TA_ADOSC_5_2_TEST: + retCode = TA_ADOSC( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->volume, + 5, 2, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_ADOSC_Lookback(5,2); + break; + + default: + retCode = TA_INTERNAL_ERROR(132); + } + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->high, history->nbBars ); + setInputBuffer( 1, history->low, history->nbBars ); + setInputBuffer( 2, history->close, history->nbBars ); + + /* Clear the unstable periods from previous tests. */ + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_MFI, 0 ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + /* Make a simple first call. */ + switch( test->theFunction ) + { + case TA_MFI_TEST: + retCode = TA_MFI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + case TA_AD_TEST: + retCode = TA_AD( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TA_ADOSC_3_10_TEST: + retCode = TA_ADOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + 3, 10, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TA_ADOSC_5_2_TEST: + retCode = TA_ADOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + 5, 2, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + default: + retCode = TA_INTERNAL_ERROR(133); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_MFI_TEST: + retCode = TA_MFI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + break; + case TA_AD_TEST: + retCode = TA_AD( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + break; + case TA_ADOSC_3_10_TEST: + retCode = TA_ADOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + 3, 10, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + break; + case TA_ADOSC_5_2_TEST: + retCode = TA_ADOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + 5, 2, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(134); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + setInputBuffer( 0, history->high, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_MFI_TEST: + retCode = TA_MFI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_AD_TEST: + retCode = TA_AD( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_ADOSC_3_10_TEST: + retCode = TA_ADOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + 3, 10, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_ADOSC_5_2_TEST: + retCode = TA_ADOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + 5, 2, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(135); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call to TA_MA should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + setInputBuffer( 1, history->low, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_MFI_TEST: + retCode = TA_MFI( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + break; + case TA_AD_TEST: + retCode = TA_AD( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + break; + case TA_ADOSC_3_10_TEST: + retCode = TA_ADOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + 3, 10, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + break; + case TA_ADOSC_5_2_TEST: + retCode = TA_ADOSC( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + 5, 2, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(136); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[2].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[2].in, 0 ); + setInputBuffer( 2, history->close, history->nbBars ); + + if( test->doRangeTestFlag ) + { + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.high = history->high; + testParam.low = history->low; + testParam.close = history->close; + testParam.volume = history->volume; + + switch( test->theFunction ) + { + case TA_MFI_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_MFI, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + break; + case TA_AD_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, + TA_DO_NOT_COMPARE ); + if( errNb != TA_TEST_PASS ) + return errNb; + break; + case TA_ADOSC_3_10_TEST: + case TA_ADOSC_5_2_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_EMA, + (void *)&testParam, 1, + TA_DO_NOT_COMPARE ); + if( errNb != TA_TEST_PASS ) + return errNb; + break; + default: + break; + } + } + + /* Check for fix #1359452 - AD RAnge not working as expected. */ + if( test->theFunction == TA_AD_TEST ) + { + gBuffer[0].out0[0] = -1.0; + gBuffer[0].out0[1] = -1.0; + retCode = TA_AD( 0, + 0, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + &outBegIdx, + &outNbElement, + &gBuffer[0].out0[0] ); + if( retCode != TA_SUCCESS ) + { + printf( "Failed AD call for fix #1359452 [%d]\n", retCode ); + return TA_TEST_FAIL_BUG1359452_1; + } + if( gBuffer[0].out0[0] == -1.0 ) + { + printf( "Failed AD call for fix #1359452 out0[0] == -1\n" ); + return TA_TEST_FAIL_BUG1359452_2; + } + + retCode = TA_AD( 1, + 1, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + history->volume, + &outBegIdx, + &outNbElement, + &gBuffer[0].out0[1] ); + if( retCode != TA_SUCCESS ) + { + printf( "Failed AD call for fix #1359452 [%d]\n", retCode ); + return TA_TEST_FAIL_BUG1359452_3; + } + if( gBuffer[0].out0[1] == -1.0 ) + { + printf( "Failed AD call for fix #1359452 out0[1] == -1\n" ); + return TA_TEST_FAIL_BUG1359452_4; + } + + /* The two values are to be different. */ + if( gBuffer[0].out0[1] == gBuffer[0].out0[0] ) + { + printf( "Failed AD logic for fix #1359452\n" ); + return TA_TEST_FAIL_BUG1359452_5; + } + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_per_ohlc.c b/src/tools/ta_regtest/ta_test_func/test_per_ohlc.c new file mode 100644 index 000000000..bacec8ff4 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_per_ohlc.c @@ -0,0 +1,527 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112405 MF First version. + * + */ + +/* Description: + * + * Test functions which have the following + * characterisic: + * - have one output + * - zero or one parameter being a period. + * - the input is open, high, low and close. + * + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_AVGPRICE_TEST, +TA_BOP_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + + TA_Integer startIdx; + TA_Integer endIdx; + TA_Integer optInTimePeriod; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *open; + const TA_Real *high; + const TA_Real *low; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /*******************/ + /* AVGPRICE TEST */ + /*******************/ + { 0, TA_AVGPRICE_TEST, 0, 251, 0, TA_SUCCESS, 0, 92.0, 0, 252 }, + { 1, TA_AVGPRICE_TEST, 0, 251, 0, TA_SUCCESS, 1, 93.17, 0, 252 }, + + /*************/ + /* BOP TEST */ + /*************/ + + /* The following two should always be identical. */ + { 0, TA_BOP_TEST, 0, 251, 0, TA_SUCCESS, 0, -0.40, 0, 252 }, + { 1, TA_BOP_TEST, 0, 251, 0, TA_SUCCESS, 1, 0.94, 0, 252 } + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_per_ohlc( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + switch( testParam->test->theFunction ) + { + case TA_BOP_TEST: + retCode = TA_BOP( startIdx, + endIdx, + testParam->open, + testParam->high, + testParam->low, + testParam->close, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_BOP_Lookback(); + break; + case TA_AVGPRICE_TEST: + retCode = TA_AVGPRICE( startIdx, + endIdx, + testParam->open, + testParam->high, + testParam->low, + testParam->close, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_AVGPRICE_Lookback(); + break; + default: + retCode = TA_INTERNAL_ERROR(171); + } + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->open, history->nbBars ); + setInputBuffer( 1, history->high, history->nbBars ); + setInputBuffer( 2, history->low, history->nbBars ); + setInputBuffer( 3, history->close, history->nbBars ); + + /* Make a simple first call. */ + switch( test->theFunction ) + { + case TA_BOP_TEST: + retCode = TA_BOP( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + case TA_AVGPRICE_TEST: + retCode = TA_AVGPRICE( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + + default: + retCode = TA_INTERNAL_ERROR(172); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->open,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->high, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->low,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[3].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_BOP_TEST: + retCode = TA_BOP( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + break; + case TA_AVGPRICE_TEST: + retCode = TA_AVGPRICE( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(173); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[1].in, history->high, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->low,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[3].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + setInputBuffer( 0, history->open, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_BOP_TEST: + retCode = TA_BOP( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_AVGPRICE_TEST: + retCode = TA_AVGPRICE( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(174); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->open,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->low,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[3].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + setInputBuffer( 1, history->high, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_BOP_TEST: + retCode = TA_BOP( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + break; + case TA_AVGPRICE_TEST: + retCode = TA_AVGPRICE( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[2].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(175); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->open,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->high, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[3].in, history->close, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[2].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[2].in, 0 ); + setInputBuffer( 2, history->low, history->nbBars ); + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_BOP_TEST: + retCode = TA_BOP( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + case TA_AVGPRICE_TEST: + retCode = TA_AVGPRICE( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + gBuffer[3].in, + &outBegIdx, + &outNbElement, + gBuffer[3].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(176); + } + + /* Check that the input were preserved. */ + errNb = checkDataSame( gBuffer[0].in, history->open,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->high, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[3].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[3].in, 0 ); + setInputBuffer( 3, history->close, history->nbBars ); + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.open = history->open; + testParam.high = history->high; + testParam.low = history->low; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_po.c b/src/tools/ta_regtest/ta_test_func/test_po.c new file mode 100644 index 000000000..7fee88736 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_po.c @@ -0,0 +1,440 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AA Andrew Atkinson + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * 020605 MF Add regression test with inverted slow/fast period. + * 020805 AA Fix one of the TA_PPO call (wrong buffer was pass). + */ + +/* Description: + * Regression test of APO(Absolute Price Oscillator). + * Regression test of PPO (Percentage Price Oscillator). + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_Integer doPercentage; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInFastPeriod; /* From 1 to 200 */ + TA_Integer optInSlowPeriod; /* From 1 to 200 */ + TA_Integer optInMethod_2; + TA_Integer compatibility; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex; + TA_Real oneOfTheExpectedOutReal; + + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ +static TA_Test tableTest[] = +{ + /**********************************/ + /* APO TEST - SIMPLE - CLASSIC */ + /**********************************/ + { 1, 0, 0, 251, 26, 12, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, -3.3124, 25, 252-25 }, /* First Value */ + { 1, 0, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, -3.3124, 25, 252-25 }, /* First Value */ + { 0, 0, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, -3.5876, 25, 252-25 }, + { 0, 0, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-26, -0.1667, 25, 252-25 }, /* Last Value */ + + { 0, 0, 0, 1, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 0, 1, 1, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 0, 25, 25, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, -3.3124, 25, 1 }, /* First/Last Value */ + { 0, 0, 250, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, -0.1667, 250, 2 }, /* Last Value */ + + /************************************/ + /* APO TEST - SIMPLE - METASTOCK */ + /************************************/ + { 0, 0, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -3.3124, 25, 252-25 }, /* First Value */ + { 0, 0, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, -3.5876, 25, 252-25 }, + { 0, 0, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-26, -0.1667, 25, 252-25 }, /* Last Value */ + + { 0, 0, 0, 1, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 0, 1, 1, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 0, 25, 25, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -3.3124, 25, 1 }, /* First/Last Value */ + { 0, 0, 250, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, -0.1667, 250, 2 }, /* Last Value */ + + + /***************************************/ + /* APO TEST - EXPONENTIAL - CLASSIC */ + /***************************************/ + /* !!! To be done. */ + + /*****************************************/ + /* APO TEST - EXPONENTIAL - METASTOCK */ + /*****************************************/ + { 1, 0, 0, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -2.4193, 25, 252-25 }, /* First Value */ + { 0, 0, 0, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, -2.4367, 25, 252-25 }, + { 0, 0, 0, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-26, 0.90401, 25, 252-25 }, /* Last Value */ + + { 0, 0, 0, 1, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 0, 1, 1, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 0, 25, 25, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -2.4193, 25, 1 }, + { 0, 0, 250, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 0.90401, 250, 2 }, /* Last Value */ + + { 0, 0, 251, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0.90401, 251, 1 }, /* Last Value */ + { 0, 0, 25, 25, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -2.4193, 25, 1 }, /* Just enough to calculate first. */ + { 0, 0, 26, 26, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -2.4367, 26, 1 }, /* Just enough to calculate second. */ + + /**********************************/ + /* PPO TEST - SIMPLE - CLASSIC */ + /**********************************/ + { 1, 1, 0, 251, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 1.10264, 2, 252-2 }, /* First Value */ + { 0, 1, 0, 251, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, -0.02813, 2, 252-2 }, + { 0, 1, 0, 251, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 249, -0.21191, 2, 252-2 }, /* Last Value */ + + { 0, 1, 0, 1, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 1, 1, 1, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 1, 2, 2, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 1.10264, 2, 1 }, /* First/Last Value */ + { 0, 1, 250, 251, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, -0.21191, 250, 2 }, /* Last Value */ + + /************************************/ + /* PPO TEST - SIMPLE - METASTOCK */ + /************************************/ + { 0, 1, 0, 251, 3, 2, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 1.10264, 2, 252-2 }, /* First Value */ + { 0, 1, 0, 251, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, -0.02813, 2, 252-2 }, + { 0, 1, 0, 251, 3, 2, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 249, -0.21191, 2, 252-2 }, /* Last Value */ + + { 0, 1, 0, 1, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 1, 1, 1, 1, 3, 2, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 1, 1, 2, 2, 2, 3, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 1.10264, 2, 1 }, /* First/Last Value */ + { 0, 1, 250, 251, 3, 2, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, -0.21191, 250, 2 }, /* Last Value */ + + { 0, 1, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -3.6393, 25, 252-25 }, /* First Value */ + { 0, 1, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, -3.9534, 25, 252-25 }, + { 0, 1, 0, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-26, -0.15281, 25, 252-25 }, /* Last Value */ + + { 0, 1, 0, 1, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 1, 1, 1, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 1, 25, 25, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -3.6393, 25, 1 }, /* First/Last Value */ + { 0, 1, 250, 251, 12, 26, TA_MAType_SMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, -0.15281, 250, 2 }, /* Last Value */ + + /***************************************/ + /* PPO TEST - EXPONENTIAL - CLASSIC */ + /***************************************/ + /* !!! To be done. */ + + /*****************************************/ + /* PPO TEST - EXPONENTIAL - METASTOCK */ + /*****************************************/ + { 1, 1, 0, 251, 26, 12, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -2.7083, 25, 252-25 }, /* First Value */ + { 0, 1, 0, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, -2.7390, 25, 252-25 }, + { 0, 1, 0, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-26, 0.83644, 25, 252-25 }, /* Last Value */ + + { 0, 1, 0, 1, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 1, 1, 1, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0 }, /* Out of range value */ + { 0, 1, 25, 25, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -2.7083, 25, 1 }, + { 0, 1, 250, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 0.83644, 250, 2 }, /* Last Value */ + + { 0, 1, 251, 251, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0.83644, 251, 1 }, /* Last Value */ + { 0, 1, 25, 25, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -2.7083, 25, 1 }, /* Just enough to calculate first. */ + { 0, 1, 26, 26, 12, 26, TA_MAType_EMA, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -2.7390, 26, 1 }, /* Just enough to calculate second. */ +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_po( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + for( i=0; i < NB_TEST; i++ ) + { + + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "TA_APO/TA_PPO Failed Bad Parameter for Test #%d (%d,%d)\n", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "TA_APO/TA_PPO Failed Test #%d (Code=%d)\n", i, retValue ); + return retValue; + } + } + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + if( testParam->test->doPercentage ) + { + retCode = TA_PPO( startIdx, + endIdx, + testParam->close, + testParam->test->optInFastPeriod, + testParam->test->optInSlowPeriod, + (TA_MAType)testParam->test->optInMethod_2, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_PPO_Lookback( testParam->test->optInFastPeriod, + testParam->test->optInSlowPeriod, + (TA_MAType)testParam->test->optInMethod_2 ); + } + else + { + retCode = TA_APO( startIdx, + endIdx, + testParam->close, + testParam->test->optInFastPeriod, + testParam->test->optInSlowPeriod, + (TA_MAType)testParam->test->optInMethod_2, + outBegIdx, + outNbElement, + outputBuffer ); + + + *lookback = TA_APO_Lookback( testParam->test->optInFastPeriod, + testParam->test->optInSlowPeriod, + (TA_MAType)testParam->test->optInMethod_2 ); + } + + return retCode; +} + + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + TA_SetCompatibility( (TA_Compatibility)test->compatibility ); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + + TA_SetUnstablePeriod( TA_FUNC_UNST_EMA, 0 ); + + /* Make a simple first call. */ + if( test->doPercentage ) + { + retCode = TA_PPO( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInFastPeriod, + test->optInSlowPeriod, + (TA_MAType)test->optInMethod_2, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + } + else + { + retCode = TA_APO( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInFastPeriod, + test->optInSlowPeriod, + (TA_MAType)test->optInMethod_2, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + } + + errNb = checkDataSame( gBuffer[0].in, history->close, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkExpectedValue( gBuffer[0].out0, + retCode, test->expectedRetCode, + outBegIdx, test->expectedBegIdx, + outNbElement, test->expectedNbElement, + test->oneOfTheExpectedOutReal, + test->oneOfTheExpectedOutRealIndex ); + if( errNb != TA_TEST_PASS ) + return errNb; + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + if( test->doPercentage ) + { + retCode = TA_PPO( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInFastPeriod, + test->optInSlowPeriod, + (TA_MAType)test->optInMethod_2, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + } + else + { + retCode = TA_APO( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInFastPeriod, + test->optInSlowPeriod, + (TA_MAType)test->optInMethod_2, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + } + + /* The previous call should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkExpectedValue( gBuffer[1].in, + retCode, test->expectedRetCode, + outBegIdx, test->expectedBegIdx, + outNbElement, test->expectedNbElement, + test->oneOfTheExpectedOutReal, + test->oneOfTheExpectedOutRealIndex ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + + if( test->optInMethod_2 == TA_MAType_EMA ) + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_EMA, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + else + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_rsi.c b/src/tools/ta_regtest/ta_test_func/test_rsi.c new file mode 100644 index 000000000..4aabadd55 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_rsi.c @@ -0,0 +1,507 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * 112605 MF Add CMO test. + */ + +/* Description: + * Test RSI/CMO function. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum { +TA_RSI_TEST, +TA_CMO_TEST +} TA_TestId; + +typedef struct +{ + TA_Integer doRangeTestFlag; + + TA_TestId theFunction; + + TA_Integer unstablePeriod; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInTimePeriod; + TA_Integer compatibility; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /**********************/ + /* RSI TEST */ + /**********************/ + { 1, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 49.14, 14, 252-14 }, /* First Value */ + { 0, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 52.32, 14, 252-14 }, + { 0, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 2, 46.07, 14, 252-14 }, + { 0, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-15, 49.63, 14, 252-14 }, /* Last Value */ + + /* No output value. */ + { 0, TA_RSI_TEST, 0, 1, 1, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 0, 0, 0}, + + /* One value tests. */ + { 0, TA_RSI_TEST, 0, 14, 14, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 49.14, 14, 1}, + + /* Index too low test. */ + { 0, TA_RSI_TEST, 0, 0, 15, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 49.14, 14, 2}, + { 0, TA_RSI_TEST, 0, 1, 15, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 49.14, 14, 2}, + { 0, TA_RSI_TEST, 0, 2, 16, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 49.14, 14, 3}, + { 0, TA_RSI_TEST, 0, 2, 16, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 52.32, 14, 3}, + { 0, TA_RSI_TEST, 0, 2, 16, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 2, 46.07, 14, 3}, + { 0, TA_RSI_TEST, 0, 0, 14, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 49.14, 14, 1}, + { 0, TA_RSI_TEST, 0, 0, 13, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 49.14, 14, 0}, + + /* Test with 1 unstable price bar. Test for period 1, 2, 14 */ + { 0, TA_RSI_TEST, 1, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 52.32, 15, 252-(14+1) }, + { 0, TA_RSI_TEST, 1, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 1, 46.07, 15, 252-(14+1) }, + { 0, TA_RSI_TEST, 1, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-(15+1), 49.63, 15, 252-(14+1) }, /* Last Value */ + + /* Test with 2 unstable price bar. Test for period 1, 2, 14 */ + { 0, TA_RSI_TEST, 2, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, 46.07, 16, 252-(14+2) }, + { 0, TA_RSI_TEST, 2, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 252-(15+2), 49.63, 16, 252-(14+2) }, /* Last Value */ + + + /**********************/ + /* RSI Metastock TEST */ + /**********************/ + { 1, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 252-13 }, /* First Value */ + { 0, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 49.14, 13, 252-13 }, + { 0, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 52.32, 13, 252-13 }, + { 0, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 3, 46.07, 13, 252-13 }, + { 0, TA_RSI_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-14, 49.63, 13, 252-13 }, /* Last Value */ + + /* No output value. */ + { 0, TA_RSI_TEST, 0, 1, 1, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 0, 0, 0}, + + /* One value tests. */ + { 0, TA_RSI_TEST, 0, 13, 13, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 1}, + { 0, TA_RSI_TEST, 0, 13, 13, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 1}, + + /* Index too low test. */ + { 0, TA_RSI_TEST, 0, 0, 15, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 3}, + { 0, TA_RSI_TEST, 0, 1, 15, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 3}, + { 0, TA_RSI_TEST, 0, 2, 16, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 4}, + { 0, TA_RSI_TEST, 0, 2, 16, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 49.14, 13, 4}, + { 0, TA_RSI_TEST, 0, 2, 16, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 2, 52.32, 13, 4}, + { 0, TA_RSI_TEST, 0, 0, 14, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 2}, + { 0, TA_RSI_TEST, 0, 0, 13, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 1}, + { 0, TA_RSI_TEST, 0, 0, 12, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 47.11, 13, 0}, + + /* Test with 1 unstable price bar. Test for period 1, 2, 14 */ + { 0, TA_RSI_TEST, 1, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 49.14, 14, 252-(13+1) }, + { 0, TA_RSI_TEST, 1, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 1, 52.32, 14, 252-(13+1) }, + { 0, TA_RSI_TEST, 1, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-(14+1), 49.63, 14, 252-(13+1) }, /* Last Value */ + + /* Test with 2 unstable price bar. Test for period 1, 2, 14 */ + { 0, TA_RSI_TEST, 2, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, 52.32, 15, 252-(13+2) }, + { 0, TA_RSI_TEST, 2, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 252-(14+2), 49.63, 15, 252-(13+2) }, /* Last Value */ + + /**********************/ + /* CMO TEST */ + /**********************/ + { 1, TA_CMO_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_DEFAULT, TA_SUCCESS, 0, -1.70, 14, 252-14 }, + { 1, TA_CMO_TEST, 0, 0, 251, 14, TA_COMPATIBILITY_METASTOCK, TA_SUCCESS, 0, -5.76, 13, 252-13 }, + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_rsi( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", __FILE__, + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", __FILE__, + i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + + switch( testParam->test->theFunction ) + { + case TA_RSI_TEST: + retCode = TA_RSI( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_RSI_Lookback( testParam->test->optInTimePeriod); + break; + case TA_CMO_TEST: + retCode = TA_CMO( startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_CMO_Lookback( testParam->test->optInTimePeriod); + break; + default: + retCode = TA_INTERNAL_ERROR(177); + } + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + const TA_FuncHandle *funcHandle; + const TA_FuncInfo *funcInfo; + TA_ParamHolder *params; + + retCode = TA_SUCCESS; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + TA_SetCompatibility( (TA_Compatibility)test->compatibility ); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + + /* Set the unstable period requested for that test. */ + switch( test->theFunction ) + { + case TA_RSI_TEST: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_RSI, test->unstablePeriod ); + break; + case TA_CMO_TEST: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_CMO, test->unstablePeriod ); + break; + } + + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + + /* Make a simple first call. */ + switch( test->theFunction ) + { + case TA_RSI_TEST: + retCode = TA_RSI( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + case TA_CMO_TEST: + retCode = TA_CMO( test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + break; + default: + retCode = TA_INTERNAL_ERROR(178); + } + + errNb = checkDataSame( gBuffer[0].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->theFunction ) + { + case TA_RSI_TEST: + retCode = TA_RSI( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + case TA_CMO_TEST: + retCode = TA_CMO( test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + break; + default: + retCode = TA_INTERNAL_ERROR(179); + } + + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Make a call using the abstract interface. */ + switch( test->theFunction ) + { + case TA_RSI_TEST: + retCode = TA_GetFuncHandle( "RSI", &funcHandle ); + break; + case TA_CMO_TEST: + retCode = TA_GetFuncHandle( "CMO", &funcHandle ); + break; + default: + retCode = TA_INTERNAL_ERROR(180); + } + + if( retCode != TA_SUCCESS ) + { + printf( "Fail: TA_GetFuncHandle with retCode = %d\n", retCode ); + return TA_ABS_TST_FAIL_GETFUNCHANDLE; + } + + retCode = TA_GetFuncInfo( funcHandle, &funcInfo ); + if( retCode != TA_SUCCESS ) + { + printf( "Fail: TA_GetFuncInfo with retCode = %d\n", retCode ); + return TA_ABS_TST_FAIL_GETFUNCINFO; + } + + retCode = TA_ParamHolderAlloc( funcHandle, ¶ms ); + if( retCode != TA_SUCCESS ) + { + printf( "Fail: TA_ParamHolderAlloc with retCode = %d\n", retCode ); + return TA_ABS_TST_FAIL_PARAMHOLDERALLOC; + } + + retCode = TA_SetInputParamRealPtr( params, 0, gBuffer[0].in ); + if( retCode != TA_SUCCESS ) + { + printf( "Fail: TA_SetInputParamRealPtr with retCode = %d\n", retCode ); + return TA_ABS_TST_FAIL_PARAMREALPTR; + } + + retCode = TA_SetOptInputParamInteger( params, 0, test->optInTimePeriod ); + if( retCode != TA_SUCCESS ) + { + printf( "Fail: TA_SetOptInputParamInteger with retCode = %d\n", retCode ); + return TA_ABS_TST_FAIL_OPTINPUTPARAMINTEGER; + } + + retCode = TA_SetOutputParamRealPtr( params, 0, gBuffer[1].out0 ); + if( retCode != TA_SUCCESS ) + { + printf( "Fail: TA_SetOutputParamRealPtr with retCode = %d\n", retCode ); + return TA_ABS_TST_FAIL_SETOUTPUTPARAMREALPTR; + } + + retCode = TA_CallFunc( params, + test->startIdx, + test->endIdx, + &outBegIdx, + &outNbElement ); + + if( retCode != TA_SUCCESS ) + { + printf( "Fail: TA_CallFunc with retCode = %d\n", retCode ); + return TA_ABS_TST_FAIL_CALLFUNC; + } + + retCode = TA_ParamHolderFree( params ); + if( retCode != TA_SUCCESS ) + { + printf( "Fail: TA_GetFuncHandle with retCode = %d\n", retCode ); + return TA_ABS_TST_FAIL_PARAMHOLDERFREE; + } + + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].out0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].out0, 0 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + switch( test->theFunction ) + { + case TA_RSI_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_RSI, + (void *)&testParam, 1, 0 ); + break; + case TA_CMO_TEST: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_CMO, + (void *)&testParam, 1, 0 ); + break; + } + + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_sar.c b/src/tools/ta_regtest/ta_test_func/test_sar.c new file mode 100644 index 000000000..6df057073 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_sar.c @@ -0,0 +1,301 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Test Parabolic SAR function using the example given + * in Wilder's book. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef struct +{ + TA_Integer useWilderData; + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Real optInAcceleration; + TA_Real optInMaximum; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Real wilderHigh[] = +{ +51.12, +52.35,52.1,51.8,52.1,52.5,52.8,52.5,53.5,53.5,53.8,54.2,53.4,53.5, +54.4,55.2,55.7,57,57.5,58,57.7,58,57.5,57,56.7,57.5, +56.70,56.00,56.20,54.80,55.50,54.70,54.00,52.50,51.00,51.50,51.70,53.00 +}; + +static TA_Real wilderLow[] = +{ +50.0, +51.5,51,50.5,51.25,51.7,51.85,51.5,52.3,52.5,53,53.5,52.5,52.1,53, +54,55,56,56.5,57,56.5,57.3,56.7,56.3,56.2,56, +55.50,55.00,54.90,54.00,54.50,53.80,53.00,51.50,50.00,50.50,50.20,51.50 +}; + +#define WILDER_NB_BAR (sizeof(wilderLow)/sizeof(TA_Real)) + +static TA_Test tableTest[] = +{ + /**************************************/ + /* SAR TEST WITH WILDER DATA */ + /**************************************/ + { 1, 0, (WILDER_NB_BAR-1), 0.02, 0.20, TA_SUCCESS, 0, 50.00, 1, (WILDER_NB_BAR-1) }, /* First Value */ + { 1, 0, (WILDER_NB_BAR-1), 0.02, 0.20, TA_SUCCESS, 1, 50.047, 1, (WILDER_NB_BAR-1) }, + { 1, 0, (WILDER_NB_BAR-1), 0.02, 0.20, TA_SUCCESS, 4, 50.182, 1, (WILDER_NB_BAR-1) }, + { 1, 0, (WILDER_NB_BAR-1), 0.02, 0.20, TA_SUCCESS, 35, 52.93, 1, (WILDER_NB_BAR-1) }, + { 1, 0, (WILDER_NB_BAR-1), 0.02, 0.20, TA_SUCCESS, 36, 50.00, 1, (WILDER_NB_BAR-1) } /* Last value */ +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_sar( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Set all the unstable period to a weird value. This is to make sure + * that no unstable period affects the SAR. + */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 124 ); + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", __FILE__, + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", __FILE__, + i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + + const TA_Real *highPtr; + const TA_Real *lowPtr; + TA_Integer nbPriceBar; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + if( test->useWilderData ) + { + highPtr = wilderHigh; + lowPtr = wilderLow; + nbPriceBar = WILDER_NB_BAR; + } + else + { + highPtr = history->high; + lowPtr = history->low; + nbPriceBar = history->nbBars; + } + + setInputBuffer( 0, highPtr, nbPriceBar ); + setInputBuffer( 1, lowPtr, nbPriceBar ); + + /* Make a simple first call. */ + retCode = TA_SAR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInAcceleration, + test->optInMaximum, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + + errNb = checkDataSame( gBuffer[0].in, highPtr, nbPriceBar ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, lowPtr, nbPriceBar ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = TA_SAR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInAcceleration, + test->optInMaximum, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Make sure the other input is untouched. */ + errNb = checkDataSame( gBuffer[0].in, highPtr, nbPriceBar ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Repeat that last test but with the first parameter this time. */ + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, highPtr, nbPriceBar ); + setInputBuffer( 1, lowPtr, nbPriceBar ); + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = TA_SAR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + test->optInAcceleration, + test->optInMaximum, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Make sure the other input is untouched. */ + errNb = checkDataSame( gBuffer[1].in, lowPtr, nbPriceBar); + if( errNb != TA_TEST_PASS ) + return errNb; + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_stddev.c b/src/tools/ta_regtest/ta_test_func/test_stddev.c new file mode 100644 index 000000000..ad33f3a47 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_stddev.c @@ -0,0 +1,265 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Test STDDEV function. This tests indirectly the VAR function. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef struct +{ + TA_Integer doRangeTestFlag; /* One will do a call to doRangeTest */ + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInTimePeriod; + TA_Real optInNbDeviation_1; + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /*************************/ + /* STDDEV TEST */ + /*************************/ + { 1, 0, 251, 5, 1.0, TA_SUCCESS, 0, 1.2856, 4, 252-4 }, /* First Value */ + { 0, 0, 251, 5, 1.0, TA_SUCCESS, 1, 0.4462, 4, 252-4 }, + { 0, 0, 251, 5, 1.0, TA_SUCCESS, 252-5, 0.7144, 4, 252-4 }, /* Last Value */ + + { 1, 0, 251, 5, 1.5, TA_SUCCESS, 0, 1.9285, 4, 252-4 }, /* First Value */ + { 0, 0, 251, 5, 1.5, TA_SUCCESS, 1, 0.66937, 4, 252-4 }, + { 0, 0, 251, 5, 1.5, TA_SUCCESS, 252-5, 1.075, 4, 252-4 } /* Last Value */ +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_stddev( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", __FILE__, + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", __FILE__, + i, retValue ); + return retValue; + } + } + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + retCode = TA_STDDEV( + startIdx, + endIdx, + testParam->close, + testParam->test->optInTimePeriod, + testParam->test->optInNbDeviation_1, + outBegIdx, + outNbElement, + outputBuffer ); + + + *lookback = TA_STDDEV_Lookback( testParam->test->optInTimePeriod, + testParam->test->optInNbDeviation_1 ); + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->close, history->nbBars ); + setInputBuffer( 1, history->close, history->nbBars ); + + /* Make a simple first call. */ + retCode = TA_STDDEV( + test->startIdx, + test->endIdx, + gBuffer[0].in, + test->optInTimePeriod, + test->optInNbDeviation_1, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + + errNb = checkDataSame( gBuffer[0].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + retCode = TA_STDDEV( + test->startIdx, + test->endIdx, + gBuffer[1].in, + test->optInTimePeriod, + test->optInNbDeviation_1, + &outBegIdx, + &outNbElement, + gBuffer[1].in ); + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].in, 0 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + errNb = doRangeTest( + rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + diff --git a/src/tools/ta_regtest/ta_test_func/test_stoch.c b/src/tools/ta_regtest/ta_test_func/test_stoch.c new file mode 100644 index 000000000..f8d01aa92 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_stoch.c @@ -0,0 +1,794 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 122101 MF First version. + * 111603 MF Add test of TA_STOCHRSI + */ + +/* Description: + * Test the Stochastic function. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" +#include "ta_memory.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum +{ + TEST_STOCH, + TEST_STOCHF, + TEST_STOCHRSI +} TestId; + +typedef struct +{ + TestId testId; + + TA_Integer doRangeTestFlag; /* One will do a call to doRangeTest */ + + TA_Integer unstablePeriod; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer optInPeriod_0; + TA_Integer optInPeriod_1; + TA_Integer optInMAType_1; + TA_Integer optInPeriod_2; + TA_Integer optInMAType_2; + + TA_RetCode expectedRetCode; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; + + TA_Integer oneOfTheExpectedOutRealIndex0; + TA_Real oneOfTheExpectedOutReal0; + + TA_Integer oneOfTheExpectedOutRealIndex1; + TA_Real oneOfTheExpectedOutReal1; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *high; + const TA_Real *low; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +static TA_RetCode referenceStoch( TA_Integer startIdx, + TA_Integer endIdx, + const TA_Real inHigh[], + const TA_Real inLow[], + const TA_Real inClose[], + TA_Integer optInPeriod_0, /* From 1 to TA_INTEGER_MAX */ + TA_Integer optInPeriod_1, /* From 1 to TA_INTEGER_MAX */ + TA_Integer optInMAType_1, + TA_Integer optInPeriod_2, /* From 1 to TA_INTEGER_MAX */ + TA_Integer optInMAType_2, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Real outSlowK_0[], + TA_Real outSlowD_1[] ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /**************/ + /* STOCH TEST */ + /**************/ + { TEST_STOCH, 1, 0, 9, 9, 5, 3, TA_MAType_SMA, 4, TA_MAType_SMA, TA_SUCCESS, 9, 1, + 0, 38.139, + 0, 36.725 }, /* Test one value */ + + + { TEST_STOCH, 0, 0, 0, 251, 5, 3, TA_MAType_SMA, 3, TA_MAType_SMA, TA_SUCCESS, 8, 252-8, + 0, 24.0128, + 0, 36.254, }, /* First Value */ + + { TEST_STOCH, 0, 0, 0, 251, 5, 3, TA_MAType_SMA, 4, TA_MAType_SMA, TA_SUCCESS, 9, 252-9, + 252-10, 30.194, + 252-10, 46.641, }, /* Last Value */ + + { TEST_STOCH, 0, 0, 0, 251, 5, 3, TA_MAType_SMA, 3, TA_MAType_SMA, TA_SUCCESS, 8, 252-8, + 252-9, 30.194, + 252-9, 43.69, }, /* Last Value */ + + /*****************/ + /* STOCHRSI TEST */ + /*****************/ + { TEST_STOCHRSI, 0, 0, 27, 27, 14, 14, -1, 1, TA_MAType_SMA, TA_SUCCESS, 27, 1, + 0, 94.156709, + 0, 94.156709 }, /* Test one Value */ + + { TEST_STOCHRSI, 1, 0, 0, 251, 14, 14, -1, 1, TA_MAType_SMA, TA_SUCCESS, 27, 252-27, + 0, 94.156709, + 0, 94.156709 }, /* First Value */ + + { TEST_STOCHRSI, 0, 0, 0, 251, 14, 14, -1, 1, TA_MAType_SMA, TA_SUCCESS, 27, 252-27, + 251-27, 0.0, + 251-27, 0.0 }, /* Last Value */ + + { TEST_STOCHRSI, 0, 0, 0, 251, 14, 45, -1, 1, TA_MAType_SMA, TA_SUCCESS, 58, 252-58, + 0, 79.729186, + 0, 79.729186 }, /* First Value */ + + { TEST_STOCHRSI, 0, 0, 0, 251, 14, 45, -1, 1, TA_MAType_SMA, TA_SUCCESS, 58, 252-58, + 251-58, 48.1550743, + 251-58, 48.1550743 }, /* Last Value */ + + + { TEST_STOCHRSI, 1, 0, 0, 251, 11, 13, -1, 16, TA_MAType_SMA, TA_SUCCESS, 38, 252-38, + 0, 5.25947, + 0, 57.1711}, /* First Value */ + + { TEST_STOCHRSI, 0, 0, 0, 251, 11, 13, -1, 16, TA_MAType_SMA, TA_SUCCESS, 38, 252-38, + 251-38, 0.0, + 251-38, 15.7303 }, /* Last Value */ + + /* More test needed!!! */ +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_stoch( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", __FILE__, + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", __FILE__, + i, retValue ); + return retValue; + } + } + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + TA_Real *dummyOutput; + + (void)outputBufferInt; + + *isOutputInteger = 0; + + retCode = TA_NOT_SUPPORTED; + + testParam = (TA_RangeTestParam *)opaqueData; + + + dummyOutput = TA_Malloc( (endIdx-startIdx+1) * sizeof(TA_Real) ); + + switch( testParam->test->testId ) + { + case TEST_STOCH: + if( outputNb == 0 ) + { + retCode = TA_STOCH( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + (TA_MAType)testParam->test->optInMAType_1, + testParam->test->optInPeriod_2, + (TA_MAType)testParam->test->optInMAType_2, + outBegIdx, outNbElement, + outputBuffer, + dummyOutput ); + + } + else + { + retCode = TA_STOCH( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + (TA_MAType)testParam->test->optInMAType_1, + testParam->test->optInPeriod_2, + (TA_MAType)testParam->test->optInMAType_2, + outBegIdx, outNbElement, + dummyOutput, + outputBuffer ); + } + + *lookback = TA_STOCH_Lookback( testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + (TA_MAType)testParam->test->optInMAType_1, + testParam->test->optInPeriod_2, + (TA_MAType)testParam->test->optInMAType_2 ); + break; + case TEST_STOCHF: + if( outputNb == 0 ) + { + retCode = TA_STOCHF( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + (TA_MAType)testParam->test->optInMAType_1, + outBegIdx, outNbElement, + outputBuffer, + dummyOutput ); + + } + else + { + retCode = TA_STOCHF( startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + (TA_MAType)testParam->test->optInMAType_1, + outBegIdx, outNbElement, + dummyOutput, + outputBuffer ); + } + + *lookback = TA_STOCHF_Lookback( testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + (TA_MAType)testParam->test->optInMAType_1 ); + break; + + case TEST_STOCHRSI: + if( outputNb == 0 ) + { + retCode = TA_STOCHRSI( startIdx, + endIdx, + testParam->close, + testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + testParam->test->optInPeriod_2, + (TA_MAType)testParam->test->optInMAType_2, + outBegIdx, outNbElement, + outputBuffer, + dummyOutput ); + + } + else + { + retCode = TA_STOCHRSI( startIdx, + endIdx, + testParam->close, + testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + testParam->test->optInPeriod_2, + (TA_MAType)testParam->test->optInMAType_2, + outBegIdx, outNbElement, + dummyOutput, + outputBuffer ); + } + + *lookback = TA_STOCHRSI_Lookback( testParam->test->optInPeriod_0, + testParam->test->optInPeriod_1, + testParam->test->optInPeriod_2, + (TA_MAType)testParam->test->optInMAType_2 ); + break; + } + + TA_Free( dummyOutput ); + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + retCode = TA_NOT_SUPPORTED; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->high, history->nbBars ); + setInputBuffer( 1, history->low, history->nbBars ); + setInputBuffer( 2, history->close, history->nbBars ); + + /* Re-initialize all the unstable period to zero. */ + TA_SetUnstablePeriod( TA_FUNC_UNST_ALL, 0 ); + + /* Set the unstable period requested for that test. */ + switch( test->optInMAType_1 ) + { + case TA_MAType_EMA: + retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_EMA, test->unstablePeriod ); + if( retCode != TA_SUCCESS ) + return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL; + break; + default: + /* No unstable period for other methods. */ + break; + } + + /* Make a simple first call. */ + switch( test->testId ) + { + case TEST_STOCH: + retCode = TA_STOCH( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInPeriod_0, + test->optInPeriod_1, + (TA_MAType)test->optInMAType_1, + test->optInPeriod_2, + (TA_MAType)test->optInMAType_2, + &outBegIdx, &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1 ); + break; + case TEST_STOCHF: + retCode = TA_STOCHF( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInPeriod_0, + test->optInPeriod_1, + (TA_MAType)test->optInMAType_1, + &outBegIdx, &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1 ); + break; + case TEST_STOCHRSI: + retCode = TA_STOCHRSI( test->startIdx, + test->endIdx, + gBuffer[2].in, + test->optInPeriod_0, + test->optInPeriod_1, + test->optInPeriod_2, + (TA_MAType)test->optInMAType_2, + &outBegIdx, &outNbElement, + gBuffer[0].out0, + gBuffer[0].out1 ); + break; + } + + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].out0, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[0].out1, 1 ); + + outBegIdx = outNbElement = 0; + + if( test->testId == TEST_STOCH ) + { + /* Call a local non-optimized version of the function. + * This way, we make sure that the currently speed optimized + * version in TA-Lib is not broken. + */ + retCode = referenceStoch( + test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInPeriod_0, + test->optInPeriod_1, + test->optInMAType_1, + test->optInPeriod_2, + test->optInMAType_2, + &outBegIdx, &outNbElement, + gBuffer[1].out0, + gBuffer[1].out1 ); + + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[1].out0, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[1].out1, 1 ); + + /* The non-optimized reference shall be identical to the optimized + * TA-Lib implementation. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[1].out0, gBuffer[0].out0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkSameContent( gBuffer[1].out1, gBuffer[0].out1 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + /* Make another call where the input and the output are the + * same buffer. + */ + switch( test->testId ) + { + case TEST_STOCH: + retCode = TA_STOCH( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInPeriod_0, + test->optInPeriod_1, + (TA_MAType)test->optInMAType_1, + test->optInPeriod_2, + (TA_MAType)test->optInMAType_2, + &outBegIdx, &outNbElement, + gBuffer[0].in, + gBuffer[1].in ); + break; + case TEST_STOCHF: + retCode = TA_STOCHF( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInPeriod_0, + test->optInPeriod_1, + (TA_MAType)test->optInMAType_1, + &outBegIdx, &outNbElement, + gBuffer[0].in, + gBuffer[1].in ); + break; + case TEST_STOCHRSI: + retCode = TA_STOCHRSI( test->startIdx, + test->endIdx, + gBuffer[2].in, + test->optInPeriod_0, + test->optInPeriod_1, + test->optInPeriod_2, + (TA_MAType)test->optInMAType_2, + &outBegIdx, &outNbElement, + gBuffer[0].in, + gBuffer[1].in ); + break; + + } + + /* The previous call should have the same output as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkSameContent( gBuffer[0].out1, gBuffer[1].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + CHECK_EXPECTED_VALUE( gBuffer[0].in, 0 ); + CHECK_EXPECTED_VALUE( gBuffer[1].in, 1 ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.high = history->high; + testParam.low = history->low; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + switch( test->testId ) + { + case TEST_STOCH: + case TEST_STOCHF: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_NONE, + (void *)&testParam, 2, 0 ); + break; + case TEST_STOCHRSI: + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_RSI, + (void *)&testParam, 2, 0 ); + break; + } + + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} + + +/* This is an un-optimized version of the STOCH function */ +static TA_RetCode referenceStoch( TA_Integer startIdx, + TA_Integer endIdx, + const TA_Real inHigh[], + const TA_Real inLow[], + const TA_Real inClose[], + TA_Integer optInPeriod_0, /* From 1 to TA_INTEGER_MAX */ + TA_Integer optInPeriod_1, /* From 1 to TA_INTEGER_MAX */ + TA_Integer optInMAType_1, + TA_Integer optInPeriod_2, /* From 1 to TA_INTEGER_MAX */ + TA_Integer optInMAType_2, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Real outSlowK_0[], + TA_Real outSlowD_1[] ) +{ + TA_RetCode retCode; + double Lt, Ht, tmp, *tempBuffer; + int outIdx; + int lookbackTotal, lookbackK, lookbackKSlow, lookbackDSlow; + int trailingIdx, today, i, bufferIsAllocated; + + /* Identify the lookback needed. */ + lookbackK = optInPeriod_0-1; + lookbackKSlow = TA_MA_Lookback( optInPeriod_1, (TA_MAType)optInMAType_1 ); + lookbackDSlow = TA_MA_Lookback( optInPeriod_2, (TA_MAType)optInMAType_2 ); + lookbackTotal = lookbackK + lookbackDSlow + lookbackKSlow; + + /* Move up the start index if there is not + * enough initial data. + */ + if( startIdx < lookbackTotal ) + startIdx = lookbackTotal; + + /* Make sure there is still something to evaluate. */ + if( startIdx > endIdx ) + { + /* Succeed... but no data in the output. */ + *outBegIdx = 0; + *outNbElement = 0; + return TA_SUCCESS; + } + + /* Do the K calculation: + * + * Kt = 100 x ((Ct-Lt)/(Ht-Lt)) + * + * Kt is today stochastic + * Ct is today closing price. + * Lt is the lowest price of the last K Period (including today) + * Ht is the highest price of the last K Period (including today) + */ + + /* Proceed with the calculation for the requested range. + * Note that this algorithm allows the input and + * output to be the same buffer. + */ + outIdx = 0; + + /* Calculate just enough K for ending up with the caller + * requested range. (The range of k must consider all + * the lookback involve with the smoothing). + */ + trailingIdx = startIdx-lookbackTotal; + today = trailingIdx+lookbackK; + + /* Allocate a temporary buffer large enough to + * store the K. + * + * If the output is the same as the input, great + * we just save ourself one memory allocation. + */ + bufferIsAllocated = 0; + if( (outSlowK_0 == inHigh) || + (outSlowK_0 == inLow) || + (outSlowK_0 == inClose) ) + { + tempBuffer = outSlowK_0; + } + else if( (outSlowD_1 == inHigh) || + (outSlowD_1 == inLow) || + (outSlowD_1 == inClose) ) + { + tempBuffer = outSlowD_1; + } + else + { + bufferIsAllocated = 1; + tempBuffer = TA_Malloc( (endIdx-today+1)*sizeof(TA_Real) ); + } + + /* Do the K calculation */ + while( today <= endIdx ) + { + /* Find Lt and Ht for the requested K period. */ + Lt = inLow [trailingIdx]; + Ht = inHigh[trailingIdx]; + trailingIdx++; + for( i=trailingIdx; i <= today; i++ ) + { + tmp = inLow[i]; + if( tmp < Lt ) Lt = tmp; + tmp = inHigh[i]; + if( tmp > Ht ) Ht = tmp; + } + + /* Calculate stochastic. */ + tmp = Ht-Lt; + if( tmp > 0.0 ) + tempBuffer[outIdx++] = 100.0*((inClose[today]-Lt)/tmp); + else + tempBuffer[outIdx++] = 100.0; + + today++; + } + + /* Un-smoothed K calculation completed. This K calculation is not returned + * to the caller. It is always smoothed and then return. + * Some documentation will refer to the smoothed version as being + * "K-Slow", but often this end up to be shorten to "K". + */ + retCode = TA_MA( 0, outIdx-1, + tempBuffer, optInPeriod_1, + (TA_MAType)optInMAType_1, + outBegIdx, outNbElement, tempBuffer ); + + + if( (retCode != TA_SUCCESS) || (*outNbElement == 0) ) + { + if( bufferIsAllocated ) + TA_Free( tempBuffer ); + /* Something wrong happen? No further data? */ + *outBegIdx = 0; + *outNbElement = 0; + return retCode; + } + + /* Calculate the %D which is simply a moving average of + * the already smoothed %K. + */ + retCode = TA_MA( 0, (*outNbElement)-1, + tempBuffer, optInPeriod_2, + (TA_MAType)optInMAType_2, + outBegIdx, outNbElement, outSlowD_1 ); + + /* Copy tempBuffer into the caller buffer. + * (Calculation could not be done directly in the + * caller buffer because more input data then the + * requested range was needed for doing %D). + */ + memmove( outSlowK_0, &tempBuffer[lookbackDSlow], (*outNbElement) * sizeof(TA_Real) ); + + /* Don't need K anymore, free it if it was allocated here. */ + if( bufferIsAllocated ) + TA_Free( tempBuffer ); + + if( retCode != TA_SUCCESS ) + { + /* Something wrong happen while processing %D? */ + *outBegIdx = 0; + *outNbElement = 0; + return retCode; + } + + /* Note: Keep the outBegIdx relative to the + * caller input before returning. + */ + *outBegIdx = startIdx; + + return TA_SUCCESS; +} + + diff --git a/src/tools/ta_regtest/ta_test_func/test_trange.c b/src/tools/ta_regtest/ta_test_func/test_trange.c new file mode 100644 index 000000000..e13e70028 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_func/test_trange.c @@ -0,0 +1,349 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Test TRANGE and ATR function. + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_test_func.h" +#include "ta_utility.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef struct +{ + TA_Integer doRangeTestFlag; /* One will do a call to doRangeTest */ + + TA_Integer unstablePeriod; + + TA_Integer startIdx; + TA_Integer endIdx; + + TA_Integer doAverage; /* 1 indicate ATR, else TRANGE. */ + TA_Integer optInTimePeriod; /* Meaningful only for ATR. */ + + TA_RetCode expectedRetCode; + + TA_Integer oneOfTheExpectedOutRealIndex; + TA_Real oneOfTheExpectedOutReal; + + TA_Integer expectedBegIdx; + TA_Integer expectedNbElement; +} TA_Test; + +typedef struct +{ + const TA_Test *test; + const TA_Real *high; + const TA_Real *low; + const TA_Real *close; +} TA_RangeTestParam; + +/**** Local functions declarations. ****/ +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ); + +/**** Local variables definitions. ****/ + +static TA_Test tableTest[] = +{ + /* TRANGE TEST */ + { 1, 0, 0, 251, 0, 0, TA_SUCCESS, 0, 3.535, 1, 251 }, /* First Value */ + { 0, 0, 0, 251, 0, 0, TA_SUCCESS, 12, 9.685, 1, 251 }, + { 0, 0, 0, 251, 0, 0, TA_SUCCESS, 40, 5.125, 1, 251 }, + { 0, 0, 0, 251, 0, 0, TA_SUCCESS, 250, 2.88, 1, 251 }, /* Last Value */ + + /* ATR TEST */ + { 1, 0, 0, 251, 1, 1, TA_SUCCESS, 0, 3.535, 1, 251 }, /* First Value */ + { 0, 0, 0, 251, 1, 1, TA_SUCCESS, 12, 9.685, 1, 251 }, + { 0, 0, 0, 251, 1, 1, TA_SUCCESS, 40, 5.125, 1, 251 }, + { 0, 0, 0, 251, 1, 1, TA_SUCCESS, 250, 2.88, 1, 251 }, /* Last Value */ + + { 0, 1, 14, 15, 1, 14, TA_SUCCESS, 0, 3.4876, 15, 1 }, + { 0, 1, 15, 16, 1, 14, TA_SUCCESS, 0, 3.4876, 15, 2 }, + + { 1, 0, 0, 251, 1, 14, TA_SUCCESS, 0, 3.578, 14, 252-14 }, /* First Value */ + { 0, 0, 0, 251, 1, 14, TA_SUCCESS, 1, 3.4876, 14, 252-14 }, + { 0, 0, 0, 251, 1, 14, TA_SUCCESS, 2, 3.55, 14, 252-14 }, + { 0, 0, 0, 251, 1, 14, TA_SUCCESS, 12, 3.245, 14, 252-14 }, + { 0, 0, 0, 251, 1, 14, TA_SUCCESS, 13, 3.394, 14, 252-14 }, + { 0, 0, 0, 251, 1, 14, TA_SUCCESS, 14, 3.413, 14, 252-14 }, + { 0, 0, 0, 251, 1, 14, TA_SUCCESS, 237, 3.26, 14, 252-14 }, /* Last Value */ + +}; + +#define NB_TEST (sizeof(tableTest)/sizeof(TA_Test)) + +/**** Global functions definitions. ****/ +ErrorNumber test_func_trange( TA_History *history ) +{ + unsigned int i; + ErrorNumber retValue; + + for( i=0; i < NB_TEST; i++ ) + { + if( (int)tableTest[i].expectedNbElement > (int)history->nbBars ) + { + printf( "%s Failed Bad Parameter for Test #%d (%d,%d)\n", + tableTest[i].doAverage? "TA_ATR":"TA_TRANGE", + i, tableTest[i].expectedNbElement, history->nbBars ); + return TA_TESTUTIL_TFRR_BAD_PARAM; + } + + retValue = do_test( history, &tableTest[i] ); + if( retValue != 0 ) + { + printf( "%s Failed Test #%d (Code=%d)\n", + tableTest[i].doAverage? "TA_ATR":"TA_TRANGE", + i, retValue ); + return retValue; + } + } + + + /* All test succeed. */ + return TA_TEST_PASS; +} + +/**** Local functions definitions. ****/ +static TA_RetCode rangeTestFunction( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + TA_RetCode retCode; + TA_RangeTestParam *testParam; + + (void)outputNb; + (void)outputBufferInt; + + *isOutputInteger = 0; + + testParam = (TA_RangeTestParam *)opaqueData; + + + if( testParam->test->doAverage ) + { + retCode = TA_ATR( + startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + testParam->test->optInTimePeriod, + outBegIdx, + outNbElement, + outputBuffer ); + *lookback = TA_ATR_Lookback( testParam->test->optInTimePeriod ); + } + else + { + retCode = TA_TRANGE( + startIdx, + endIdx, + testParam->high, + testParam->low, + testParam->close, + outBegIdx, + outNbElement, + outputBuffer ); + + *lookback = TA_TRANGE_Lookback(); + } + + return retCode; +} + +static ErrorNumber do_test( const TA_History *history, + const TA_Test *test ) +{ + TA_RetCode retCode; + ErrorNumber errNb; + TA_Integer outBegIdx; + TA_Integer outNbElement; + TA_RangeTestParam testParam; + + /* Set to NAN all the elements of the gBuffers. */ + clearAllBuffers(); + + /* Build the input. */ + setInputBuffer( 0, history->high, history->nbBars ); + setInputBuffer( 1, history->low, history->nbBars ); + setInputBuffer( 2, history->close, history->nbBars ); + + if( test->doAverage ) + { + TA_SetUnstablePeriod( TA_FUNC_UNST_ATR, test->unstablePeriod ); + retCode = TA_ATR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + } + else + { + retCode = TA_TRANGE( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + &outBegIdx, + &outNbElement, + gBuffer[0].out0 ); + } + + errNb = checkDataSame( gBuffer[0].in, history->high,history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[1].in, history->low, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + errNb = checkDataSame( gBuffer[2].in, history->close, history->nbBars ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkExpectedValue( gBuffer[0].out0, + retCode, test->expectedRetCode, + outBegIdx, test->expectedBegIdx, + outNbElement, test->expectedNbElement, + test->oneOfTheExpectedOutReal, + test->oneOfTheExpectedOutRealIndex ); + if( errNb != TA_TEST_PASS ) + return errNb; + + outBegIdx = outNbElement = 0; + + /* Make another call where the input and the output are the + * same buffer. + */ + if( test->doAverage ) + { + TA_SetUnstablePeriod( TA_FUNC_UNST_ATR, test->unstablePeriod ); + retCode = TA_ATR( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + test->optInTimePeriod, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + } + else + { + retCode = TA_TRANGE( test->startIdx, + test->endIdx, + gBuffer[0].in, + gBuffer[1].in, + gBuffer[2].in, + &outBegIdx, + &outNbElement, + gBuffer[0].in ); + } + + /* The previous call to TA_MA should have the same output + * as this call. + * + * checkSameContent verify that all value different than NAN in + * the first parameter is identical in the second parameter. + */ + errNb = checkSameContent( gBuffer[0].out0, gBuffer[0].in ); + if( errNb != TA_TEST_PASS ) + return errNb; + + errNb = checkExpectedValue( gBuffer[0].in, + retCode, test->expectedRetCode, + outBegIdx, test->expectedBegIdx, + outNbElement, test->expectedNbElement, + test->oneOfTheExpectedOutReal, + test->oneOfTheExpectedOutRealIndex ); + if( errNb != TA_TEST_PASS ) + return errNb; + + /* Do a systematic test of most of the + * possible startIdx/endIdx range. + */ + testParam.test = test; + testParam.high = history->high; + testParam.low = history->low; + testParam.close = history->close; + + if( test->doRangeTestFlag ) + { + errNb = doRangeTest( rangeTestFunction, + TA_FUNC_UNST_ATR, + (void *)&testParam, 1, 0 ); + if( errNb != TA_TEST_PASS ) + return errNb; + } + + return TA_TEST_PASS; +} diff --git a/src/tools/ta_regtest/ta_test_priv.h b/src/tools/ta_regtest/ta_test_priv.h new file mode 100644 index 000000000..435f06758 --- /dev/null +++ b/src/tools/ta_regtest/ta_test_priv.h @@ -0,0 +1,210 @@ +#ifndef TA_TEST_PRIV_H +#define TA_TEST_PRIV_H + +#ifndef TA_LIBC_H + #include "ta_libc.h" +#endif + +#ifndef TA_ERROR_NUMBER_H + #include "ta_error_number.h" +#endif + +typedef struct +{ + unsigned int nbBars; /* Nb of element into the following arrays. */ + + /* The arrays containing data. Unused array are set to NULL. */ + TA_Real *open; + TA_Real *high; + TA_Real *low; + TA_Real *close; + TA_Real *volume; + TA_Real *openInterest; +} TA_History; + +ErrorNumber test_internals( void ); +ErrorNumber test_abstract( void ); + +ErrorNumber freeLib( void ); +ErrorNumber allocLib( void ); + +void reportError( const char *str, TA_RetCode retCode ); + +/* Global Temporary Used by the ta_func_xxx function. */ + + +typedef struct +{ + TA_Real *in; + + TA_Real *out0; + TA_Real *out1; + TA_Real *out2; +} TestBuffer; + + +/* That's quite a lot of global data, but who cares for + * regression testing... it simplify memory alloc/dealloc. + */ +#define NB_GLOBAL_BUFFER 5 +extern TestBuffer gBuffer[NB_GLOBAL_BUFFER]; + +/* Maximum number of element that can be written + * at a gBuffer[n].ptr + */ +#define MAX_NB_TEST_ELEMENT 280 + +/* Must be called once to initialize the gBuffer. */ +void initGlobalBuffer( void ); + +/* Will set to NAN all elements of gBuffer. */ +void clearAllBuffers( void ); + +/* Initialize the 'gBuffer[i].in' with the provided data. */ +void setInputBuffer( unsigned int i, const TA_Real *data, unsigned int nbElement ); + +/* Same as setInputBuffer but fill with a single value. */ +void setInputBufferValue( unsigned int i, const TA_Real data, unsigned int nbElement ); + +/* Check that a buffer (within a TestBuffer) is not containing + * NAN within the specified range (it also checks that all value + * outside the range are untouched). + * + * Return TA_TEST_PASS if all ok. + */ +ErrorNumber checkForNAN( const TA_Real *buffer, + unsigned int nbElement ); + +/* Check that the 'data' is equal to the provided + * originalInput. + * + * The data must be one of the 'gBuffer[n].buffer'. + * + * It is also checked that all value outside of the + * nbElement range are not-a-number. + * + * Return TA_TEST_PASS if no difference are found. + */ +ErrorNumber checkDataSame( const TA_Real *data, + const TA_Real *originalInput, + unsigned int nbElement ); + +/* Check that the content of the first buffer + * is found in the second buffer (when the elements + * in the first buffer is NAN, no check is done for + * this paricular element). + * + * Return TA_TEST_PASS if no difference are found. + */ +ErrorNumber checkSameContent( TA_Real *buffer1, + TA_Real *buffer2 ); + +ErrorNumber checkExpectedValue( const TA_Real *data, + TA_RetCode retCode, TA_RetCode expectedRetCode, + unsigned int outBegIdx, unsigned int expectedBegIdx, + unsigned int outNbElement, unsigned int expectedNbElement, + TA_Real oneOfTheExpectedOutReal, + unsigned int oneOfTheExpectedOutRealIndex ); + +#define CHECK_EXPECTED_VALUE(bufid,id) \ + { \ + errNb = checkExpectedValue( bufid, \ + retCode, test->expectedRetCode, \ + outBegIdx, test->expectedBegIdx, \ + outNbElement, test->expectedNbElement, \ + test->oneOfTheExpectedOutReal##id, \ + test->oneOfTheExpectedOutRealIndex##id ); \ + if( errNb != TA_TEST_PASS ) \ + { \ + printf( "Fail for output id=%d\n", id ); \ + return errNb; \ + } \ + } + +#define CLEAR_EXPECTED_VALUE(id) \ + { \ + retCode = TA_INTERNAL_ERROR(127); \ + outBegIdx = 0;\ + outNbElement = 0;\ + } + + +/* A systematic test can be done for most of the possible + * range that a TA function can be called with. This test + * is common to all TA function and can be easily done + * with a RangeTestFunction. + * + * The RangeTestFunction is making abstraction of the + * TA function (handles the inputs, the parameters etc...) + * The RangeTestFunction must call the TA function for + * the requested startIdx/endIdx range and put the output + * in the provided buffer. + * + * The RangeTestFunction must also set the outBegIdx and + * outNbElement for verification. + * + * Opaque data (for mostly passing optional parameters) are + * pass through the pointer 'void * opaqueData'. + * + * The output of the function must be put in the outputBuffer + * or outputBufferInt depending of the return type. + */ +#define MAX_RANGE_SIZE 252 +#define MAX_RANGE_END (MAX_RANGE_SIZE-1) + +typedef TA_RetCode (*RangeTestFunction)( TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ); + +/* This is the function starting the range tests. + * The parameter 'nbOutput' allows to repeat the + * tests indepedently for each outputs. + * + * A lot of coherency tests are performed, + * including comparing that the same value are + * returned even when using a different startIdx + * and endIdx. + * + * Because of the complexity added by algorithm that + * have an unstable period, the comparison is + * done using a tolerance algorithm (see test_util.c). + * + * Comparison can be ignored by specifiying + * an integerTolerance == TA_DO_NOT_COMPARE + * + * Even without comparison, a lot of coherency + * tests are still performed (like making sure the + * lookback function is coherent with its TA function). + * + * In the case that the TA function output are + * integer, the integerTolerance indicate by how much + * the value can vary for a function having an + * unstable period. Example: If 2 is pass, the + * value can vary of no more or less 2. + * When passing zero, the tolerance is done using + * a "reasonable" logic using double calculation (see + * test_util.c for more info). + */ +#define TA_DO_NOT_COMPARE 0xFFFFFFFF +ErrorNumber doRangeTest( RangeTestFunction testFunction, + TA_FuncUnstId unstId, + void *opaqueData, + unsigned int nbOutput, + unsigned int integerTolerance ); + +/* Print out info about a retCode */ +void printRetCode( TA_RetCode retCode ); + +/* Function to print character to show that the software is still alive. */ +void showFeedback(void); +void hideFeedback(void); + +#endif + diff --git a/src/tools/ta_regtest/test_abstract.c b/src/tools/ta_regtest/test_abstract.c new file mode 100644 index 000000000..909ef9c67 --- /dev/null +++ b/src/tools/ta_regtest/test_abstract.c @@ -0,0 +1,762 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * AC Angelo Ciceri + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112703 MF First version. + * 030104 MF Add tests for TA_GetLookback + * 062504 MF Add test_default_calls. + * 110206 AC Change volume and open interest to double + * 082607 MF Add profiling feature. + */ + +/* Description: + * Regression testing of the functionality provided + * by the ta_abstract module. + * + * Also perform call to all functions for the purpose + * of profiling (doExtensiveProfiling option). + */ + +/**** Headers ****/ +#ifdef WIN32 + #include "windows.h" +#else + #include "time.h" +#endif + +#include +#include +#include +#include +#include "ta_test_priv.h" + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +extern int doExtensiveProfiling; + +extern double gDataOpen[]; +extern double gDataHigh[]; +extern double gDataLow[]; +extern double gDataClose[]; + +extern int nbProfiledCall; +extern double timeInProfiledCall; +extern double worstProfiledCall; +extern int insufficientClockPrecision; + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +typedef enum +{ + PROFILING_10000, + PROFILING_8000, + PROFILING_5000, + PROFILING_2000, + PROFILING_1000, + PROFILING_500, + PROFILING_100 +} ProfilingType; + +/**** Local functions declarations. ****/ +static ErrorNumber testLookback(TA_ParamHolder *paramHolder ); +static ErrorNumber test_default_calls(void); +static ErrorNumber callWithDefaults( const char *funcName, + const double *input, + const int *input_int, int size ); +static ErrorNumber callAndProfile( const char *funcName, ProfilingType type ); + +/**** Local variables definitions. ****/ +static double inputNegData[100]; +static double inputZeroData[100]; +static double inputRandFltEpsilon[100]; +static double inputRandDblEpsilon[100]; +static double inputRandomData[2000]; + +static int inputNegData_int[100]; +static int inputZeroData_int[100]; +static int inputRandFltEpsilon_int[100]; +static int inputRandDblEpsilon_int[100]; +static int inputRandomData_int[2000]; + +static double output[10][2000]; +static int output_int[10][2000]; + +/**** Global functions definitions. ****/ +ErrorNumber test_abstract( void ) +{ + ErrorNumber retValue; + TA_RetCode retCode; + TA_ParamHolder *paramHolder; + const TA_FuncHandle *handle; + int i; + const char *xmlArray; + + printf( "Testing Abstract interface\n" ); + + retValue = allocLib(); + if( retValue != TA_TEST_PASS ) + return retValue; + + /* Verify TA_GetLookback. */ + retCode = TA_GetFuncHandle( "STOCH", &handle ); + if( retCode != TA_SUCCESS ) + { + printf( "Can't get the function handle [%d]\n", retCode ); + return TA_ABS_TST_FAIL_GETFUNCHANDLE; + } + + retCode = TA_ParamHolderAlloc( handle, ¶mHolder ); + if( retCode != TA_SUCCESS ) + { + printf( "Can't allocate the param holder [%d]\n", retCode ); + return TA_ABS_TST_FAIL_PARAMHOLDERALLOC; + } + + retValue = testLookback(paramHolder); + if( retValue != TA_SUCCESS ) + { + printf( "testLookback() failed [%d]\n", retValue ); + TA_ParamHolderFree( paramHolder ); + return retValue; + } + + retCode = TA_ParamHolderFree( paramHolder ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_ParamHolderFree failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_PARAMHOLDERFREE; + } + + retValue = freeLib(); + if( retValue != TA_TEST_PASS ) + return retValue; + + /* Call all the TA functions through the abstract interface. */ + retValue = allocLib(); + if( retValue != TA_TEST_PASS ) + return retValue; + + retValue = test_default_calls(); + if( retValue != TA_TEST_PASS ) + { + printf( "TA-Abstract default call failed\n" ); + return retValue; + } + + retValue = freeLib(); + if( retValue != TA_TEST_PASS ) + return retValue; + + /* Verify that the TA_FunctionDescription is null terminated + * and as at least 500 characters (less is guaranteed bad...) + */ + xmlArray = TA_FunctionDescriptionXML(); + for( i=0; i < 1000000; i++ ) + { + if( xmlArray[i] == 0x0 ) + break; + } + + if( i < 500) + { + printf( "TA_FunctionDescriptionXML failed. Size too small.\n" ); + return TA_ABS_TST_FAIL_FUNCTION_DESC_SMALL; + } + + if( i == 1000000 ) + { + printf( "TA_FunctionDescriptionXML failed. Size too large (missing null?).\n" ); + return TA_ABS_TST_FAIL_FUNCTION_DESC_LARGE; + } + + return TA_TEST_PASS; /* Succcess. */ +} + +/**** Local functions definitions. ****/ +static ErrorNumber testLookback( TA_ParamHolder *paramHolder ) +{ + TA_RetCode retCode; + int lookback; + + /* Change the parameters of STOCH and verify that TA_GetLookback respond correctly. */ + retCode = TA_SetOptInputParamInteger( paramHolder, 0, 3 ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_SetOptInputParamInteger call failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_OPTINPUTPARAMINTEGER; + } + + retCode = TA_SetOptInputParamInteger( paramHolder, 1, 4 ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_SetOptInputParamInteger call failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_OPTINPUTPARAMINTEGER; + } + + retCode = TA_SetOptInputParamInteger( paramHolder, 2, (TA_Integer)TA_MAType_SMA ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_SetOptInputParamInteger call failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_OPTINPUTPARAMINTEGER; + } + + retCode = TA_SetOptInputParamInteger( paramHolder, 3, 4 ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_SetOptInputParamInteger call failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_OPTINPUTPARAMINTEGER; + } + + retCode = TA_SetOptInputParamInteger( paramHolder, 4, (TA_Integer)TA_MAType_SMA ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_SetOptInputParamInteger call failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_OPTINPUTPARAMINTEGER; + } + + retCode = TA_GetLookback(paramHolder,&lookback); + if( retCode != TA_SUCCESS ) + { + printf( "TA_GetLookback failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_GETLOOKBACK_CALL_1; + } + + if( lookback != 8 ) + { + printf( "TA_GetLookback failed [%d != 8]\n", lookback ); + return TA_ABS_TST_FAIL_GETLOOKBACK_1; + } + + /* Change one parameter and check again. */ + retCode = TA_SetOptInputParamInteger( paramHolder, 3, 3 ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_SetOptInputParamInteger call failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_OPTINPUTPARAMINTEGER; + } + + retCode = TA_GetLookback(paramHolder,&lookback); + if( retCode != TA_SUCCESS ) + { + printf( "TA_GetLookback failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_GETLOOKBACK_CALL_2; + } + + if( lookback != 7 ) + { + printf( "TA_GetLookback failed [%d != 7]\n", lookback ); + return TA_ABS_TST_FAIL_GETLOOKBACK_2; + } + + return TA_TEST_PASS; +} + + +static void testDefault( const TA_FuncInfo *funcInfo, void *opaqueData ) +{ + static int nbFunctionDone = 0; + ErrorNumber *errorNumber; + errorNumber = (ErrorNumber *)opaqueData; + if( *errorNumber != TA_TEST_PASS ) + return; + +#define CALL(x) { \ + *errorNumber = callWithDefaults( funcInfo->name, x, x##_int, sizeof(x)/sizeof(double) ); \ + if( *errorNumber != TA_TEST_PASS ) { \ + printf( "Failed for [%s][%s]\n", funcInfo->name, #x ); \ + return; \ + } \ +} + /* Do not test value outside the ]0..1[ domain for the "Math" groups. */ + if( (strlen(funcInfo->group) < 4) || + !((tolower(funcInfo->group[0]) == 'm') && + (tolower(funcInfo->group[1]) == 'a') && + (tolower(funcInfo->group[2]) == 't') && + (tolower(funcInfo->group[3]) == 'h'))) + { + CALL( inputNegData ); + CALL( inputZeroData ); + CALL( inputRandFltEpsilon ); + CALL( inputRandDblEpsilon ); + } + + CALL( inputRandomData ); + +#undef CALL + +#define CALL(x) { \ + *errorNumber = callAndProfile( funcInfo->name, x ); \ + if( *errorNumber != TA_TEST_PASS ) { \ + printf( "Failed for [%s][%s]\n", funcInfo->name, #x ); \ + return; \ + } \ +} + if( doExtensiveProfiling /*&& (nbFunctionDone<5)*/ ) + { + nbFunctionDone++; + printf( "%s ", funcInfo->name ); + CALL( PROFILING_100 ); + CALL( PROFILING_500 ); + CALL( PROFILING_1000 ); + CALL( PROFILING_2000 ); + CALL( PROFILING_5000 ); + CALL( PROFILING_8000 ); + CALL( PROFILING_10000 ); + printf( "\n" ); + } +} + +static ErrorNumber callWithDefaults( const char *funcName, const double *input, const int *input_int, int size ) +{ + TA_ParamHolder *paramHolder; + const TA_FuncHandle *handle; + const TA_FuncInfo *funcInfo; + const TA_InputParameterInfo *inputInfo; + const TA_OutputParameterInfo *outputInfo; + + TA_RetCode retCode; + unsigned int i; + int j; + int outBegIdx, outNbElement, lookback; + + retCode = TA_GetFuncHandle( funcName, &handle ); + if( retCode != TA_SUCCESS ) + { + printf( "Can't get the function handle [%d]\n", retCode ); + return TA_ABS_TST_FAIL_GETFUNCHANDLE; + } + + retCode = TA_ParamHolderAlloc( handle, ¶mHolder ); + if( retCode != TA_SUCCESS ) + { + printf( "Can't allocate the param holder [%d]\n", retCode ); + return TA_ABS_TST_FAIL_PARAMHOLDERALLOC; + } + + TA_GetFuncInfo( handle, &funcInfo ); + + for( i=0; i < funcInfo->nbInput; i++ ) + { + TA_GetInputParameterInfo( handle, i, &inputInfo ); + switch(inputInfo->type) + { + case TA_Input_Price: + TA_SetInputParamPricePtr( paramHolder, i, + inputInfo->flags&TA_IN_PRICE_OPEN?input:NULL, + inputInfo->flags&TA_IN_PRICE_HIGH?input:NULL, + inputInfo->flags&TA_IN_PRICE_LOW?input:NULL, + inputInfo->flags&TA_IN_PRICE_CLOSE?input:NULL, + inputInfo->flags&TA_IN_PRICE_VOLUME?input:NULL, NULL ); + break; + case TA_Input_Real: + TA_SetInputParamRealPtr( paramHolder, i, input ); + break; + case TA_Input_Integer: + TA_SetInputParamIntegerPtr( paramHolder, i, input_int ); + break; + } + } + + for( i=0; i < funcInfo->nbOutput; i++ ) + { + TA_GetOutputParameterInfo( handle, i, &outputInfo ); + switch(outputInfo->type) + { + case TA_Output_Real: + TA_SetOutputParamRealPtr(paramHolder,i,&output[i][0]); + for( j=0; j < 2000; j++ ) + output[i][j] = TA_REAL_MIN; + break; + case TA_Output_Integer: + TA_SetOutputParamIntegerPtr(paramHolder,i,&output_int[i][0]); + for( j=0; j < 2000; j++ ) + output_int[i][j] = TA_INTEGER_MIN; + break; + } + } + + /* Do the function call. */ + retCode = TA_CallFunc(paramHolder,0,size-1,&outBegIdx,&outNbElement); + if( retCode != TA_SUCCESS ) + { + printf( "TA_CallFunc() failed zero data test [%d]\n", retCode ); + TA_ParamHolderFree( paramHolder ); + return TA_ABS_TST_FAIL_CALLFUNC_1; + } + + /* Verify consistency with Lookback */ + retCode = TA_GetLookback( paramHolder, &lookback ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_GetLookback() failed zero data test [%d]\n", retCode ); + TA_ParamHolderFree( paramHolder ); + return TA_ABS_TST_FAIL_CALLFUNC_2; + } + + if( outBegIdx != lookback ) + { + printf( "TA_GetLookback() != outBegIdx [%d != %d]\n", lookback, outBegIdx ); + TA_ParamHolderFree( paramHolder ); + return TA_ABS_TST_FAIL_CALLFUNC_3; + } + + /* TODO Add back nan/inf tests. + for( i=0; i < funcInfo->nbOutput; i++ ) + { + switch(outputInfo->type) + { + case TA_Output_Real: + for( j=0; j < outNbElement; j++ ) + { + if( trio_isnan(output[i][j]) || + trio_isinf(output[i][j])) + { + printf( "Failed for output[%d][%d] = %e\n", i, j, output[i][j] ); + return TA_ABS_TST_FAIL_INVALID_OUTPUT; + } + } + break; + case TA_Output_Integer: + break; + } + }*/ + + /* Do another function call where startIdx == endIdx == 0. + * In that case, outBegIdx should ALWAYS be zero. + */ + retCode = TA_CallFunc(paramHolder,0,0,&outBegIdx,&outNbElement); + if( retCode != TA_SUCCESS ) + { + printf( "TA_CallFunc() failed data test 4 [%d]\n", retCode ); + TA_ParamHolderFree( paramHolder ); + return TA_ABS_TST_FAIL_CALLFUNC_4; + } + + if( outBegIdx != 0 ) + { + printf( "failed outBegIdx=%d when startIdx==endIdx==0\n", outBegIdx ); + TA_ParamHolderFree( paramHolder ); + return TA_ABS_TST_FAIL_STARTEND_ZERO; + } + + retCode = TA_ParamHolderFree( paramHolder ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_ParamHolderFree failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_PARAMHOLDERFREE; + } + + return TA_TEST_PASS; +} + +static ErrorNumber test_default_calls(void) +{ + ErrorNumber errNumber; + unsigned int i; + unsigned int sign; + double tempDouble; + + errNumber = TA_TEST_PASS; + + for( i=0; i < sizeof(inputNegData)/sizeof(double); i++ ) + { + inputNegData[i] = -((double)((int)i)); + inputNegData_int[i] = -(int)i; + } + + for( i=0; i < sizeof(inputZeroData)/sizeof(double); i++ ) + { + inputZeroData[i] = 0.0; + inputZeroData_int[i] = (int)inputZeroData[i]; + } + + for( i=0; i < sizeof(inputRandomData)/sizeof(double); i++ ) + { + /* Make 100% sure input range is ]0..1[ */ + tempDouble = (double)rand() / ((double)(RAND_MAX)+(double)(1)); + while( (tempDouble <= 0.0) || (tempDouble >= 1.0) ) + { + tempDouble = (double)rand() / ((double)(RAND_MAX)+(double)(1)); + } + inputRandomData[i] = tempDouble; + inputRandomData_int[i] = (int)inputRandomData[i]; + } + + for( i=0; i < sizeof(inputRandFltEpsilon)/sizeof(double); i++ ) + { + sign= (unsigned int)rand()%2; + inputRandFltEpsilon[i] = (sign?1.0:-1.0)*(FLT_EPSILON); + inputRandFltEpsilon_int[i] = sign?TA_INTEGER_MIN:TA_INTEGER_MAX; + } + + for( i=0; i < sizeof(inputRandFltEpsilon)/sizeof(double); i++ ) + { + sign= (unsigned int)rand()%2; + inputRandFltEpsilon[i] = (sign?1.0:-1.0)*(DBL_EPSILON); + inputRandFltEpsilon_int[i] = sign?1:-1; + } + + if( doExtensiveProfiling ) + { + printf( "\n[PROFILING START]\n" ); + } + + TA_ForEachFunc( testDefault, &errNumber ); + + if( doExtensiveProfiling ) + { + printf( "[PROFILING END]\n" ); + } + + + return errNumber; +} + +static ErrorNumber callAndProfile( const char *funcName, ProfilingType type ) +{ + TA_ParamHolder *paramHolder; + const TA_FuncHandle *handle; + const TA_FuncInfo *funcInfo; + const TA_InputParameterInfo *inputInfo; + const TA_OutputParameterInfo *outputInfo; + + TA_RetCode retCode; + int h, i, j, k; + int outBegIdx, outNbElement; + + /* Variables to control iteration and corresponding input size */ + int nbInnerLoop, nbOuterLoop; + int stepSize; + int inputSize; + + /* Variables measuring the execution time */ +#ifdef WIN32 + LARGE_INTEGER startClock; + LARGE_INTEGER endClock; +#else + clock_t startClock; + clock_t endClock; +#endif + double clockDelta; + int nbProfiledCallLocal; + double timeInProfiledCallLocal; + double worstProfiledCallLocal; + + nbProfiledCallLocal = 0; + timeInProfiledCallLocal = 0.0; + worstProfiledCallLocal = 0.0; + nbInnerLoop = nbOuterLoop = stepSize = inputSize = 0; + + switch( type ) + { + case PROFILING_10000: + nbInnerLoop = 1; + nbOuterLoop = 100; + stepSize = 10000; + inputSize = 10000; + break; + case PROFILING_8000: + nbInnerLoop = 2; + nbOuterLoop = 50; + stepSize = 2000; + inputSize = 8000; + break; + case PROFILING_5000: + nbInnerLoop = 2; + nbOuterLoop = 50; + stepSize = 5000; + inputSize = 5000; + break; + case PROFILING_2000: + nbInnerLoop = 5; + nbOuterLoop = 20; + stepSize = 2000; + inputSize = 2000; + break; + case PROFILING_1000: + nbInnerLoop = 10; + nbOuterLoop = 10; + stepSize = 1000; + inputSize = 1000; + break; + case PROFILING_500: + nbInnerLoop = 20; + nbOuterLoop = 5; + stepSize = 500; + inputSize = 500; + break; + case PROFILING_100: + nbInnerLoop = 100; + nbOuterLoop = 1; + stepSize = 100; + inputSize = 100; + break; + } + + retCode = TA_GetFuncHandle( funcName, &handle ); + if( retCode != TA_SUCCESS ) + { + printf( "Can't get the function handle [%d]\n", retCode ); + return TA_ABS_TST_FAIL_GETFUNCHANDLE; + } + + retCode = TA_ParamHolderAlloc( handle, ¶mHolder ); + if( retCode != TA_SUCCESS ) + { + printf( "Can't allocate the param holder [%d]\n", retCode ); + return TA_ABS_TST_FAIL_PARAMHOLDERALLOC; + } + + TA_GetFuncInfo( handle, &funcInfo ); + + for( i=0; i < (int)funcInfo->nbOutput; i++ ) + { + TA_GetOutputParameterInfo( handle, i, &outputInfo ); + switch(outputInfo->type) + { + case TA_Output_Real: + TA_SetOutputParamRealPtr(paramHolder,i,&output[i][0]); + for( j=0; j < 2000; j++ ) + output[i][j] = TA_REAL_MIN; + break; + case TA_Output_Integer: + TA_SetOutputParamIntegerPtr(paramHolder,i,&output_int[i][0]); + for( j=0; j < 2000; j++ ) + output_int[i][j] = TA_INTEGER_MIN; + break; + } + } + + for( h=0; h < 2; h++ ) + { + for( i=0; i < nbOuterLoop; i++ ) + { + for( j=0; j < nbInnerLoop; j++ ) + { + /* Prepare input. */ + for( k=0; k < (int)funcInfo->nbInput; k++ ) + { + TA_GetInputParameterInfo( handle, k, &inputInfo ); + switch(inputInfo->type) + { + case TA_Input_Price: + TA_SetInputParamPricePtr( paramHolder, k, + inputInfo->flags&TA_IN_PRICE_OPEN?&gDataOpen[j*stepSize]:NULL, + inputInfo->flags&TA_IN_PRICE_HIGH?&gDataHigh[j*stepSize]:NULL, + inputInfo->flags&TA_IN_PRICE_LOW?&gDataLow[j*stepSize]:NULL, + inputInfo->flags&TA_IN_PRICE_CLOSE?&gDataClose[j*stepSize]:NULL, + inputInfo->flags&TA_IN_PRICE_VOLUME?&gDataClose[j*stepSize]:NULL, NULL ); + break; + case TA_Input_Real: + TA_SetInputParamRealPtr( paramHolder, k, &gDataClose[j*stepSize] ); + break; + case TA_Input_Integer: + printf( "\nError: Integer input not yet supported for profiling.\n" ); + return TA_ABS_TST_FAIL_CALLFUNC_1; + break; + } + } + + #ifdef WIN32 + QueryPerformanceCounter(&startClock); + #else + startClock = clock(); + #endif + + /* Do the function call. */ + retCode = TA_CallFunc(paramHolder,0,inputSize-1,&outBegIdx,&outNbElement); + if( retCode != TA_SUCCESS ) + { + printf( "TA_CallFunc() failed zero data test [%d]\n", retCode ); + TA_ParamHolderFree( paramHolder ); + return TA_ABS_TST_FAIL_CALLFUNC_1; + } + + #ifdef WIN32 + QueryPerformanceCounter(&endClock); + clockDelta = (double)((__int64)endClock.QuadPart - (__int64) startClock.QuadPart); + #else + endClock = clock(); + clockDelta = (double)(endClock - startClock); + #endif + + /* Setup global profiling info. */ + if( clockDelta <= 0 ) + { + printf( "Error: Insufficient timer precision to perform benchmarking on this platform.\n" ); + return TA_ABS_TST_FAIL_CALLFUNC_1; + } + else + { + if( clockDelta > worstProfiledCall ) + worstProfiledCall = clockDelta; + timeInProfiledCall += clockDelta; + nbProfiledCall++; + } + + /* Setup local profiling info for this particular function. */ + if( clockDelta > worstProfiledCallLocal ) + worstProfiledCallLocal = clockDelta; + timeInProfiledCallLocal += clockDelta; + nbProfiledCallLocal++; + } + } + } + + /* Output statistic (remove worst call, average the others. */ + printf( "%g ", (timeInProfiledCallLocal-worstProfiledCallLocal)/(double)(nbProfiledCallLocal-1)); + + retCode = TA_ParamHolderFree( paramHolder ); + if( retCode != TA_SUCCESS ) + { + printf( "TA_ParamHolderFree failed [%d]\n", retCode ); + return TA_ABS_TST_FAIL_PARAMHOLDERFREE; + } + + return TA_TEST_PASS; +} diff --git a/src/tools/ta_regtest/test_data.c b/src/tools/ta_regtest/test_data.c new file mode 100644 index 000000000..c4400e043 --- /dev/null +++ b/src/tools/ta_regtest/test_data.c @@ -0,0 +1,145 @@ +/* Input price data used to do regression tests. */ +#include "ta_libc.h" + +/* Market data used for profiling (10000 price bars). */ +#include "ta_gDataOpen.c" +#include "ta_gDataHigh.c" +#include "ta_gDataLow.c" +#include "ta_gDataClose.c" + +/* Market data used for regression tests (252 price bars). */ +TA_Real TA_SREF_open_daily_ref_0_PRIV[252] = {92.500000,91.500000,95.155000,93.970000,95.500000,94.500000,95.000000,91.500000,91.815000,91.125000,93.875000, +97.500000,98.815000,92.000000,91.125000,91.875000,93.405000,89.750000,89.345000,92.250000,89.780000, +87.940000,87.595000,85.220000,83.500000,83.500000,81.250000,85.125000,88.125000,87.500000,85.250000, +86.000000,87.190000,86.125000,89.000000,88.625000,86.000000,85.500000,84.750000,85.250000,84.250000, +86.750000,86.940000,89.315000,89.940000,90.815000,91.190000,91.345000,89.595000,91.000000,89.750000, +88.750000,88.315000,84.345000,83.500000,84.000000,86.000000,85.530000,87.500000,88.500000,90.000000, +88.655000,89.500000,91.565000,92.000000,93.000000,92.815000,91.750000,92.000000,91.375000,89.750000, +88.750000,85.440000,83.500000,84.875000,98.625000,96.690000,102.375000,106.000000,104.625000,102.500000, +104.250000,104.000000,106.125000,106.065000,105.940000,105.625000,108.625000,110.250000,110.565000,117.000000, +120.750000,118.000000,119.125000,119.125000,117.815000,116.375000,115.155000,111.250000,111.500000,116.690000, +116.000000,113.620000,111.750000,114.560000,113.620000,118.120000,119.870000,116.620000,115.870000,115.060000, +115.870000,117.500000,119.870000,119.250000,120.190000,122.870000,123.870000,122.250000,123.120000,123.310000, +124.000000,123.000000,124.810000,130.000000,130.880000,132.500000,131.000000,132.500000,134.000000,137.440000, +135.750000,138.310000,138.000000,136.380000,136.500000,132.000000,127.500000,127.620000,124.000000,123.620000, +125.000000,126.370000,126.250000,125.940000,124.000000,122.750000,120.000000,120.000000,122.000000,123.620000, +121.500000,120.120000,123.750000,122.750000,125.000000,128.500000,128.380000,123.870000,124.370000,122.750000, +123.370000,122.000000,122.620000,125.000000,124.250000,124.370000,125.620000,126.500000,128.380000,128.880000, +131.500000,132.500000,137.500000,134.630000,132.000000,134.000000,132.000000,131.380000,126.500000,128.750000, +127.190000,127.500000,120.500000,126.620000,123.000000,122.060000,121.000000,121.000000,118.000000,122.000000, +122.250000,119.120000,115.000000,113.500000,114.000000,110.810000,106.500000,106.440000,108.000000,107.000000, +108.620000,93.000000,93.750000,94.250000,94.870000,95.500000,94.500000,97.000000,98.500000,96.750000, +95.870000,94.440000,92.750000,90.500000,95.060000,94.620000,97.500000,96.000000,96.000000,94.620000, +94.870000,94.000000,99.000000,105.500000,108.810000,105.000000,105.940000,104.940000,103.690000,102.560000, +103.440000,109.810000,113.000000,117.000000,116.250000,120.500000,111.620000,108.120000,110.190000,107.750000, +108.000000,110.690000,109.060000,108.500000,109.870000,109.120000,109.690000,109.560000,110.440000,109.690000, +109.190000}; + +TA_Real TA_SREF_high_daily_ref_0_PRIV[252] = {93.250000,94.940000,96.375000,96.190000,96.000000,94.720000,95.000000,93.720000,92.470000,92.750000,96.250000, +99.625000,99.125000,92.750000,91.315000,93.250000,93.405000,90.655000,91.970000,92.250000,90.345000, +88.500000,88.250000,85.500000,84.440000,84.750000,84.440000,89.405000,88.125000,89.125000,87.155000, +87.250000,87.375000,88.970000,90.000000,89.845000,86.970000,85.940000,84.750000,85.470000,84.470000, +88.500000,89.470000,90.000000,92.440000,91.440000,92.970000,91.720000,91.155000,91.750000,90.000000, +88.875000,89.000000,85.250000,83.815000,85.250000,86.625000,87.940000,89.375000,90.625000,90.750000, +88.845000,91.970000,93.375000,93.815000,94.030000,94.030000,91.815000,92.000000,91.940000,89.750000, +88.750000,86.155000,84.875000,85.940000,99.375000,103.280000,105.375000,107.625000,105.250000,104.500000, +105.500000,106.125000,107.940000,106.250000,107.000000,108.750000,110.940000,110.940000,114.220000,123.000000, +121.750000,119.815000,120.315000,119.375000,118.190000,116.690000,115.345000,113.000000,118.315000,116.870000, +116.750000,113.870000,114.620000,115.310000,116.000000,121.690000,119.870000,120.870000,116.750000,116.500000, +116.000000,118.310000,121.500000,122.000000,121.440000,125.750000,127.750000,124.190000,124.440000,125.750000, +124.690000,125.310000,132.000000,131.310000,132.250000,133.880000,133.500000,135.500000,137.440000,138.690000, +139.190000,138.500000,138.130000,137.500000,138.880000,132.130000,129.750000,128.500000,125.440000,125.120000, +126.500000,128.690000,126.620000,126.690000,126.000000,123.120000,121.870000,124.000000,127.000000,124.440000, +122.500000,123.750000,123.810000,124.500000,127.870000,128.560000,129.630000,124.870000,124.370000,124.870000, +123.620000,124.060000,125.870000,125.190000,125.620000,126.000000,128.500000,126.750000,129.750000,132.690000, +133.940000,136.500000,137.690000,135.560000,133.560000,135.000000,132.380000,131.440000,130.880000,129.630000, +127.250000,127.810000,125.000000,126.810000,124.750000,122.810000,122.250000,121.060000,120.000000,123.250000, +122.750000,119.190000,115.060000,116.690000,114.870000,110.870000,107.250000,108.870000,109.000000,108.500000, +113.060000,93.000000,94.620000,95.120000,96.000000,95.560000,95.310000,99.000000,98.810000,96.810000, +95.940000,94.440000,92.940000,93.940000,95.500000,97.060000,97.500000,96.250000,96.370000,95.000000, +94.870000,98.250000,105.120000,108.440000,109.870000,105.000000,106.000000,104.940000,104.500000,104.440000, +106.310000,112.870000,116.500000,119.190000,121.000000,122.120000,111.940000,112.750000,110.190000,107.940000, +109.690000,111.060000,110.440000,110.120000,110.310000,110.440000,110.000000,110.750000,110.500000,110.500000, +109.500000}; + +TA_Real TA_SREF_low_daily_ref_0_PRIV[252] = {90.750000,91.405000,94.250000,93.500000,92.815000,93.500000,92.000000,89.750000,89.440000,90.625000,92.750000, +96.315000,96.030000,88.815000,86.750000,90.940000,88.905000,88.780000,89.250000,89.750000,87.500000, +86.530000,84.625000,82.280000,81.565000,80.875000,81.250000,84.065000,85.595000,85.970000,84.405000, +85.095000,85.500000,85.530000,87.875000,86.565000,84.655000,83.250000,82.565000,83.440000,82.530000, +85.065000,86.875000,88.530000,89.280000,90.125000,90.750000,89.000000,88.565000,90.095000,89.000000, +86.470000,84.000000,83.315000,82.000000,83.250000,84.750000,85.280000,87.190000,88.440000,88.250000, +87.345000,89.280000,91.095000,89.530000,91.155000,92.000000,90.530000,89.970000,88.815000,86.750000, +85.065000,82.030000,81.500000,82.565000,96.345000,96.470000,101.155000,104.250000,101.750000,101.720000, +101.720000,103.155000,105.690000,103.655000,104.000000,105.530000,108.530000,108.750000,107.750000,117.000000, +118.000000,116.000000,118.500000,116.530000,116.250000,114.595000,110.875000,110.500000,110.720000,112.620000, +114.190000,111.190000,109.440000,111.560000,112.440000,117.500000,116.060000,116.560000,113.310000,112.560000, +114.000000,114.750000,118.870000,119.000000,119.750000,122.620000,123.000000,121.750000,121.560000,123.120000, +122.190000,122.750000,124.370000,128.000000,129.500000,130.810000,130.630000,132.130000,133.880000,135.380000, +135.750000,136.190000,134.500000,135.380000,133.690000,126.060000,126.870000,123.500000,122.620000,122.750000, +123.560000,125.810000,124.620000,124.370000,121.810000,118.190000,118.060000,117.560000,121.000000,121.120000, +118.940000,119.810000,121.000000,122.000000,124.500000,126.560000,123.500000,121.250000,121.060000,122.310000, +121.000000,120.870000,122.060000,122.750000,122.690000,122.870000,125.500000,124.250000,128.000000,128.380000, +130.690000,131.630000,134.380000,132.000000,131.940000,131.940000,129.560000,123.750000,126.000000,126.250000, +124.370000,121.440000,120.440000,121.370000,121.690000,120.000000,119.620000,115.500000,116.750000,119.060000, +119.060000,115.060000,111.060000,113.120000,110.000000,105.000000,104.690000,103.870000,104.690000,105.440000, +107.000000,89.000000,92.500000,92.120000,94.620000,92.810000,94.250000,96.250000,96.370000,93.690000, +93.500000,90.000000,90.190000,90.500000,92.120000,94.120000,94.870000,93.000000,93.870000,93.000000, +92.620000,93.560000,98.370000,104.440000,106.000000,101.810000,104.120000,103.370000,102.120000,102.250000, +103.370000,107.940000,112.500000,115.440000,115.500000,112.250000,107.560000,106.560000,106.870000,104.500000, +105.750000,108.620000,107.750000,108.060000,108.000000,108.190000,108.120000,109.060000,108.750000,108.560000, +106.620000}; + +TA_Real TA_SREF_close_daily_ref_0_PRIV[252] = {91.500000,94.815000,94.375000,95.095000,93.780000,94.625000,92.530000,92.750000,90.315000,92.470000,96.125000, +97.250000,98.500000,89.875000,91.000000,92.815000,89.155000,89.345000,91.625000,89.875000,88.375000, +87.625000,84.780000,83.000000,83.500000,81.375000,84.440000,89.250000,86.375000,86.250000,85.250000, +87.125000,85.815000,88.970000,88.470000,86.875000,86.815000,84.875000,84.190000,83.875000,83.375000, +85.500000,89.190000,89.440000,91.095000,90.750000,91.440000,89.000000,91.000000,90.500000,89.030000, +88.815000,84.280000,83.500000,82.690000,84.750000,85.655000,86.190000,88.940000,89.280000,88.625000, +88.500000,91.970000,91.500000,93.250000,93.500000,93.155000,91.720000,90.000000,89.690000,88.875000, +85.190000,83.375000,84.875000,85.940000,97.250000,99.875000,104.940000,106.000000,102.500000,102.405000, +104.595000,106.125000,106.000000,106.065000,104.625000,108.625000,109.315000,110.500000,112.750000,123.000000, +119.625000,118.750000,119.250000,117.940000,116.440000,115.190000,111.875000,110.595000,118.125000,116.000000, +116.000000,112.000000,113.750000,112.940000,116.000000,120.500000,116.620000,117.000000,115.250000,114.310000, +115.500000,115.870000,120.690000,120.190000,120.750000,124.750000,123.370000,122.940000,122.560000,123.120000, +122.560000,124.620000,129.250000,131.000000,132.250000,131.000000,132.810000,134.000000,137.380000,137.810000, +137.880000,137.250000,136.310000,136.250000,134.630000,128.250000,129.000000,123.870000,124.810000,123.000000, +126.250000,128.380000,125.370000,125.690000,122.250000,119.370000,118.500000,123.190000,123.500000,122.190000, +119.310000,123.310000,121.120000,123.370000,127.370000,128.500000,123.870000,122.940000,121.750000,124.440000, +122.000000,122.370000,122.940000,124.000000,123.190000,124.560000,127.250000,125.870000,128.860000,132.000000, +130.750000,134.750000,135.000000,132.380000,133.310000,131.940000,130.000000,125.370000,130.130000,127.120000, +125.190000,122.000000,125.000000,123.000000,123.500000,120.060000,121.000000,117.750000,119.870000,122.000000, +119.190000,116.370000,113.500000,114.250000,110.000000,105.060000,107.000000,107.870000,107.000000,107.120000, +107.000000,91.000000,93.940000,93.870000,95.500000,93.000000,94.940000,98.250000,96.750000,94.810000, +94.370000,91.560000,90.250000,93.940000,93.620000,97.000000,95.000000,95.870000,94.060000,94.620000, +93.750000,98.000000,103.940000,107.870000,106.060000,104.500000,105.000000,104.190000,103.060000,103.420000, +105.270000,111.870000,116.000000,116.620000,118.280000,113.370000,109.000000,109.700000,109.250000,107.000000, +109.190000,110.000000,109.200000,110.120000,108.000000,108.620000,109.750000,109.810000,109.000000,108.750000, +107.870000}; + +TA_Real TA_SREF_volume_daily_ref_0_PRIV[252] = {4077500,4955900,4775300,4155300,4593100,3631300,3382800,4954200,4500000,3397500,4204500, +6321400,10203600,19043900,11692000,9553300,8920300,5970900,5062300,3705600,5865600, +5603000,5811900,8483800,5995200,5408800,5430500,6283800,5834800,4515500,4493300, +4346100,3700300,4600200,4557200,4323600,5237500,7404100,4798400,4372800,3872300, +10750800,5804800,3785500,5014800,3507700,4298800,4842500,3952200,3304700,3462000, +7253900,9753100,5953000,5011700,5910800,4916900,4135000,4054200,3735300,2921900, +2658400,4624400,4372200,5831600,4268600,3059200,4495500,3425000,3630800,4168100, +5966900,7692800,7362500,6581300,19587700,10378600,9334700,10467200,5671400,5645000, +4518600,4519500,5569700,4239700,4175300,4995300,4776600,4190000,6035300,12168900, +9040800,5780300,4320800,3899100,3221400,3455500,4304200,4703900,8316300,10553900, +6384800,7163300,7007800,5114100,5263800,6666100,7398400,5575000,4852300,4298100, +4900500,4887700,6964800,4679200,9165000,6469800,6792000,4423800,5231900,4565600, +6235200,5225900,8261400,5912500,3545600,5714500,6653900,6094500,4799200,5050800, +5648900,4726300,5585600,5124800,7630200,14311600,8793600,8874200,6966600,5525500, +6515500,5291900,5711700,4327700,4568000,6859200,5757500,7367000,6144100,4052700, +5849700,5544700,5032200,4400600,4894100,5140000,6610900,7585200,5963100,6045500, +8443300,6464700,6248300,4357200,4774700,6216900,6266900,5584800,5284500,7554500, +7209500,8424800,5094500,4443600,4591100,5658400,6094100,14862200,7544700,6985600, +8093000,7590000,7451300,7078000,7105300,8778800,6643900,10563900,7043100,6438900, +8057700,14240000,17872300,7831100,8277700,15017800,14183300,13921100,9683000,9187300, +11380500,69447300,26673600,13768400,11371600,9872200,9450500,11083300,9552800,11108400, +10374200,16701900,13741900,8523600,9551900,8680500,7151700,9673100,6264700,8541600, +8358000,18720800,19683100,13682500,10668100,9710600,3113100,5682000,5763600,5340000, +6220800,14680500,9933000,11329500,8145300,16644700,12593800,7138100,7442300,9442300, +7123600,7680600,4839800,4775500,4008800,4533600,3741100,4084800,2685200,3438000, +2870500}; + diff --git a/src/tools/ta_regtest/test_internals.c b/src/tools/ta_regtest/test_internals.c new file mode 100644 index 000000000..00ba471be --- /dev/null +++ b/src/tools/ta_regtest/test_internals.c @@ -0,0 +1,274 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 070401 MF First version. + * 050104 MF Add TA_RegressionTest calls. + * 080605 MF Add tests for pseudo-random generator. + * 091705 MF Add tests for TA_AddTimeToTimestamp (Fix#1293953). + * 110906 MF Remove pseudo-random to eliminate dependencies. + */ + +/* Description: + * Regression testing of some internal utility like: + * - collections: List/Stack/Circular buffer. + * - Memory allocation mechanism. + * etc... + */ + +/**** Headers ****/ +#include +#include + +#include "ta_test_priv.h" +#include "ta_memory.h" +#include "ta_defs.h" +#include "ta_common.h" + + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +/* None */ + +/**** Global variables definitions. ****/ +/* None */ + +/**** Local declarations. ****/ +/* None */ + +/**** Local functions declarations. ****/ +static ErrorNumber testCircularBuffer( void ); + +static TA_RetCode circBufferFillFrom0ToSize( int size, int *buffer ); + + +/**** Local variables definitions. ****/ +/* None */ + +/**** Global functions definitions. ****/ +/* None */ + +/**** Local functions definitions. ****/ +ErrorNumber test_internals( void ) +{ + ErrorNumber retValue; + + printf( "Testing utility functions\n" ); + + retValue = testCircularBuffer(); + if( retValue != TA_TEST_PASS ) + { + printf( "\nFailed: Circular buffer tests (%d)\n", retValue ); + return retValue; + } + + return TA_TEST_PASS; /* Success. */ +} + +static ErrorNumber testCircularBuffer( void ) +{ + TA_RetCode retCode; + int i; + int buffer[20]; + ErrorNumber retValue; + + /* Initialize the library. */ + retValue = allocLib(); + if( retValue != TA_TEST_PASS ) + { + printf( "\nFailed: Can't initialize the library\n" ); + return retValue; + } + + /* The following function is supose to fill + * the buffer with the value 0 to 8 sequentialy, + * if somehow it is not 0 to 8, there is a bug! + */ + memset( buffer, 0xFF, sizeof(buffer) ); + retCode = circBufferFillFrom0ToSize( 1, buffer ); + if( retCode != TA_SUCCESS ) + { + printf( "\nFailed circular buffer test RetCode = %d\n", retCode ); + return TA_INTERNAL_CIRC_BUFF_FAIL_0; + } + for( i=0; i < (1+3); i++ ) + { + if( buffer[i] != i ) + { + printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i ); + return TA_INTERNAL_CIRC_BUFF_FAIL_1; + } + } + + memset( buffer, 0xFF, sizeof(buffer) ); + retCode = circBufferFillFrom0ToSize( 2, buffer ); + if( retCode != TA_SUCCESS ) + { + printf( "\nFailed circular buffer test RetCode = %d\n", retCode ); + return TA_INTERNAL_CIRC_BUFF_FAIL_0; + } + for( i=0; i < (2+3); i++ ) + { + if( buffer[i] != i ) + { + printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i ); + return TA_INTERNAL_CIRC_BUFF_FAIL_2; + } + } + + memset( buffer, 0xFF, sizeof(buffer) ); + retCode = circBufferFillFrom0ToSize( 3, buffer ); + if( retCode != TA_SUCCESS ) + { + printf( "\nFailed circular buffer test RetCode = %d\n", retCode ); + return TA_INTERNAL_CIRC_BUFF_FAIL_0; + } + for( i=0; i < (3+3); i++ ) + { + if( buffer[i] != i ) + { + printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i ); + return TA_INTERNAL_CIRC_BUFF_FAIL_3; + } + } + + memset( buffer, 0xFF, sizeof(buffer) ); + retCode = circBufferFillFrom0ToSize( 4, buffer ); + if( retCode != TA_SUCCESS ) + { + printf( "\nFailed circular buffer test RetCode = %d\n", retCode ); + return TA_INTERNAL_CIRC_BUFF_FAIL_0; + } + for( i=0; i < (4+3); i++ ) + { + if( buffer[i] != i ) + { + printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i ); + return TA_INTERNAL_CIRC_BUFF_FAIL_4; + } + } + + memset( buffer, 0xFF, sizeof(buffer) ); + retCode = circBufferFillFrom0ToSize( 5, buffer ); + if( retCode != TA_SUCCESS ) + { + printf( "\nFailed circular buffer test RetCode = %d\n", retCode ); + return TA_INTERNAL_CIRC_BUFF_FAIL_0; + } + for( i=0; i < (5+3); i++ ) + { + if( buffer[i] != i ) + { + printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i ); + return TA_INTERNAL_CIRC_BUFF_FAIL_5; + } + } + + memset( buffer, 0xFF, sizeof(buffer) ); + retCode = circBufferFillFrom0ToSize( 6, buffer ); + if( retCode != TA_SUCCESS ) + { + printf( "\nFailed circular buffer test RetCode = %d\n", retCode ); + return TA_INTERNAL_CIRC_BUFF_FAIL_0; + } + for( i=0; i < (6+3); i++ ) + { + if( buffer[i] != i ) + { + printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i ); + return TA_INTERNAL_CIRC_BUFF_FAIL_6; + } + } + + retValue = freeLib(); + if( retValue != TA_TEST_PASS ) + return retValue; + + return TA_TEST_PASS; /* Success. */ +} + +/* This function is suppose to fill the buffer + * with values going from 0 to 'size'. + * The filling is done using the CIRCBUF macros. + */ +static TA_RetCode circBufferFillFrom0ToSize( int size, int *buffer ) +{ + CIRCBUF_PROLOG(MyBuf,int,4); + int i, value; + int outIdx; + + CIRCBUF_INIT(MyBuf,int,size); + + outIdx = 0; + + // 1st Loop: Fill MyBuf with initial values + // (must be done). + value = 0; + for( i=0; i < size; i++ ) + { + MyBuf[MyBuf_Idx] = value++; + CIRCBUF_NEXT(MyBuf); + } + + // 2nd Loop: Get and Add subsequent values + // in MyBuf (optional) + for( i=0; i < 3; i++ ) + { + buffer[outIdx++] = MyBuf[MyBuf_Idx]; + MyBuf[MyBuf_Idx] = value++; + CIRCBUF_NEXT(MyBuf); + } + + // 3rd Loop: Empty MyBuf (optional) + for( i=0; i < size; i++ ) + { + buffer[outIdx++] = MyBuf[MyBuf_Idx]; + CIRCBUF_NEXT(MyBuf); + } + + CIRCBUF_DESTROY(MyBuf); + + return TA_SUCCESS; +} diff --git a/src/tools/ta_regtest/test_util.c b/src/tools/ta_regtest/test_util.c new file mode 100644 index 000000000..b32757f86 --- /dev/null +++ b/src/tools/ta_regtest/test_util.c @@ -0,0 +1,1338 @@ +/* TA-LIB Copyright (c) 1999-2007, Mario Fortier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * - Neither name of author nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* List of contributors: + * + * Initial Name/description + * ------------------------------------------------------------------- + * MF Mario Fortier + * + * + * Change history: + * + * MMDDYY BY Description + * ------------------------------------------------------------------- + * 112400 MF First version. + * + */ + +/* Description: + * Provide utility function internally used in ta_regtest only. + */ + +/**** Headers ****/ +#ifdef WIN32 + #include "windows.h" +#endif + +#include +#include +#include +#include +#include "ta_test_priv.h" +#include "ta_utility.h" +#include "ta_memory.h" + + +/**** External functions declarations. ****/ +/* None */ + +/**** External variables declarations. ****/ +extern int nbProfiledCall; +extern double timeInProfiledCall; +extern double worstProfiledCall; +extern int insufficientClockPrecision; + +/**** Global variables definitions. ****/ + +/* Global temporary buffers used while testing. */ +#define RESV_PATTERN_MEMGUARD_1 (2.4789205E-150) +#define RESV_PATTERN_MEMGUARD_2 (4.2302468E-165) + +#define RESV_PATTERN_PREFIX (9.1349043E-200) +#define RESV_PATTERN_SUFFIX (8.1489031E-158) +#define RESV_PATTERN_IMPROBABLE (-2.849284E-199) + +#define RESV_PATTERN_PREFIX_INT (TA_INTEGER_DEFAULT) +#define RESV_PATTERN_SUFFIX_INT (TA_INTEGER_DEFAULT) +#define RESV_PATTERN_IMPROBABLE_INT (TA_INTEGER_DEFAULT) + +#define TA_BUF_PREFIX 100 +#define TA_BUF_SUFFIX 100 +#define TA_BUF_SIZE (TA_BUF_PREFIX+MAX_NB_TEST_ELEMENT+TA_BUF_SUFFIX) + +#define TA_NB_OUT 3 +#define TA_NB_IN 1 +#define TA_NB_OUT_IN (TA_NB_OUT+TA_NB_IN) + +TA_Real memoryGuard1 = RESV_PATTERN_MEMGUARD_1; /* Magic number to detect problem. */ +TA_Real buf[NB_GLOBAL_BUFFER][TA_NB_OUT_IN][TA_BUF_SIZE]; /* The global buffers. */ +TA_Real memoryGuard2 = RESV_PATTERN_MEMGUARD_2; /* Magic number to detect problem. */ + +#define NB_TOTAL_ELEMENTS (sizeof(buf)/sizeof(TA_Real)) + +TestBuffer gBuffer[5]; /* See initGlobalBuffer. */ + +/**** Local declarations. ****/ +/* None */ + +/**** Local functions declarations. ****/ +static ErrorNumber doRangeTestFixSize( RangeTestFunction testFunction, + void *opaqueData, + TA_Integer refOutBeg, + TA_Integer refOutNbElement, + TA_Integer refLookback, + const TA_Real *refBuffer, + const TA_Integer *refBufferInt, + TA_FuncUnstId unstId, + TA_Integer fixSize, + unsigned int outputNb, + unsigned int integerTolerance ); + +static int dataWithinReasonableRange( TA_Real val1, TA_Real val2, + unsigned int outputPosition, + TA_FuncUnstId unstId, + unsigned int integerTolerance ); + +static ErrorNumber doRangeTestForOneOutput( RangeTestFunction testFunction, + TA_FuncUnstId unstId, + void *opaqueData, + unsigned int outputNb, + unsigned int integerTolerance ); + +static TA_RetCode CallTestFunction( RangeTestFunction testFunction, + TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ); + +/**** Local variables definitions. ****/ +/* None */ + +/**** Global functions definitions. ****/ +static int ta_g_val = 0; +static const char *ta_g_wheel = "-\\|/"; +void showFeedback() +{ + if( ta_g_wheel[ta_g_val] == '\0' ) + ta_g_val = 0; + putchar('\b'); + putchar(ta_g_wheel[ta_g_val]); + fflush(stdout); + ta_g_val++; +} + +void hideFeedback() +{ + putchar('\b'); + fflush(stdout); + ta_g_val = 0; +} + +ErrorNumber allocLib() +{ + TA_RetCode retCode; + + /* Initialize the library. */ + retCode = TA_Initialize(); + if( retCode != TA_SUCCESS ) + { + printf( "TA_Initialize failed [%d]\n", retCode ); + return TA_TESTUTIL_INIT_FAILED; + } + + return TA_TEST_PASS; +} + +ErrorNumber freeLib() +{ + TA_RetCode retCode; + + /* For testing purpose */ + /* TA_FATAL_RET( "Test again", 100, 200, 0 ); */ + + retCode = TA_Shutdown(); + if( retCode != TA_SUCCESS ) + { + printf( "TA_Shutdown failed [%d]\n", retCode ); + return TA_TESTUTIL_SHUTDOWN_FAILED; + } + + return TA_TEST_PASS; +} + +void reportError( const char *str, TA_RetCode retCode ) +{ + TA_RetCodeInfo retCodeInfo; + + TA_SetRetCodeInfo( retCode, &retCodeInfo ); + + printf( "%s,%d==%s\n", str, retCode, retCodeInfo.enumStr ); + printf( "[%s]\n", retCodeInfo.infoStr ); +} + +/* Need to be called only once. */ +void initGlobalBuffer( void ) +{ + gBuffer[0].in = &buf[0][0][TA_BUF_PREFIX]; + gBuffer[0].out0 = &buf[0][1][TA_BUF_PREFIX]; + gBuffer[0].out1 = &buf[0][2][TA_BUF_PREFIX]; + gBuffer[0].out2 = &buf[0][3][TA_BUF_PREFIX]; + + gBuffer[1].in = &buf[1][0][TA_BUF_PREFIX]; + gBuffer[1].out0 = &buf[1][1][TA_BUF_PREFIX]; + gBuffer[1].out1 = &buf[1][2][TA_BUF_PREFIX]; + gBuffer[1].out2 = &buf[1][3][TA_BUF_PREFIX]; + + gBuffer[2].in = &buf[2][0][TA_BUF_PREFIX]; + gBuffer[2].out0 = &buf[2][1][TA_BUF_PREFIX]; + gBuffer[2].out1 = &buf[2][2][TA_BUF_PREFIX]; + gBuffer[2].out2 = &buf[2][3][TA_BUF_PREFIX]; + + gBuffer[3].in = &buf[3][0][TA_BUF_PREFIX]; + gBuffer[3].out0 = &buf[3][1][TA_BUF_PREFIX]; + gBuffer[3].out1 = &buf[3][2][TA_BUF_PREFIX]; + gBuffer[3].out2 = &buf[3][3][TA_BUF_PREFIX]; + + gBuffer[4].in = &buf[4][0][TA_BUF_PREFIX]; + gBuffer[4].out0 = &buf[4][1][TA_BUF_PREFIX]; + gBuffer[4].out1 = &buf[4][2][TA_BUF_PREFIX]; + gBuffer[4].out2 = &buf[4][3][TA_BUF_PREFIX]; +} + +/* Will set some values in the buffers allowing + * to detect later if the function is writing + * out-of-bound (and to make sure the + * function is writing exactly the number + * of values it pretends to do). + */ +void clearAllBuffers( void ) +{ + unsigned int i,j,k; + + for( i=0; i < NB_GLOBAL_BUFFER; i++ ) + { + for( j=0; j < TA_NB_OUT_IN; j++ ) + { + for( k=0; k < TA_BUF_PREFIX; k++ ) + buf[i][j][k] = RESV_PATTERN_PREFIX; + for( ; k < TA_BUF_SIZE; k++ ) + buf[i][j][k] = RESV_PATTERN_SUFFIX; + } + } +} + +void setInputBuffer( unsigned int i, const TA_Real *data, unsigned int nbElement ) +{ + unsigned int j; + for( j=0; j < nbElement; j++ ) + buf[i][0][j+TA_BUF_PREFIX] = data[j]; +} + +void setInputBufferValue( unsigned int i, const TA_Real data, unsigned int nbElement ) +{ + unsigned int j; + for( j=0; j < nbElement; j++ ) + buf[i][0][j+TA_BUF_PREFIX] = data; + +} + +/* Check that a buffer (within a TestBuffer) is not containing + * NAN (or any reserved "impossible" value) within the specified + * range (it also checks that all out-of-bound values are untouch). + * + * Return 1 on success. + */ +ErrorNumber checkForNAN( const TA_Real *buffer, + unsigned int nbElement ) +{ + unsigned int i; + unsigned int idx; + + const TA_Real *theBuffer; + theBuffer = buffer - TA_BUF_PREFIX; + + /* Check that the prefix are all still untouch. */ + for( idx=0; idx < TA_BUF_PREFIX; idx++ ) + { + if( theBuffer[idx] != RESV_PATTERN_PREFIX ) + { + printf( "Fail: Out of range writing in prefix buffer (%d,%f)\n", idx, theBuffer[idx] ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_0; + } + } + + if( nbElement > MAX_NB_TEST_ELEMENT ) + { + printf( "Fail: outNbElement is out of range 0 (%d)\n", nbElement ); + return TA_TEST_TFRR_NB_ELEMENT_OUT_OF_RANGE; + } + + /* Check that no NAN (or reserved "impossible" value) exist + * in the specified range. + */ + for( i=0; i < nbElement; i++,idx++ ) + { + /* TODO Add back some nan/inf checking + if( trio_isnan(theBuffer[idx]) ) + { + printf( "Fail: Not a number find within the data (%d,%f)\n", i, theBuffer[idx] ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_1; + } + + if( trio_isinf(theBuffer[idx]) ) + { + printf( "Fail: Not a number find within the data (%d,%f)\n", i, theBuffer[idx] ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_2; + }*/ + + if( theBuffer[idx] == RESV_PATTERN_PREFIX ) + { + printf( "Fail: Not a number find within the data (%d,%f)\n", i, theBuffer[idx] ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_3; + } + + if( theBuffer[idx] == RESV_PATTERN_SUFFIX ) + { + printf( "Fail: Not a number find within the data (%d,%f)\n", i, theBuffer[idx] ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_4; + } + } + + /* Make sure that the remaining of the buffer is untouch. */ + for( ; idx < TA_BUF_SIZE; idx++ ) + { + if( theBuffer[idx] != RESV_PATTERN_SUFFIX ) + { + printf( "Fail: Out of range writing in suffix buffer (%d,%f)\n", idx, theBuffer[idx] ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_5; + } + + idx++; + } + + /* Make sure the global memory guard are untouch. */ + if( memoryGuard1 != RESV_PATTERN_MEMGUARD_1 ) + { + printf( "Fail: MemoryGuard1 have been modified (%f,%f)\n", memoryGuard1, RESV_PATTERN_MEMGUARD_1 ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_6; + } + + if( memoryGuard2 != RESV_PATTERN_MEMGUARD_2 ) + { + printf( "Fail: MemoryGuard2 have been modified (%f,%f)\n", memoryGuard2, RESV_PATTERN_MEMGUARD_2 ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_7; + } + + /* Everything looks good! */ + return TA_TEST_PASS; +} + +/* Return 1 on success */ +ErrorNumber checkSameContent( TA_Real *buffer1, + TA_Real *buffer2 ) +{ + const TA_Real *theBuffer1; + const TA_Real *theBuffer2; + + unsigned int i; + + theBuffer1 = buffer1 - TA_BUF_PREFIX; + theBuffer2 = buffer2 - TA_BUF_PREFIX; + + for( i=0; i < TA_BUF_SIZE; i++ ) + { + /* TODO Add back nan/inf checking + (!trio_isnan(theBuffer1[i])) && + (!trio_isinf(theBuffer1[i])) && + */ + + if( (theBuffer1[i] != RESV_PATTERN_SUFFIX) && + (theBuffer1[i] != RESV_PATTERN_PREFIX) ) + { + + if(!TA_REAL_EQ( theBuffer1[i], theBuffer2[i], 0.000001)) + { + printf( "Fail: Large difference found between two value expected identical (%f,%f,%d)\n", + theBuffer1[i], theBuffer2[i], i ); + return TA_TEST_TFRR_CHECK_SAME_CONTENT; + } + } + } + + return TA_TEST_PASS; +} + +ErrorNumber checkDataSame( const TA_Real *data, + const TA_Real *originalInput, + unsigned int nbElement ) +{ + unsigned int i; + ErrorNumber errNb; + + errNb = checkForNAN( data, nbElement ); + + if( errNb != TA_TEST_PASS ) + return errNb; + + if( nbElement > MAX_NB_TEST_ELEMENT ) + { + printf( "Fail: outNbElement is out of range 1 (%d)\n", nbElement ); + return TA_TEST_TFRR_NB_ELEMENT_OUT_OF_RANGE; + } + + for( i=0; i < nbElement; i++ ) + { + if( originalInput[i] != data[i] ) + { + printf( "Fail: Data was wrongly modified (%f,%f,%d)\n", + originalInput[i], + data[i], i ); + return TA_TEST_TFRR_INPUT_HAS_BEEN_MODIFIED; + } + } + + return TA_TEST_PASS; +} + +ErrorNumber checkExpectedValue( const TA_Real *data, + TA_RetCode retCode, TA_RetCode expectedRetCode, + unsigned int outBegIdx, unsigned int expectedBegIdx, + unsigned int outNbElement, unsigned int expectedNbElement, + TA_Real oneOfTheExpectedOutReal, + unsigned int oneOfTheExpectedOutRealIndex ) +{ + if( retCode != expectedRetCode ) + { + printf( "Fail: RetCode %d different than expected %d\n", retCode, expectedRetCode ); + return TA_TESTUTIL_TFRR_BAD_RETCODE; + } + + if( retCode != TA_SUCCESS ) + { + /* An error did occured, but it + * was expected. No need to go + * further. + */ + return TA_TEST_PASS; + } + + if( outNbElement > MAX_NB_TEST_ELEMENT ) + { + printf( "Fail: outNbElement is out of range 2 (%d)\n", outNbElement ); + return TA_TEST_TFRR_NB_ELEMENT_OUT_OF_RANGE; + } + + + /* Make sure the range of output does not contains NAN. */ + /* TODO Add back nan/inf checking + for( i=0; i < outNbElement; i++ ) + { + if( trio_isnan(data[i]) ) + { + printf( "Fail: Not a number find within the data (%d,%f)\n", i, data[i] ); + return TA_TEST_TFRR_OVERLAP_OR_NAN_3; + } + }*/ + + /* Verify that the expected output is there. */ + + if( outNbElement != expectedNbElement ) + { + printf( "Fail: outNbElement expected %d but got %d\n", + expectedNbElement, outNbElement ); + return TA_TESTUTIL_TFRR_BAD_OUTNBELEMENT; + } + + if( expectedNbElement > 0 ) + { + if( !TA_REAL_EQ( oneOfTheExpectedOutReal, data[oneOfTheExpectedOutRealIndex], 0.01 ) ) + { + printf( "Fail: For index %d, Expected value = %f but calculate value is %f\n", + oneOfTheExpectedOutRealIndex, + oneOfTheExpectedOutReal, + data[oneOfTheExpectedOutRealIndex] ); + return TA_TESTUTIL_TFRR_BAD_CALCULATION; + } + + if( expectedBegIdx != outBegIdx ) + { + printf( "Fail: outBegIdx expected %d but got %d\n", expectedBegIdx, outBegIdx ); + return TA_TESTUTIL_TFRR_BAD_BEGIDX; + } + } + + /* Succeed. */ + return TA_TEST_PASS; +} + + +ErrorNumber doRangeTest( RangeTestFunction testFunction, + TA_FuncUnstId unstId, + void *opaqueData, + unsigned int nbOutput, + unsigned int integerTolerance ) +{ + unsigned int outputNb; + ErrorNumber errNb; + + /* Test all the outputs individually. */ + for( outputNb=0; outputNb < nbOutput; outputNb++ ) + { + errNb = doRangeTestForOneOutput( testFunction, + unstId, + opaqueData, + outputNb, + integerTolerance ); + if( errNb != TA_TEST_PASS ) + { + printf( "Failed: For output #%d of %d\n", outputNb+1, nbOutput ); + return errNb; + } + } + + return TA_TEST_PASS; +} + +void printRetCode( TA_RetCode retCode ) +{ + TA_RetCodeInfo retCodeInfo; + + TA_SetRetCodeInfo( retCode, &retCodeInfo ); + printf( "\nFailed: ErrorCode %d=%s:[%s]\n", retCode, + retCodeInfo.enumStr, + retCodeInfo.infoStr ); +} + + + +/**** Local functions definitions. ****/ +static ErrorNumber doRangeTestForOneOutput( RangeTestFunction testFunction, + TA_FuncUnstId unstId, + void *opaqueData, + unsigned int outputNb, + unsigned int integerTolerance ) +{ + TA_RetCode retCode; + TA_Integer refOutBeg, refOutNbElement, refLookback; + TA_Integer fixSize; + TA_Real *refBuffer; + TA_Integer *refBufferInt; + ErrorNumber errNb; + TA_Integer unstablePeriod, temp; + unsigned int outputIsInteger; + + showFeedback(); + + /* Caculate the whole range. This is going + * to be the reference for all subsequent test. + */ + refBuffer = (TA_Real *)TA_Malloc( MAX_RANGE_SIZE * sizeof( TA_Real ) ); + + if( !refBuffer ) + return TA_TESTUTIL_DRT_ALLOC_ERR; + + refBufferInt = (TA_Integer *)TA_Malloc( MAX_RANGE_SIZE * sizeof( TA_Integer ) ); + + if( !refBufferInt ) + { + TA_Free( refBuffer ); + return TA_TESTUTIL_DRT_ALLOC_ERR; + } + + if( unstId != TA_FUNC_UNST_NONE ) + { + /* Caller wish to test for a range of unstable + * period values. But the reference is calculated + * on the whole range by keeping that unstable period + * to zero. + */ + TA_SetUnstablePeriod( unstId, 0 ); + } + + outputIsInteger = 0; + retCode = CallTestFunction( testFunction, 0, MAX_RANGE_END, refBuffer, refBufferInt, + &refOutBeg, &refOutNbElement, &refLookback, + opaqueData, outputNb, &outputIsInteger ); + + if( retCode != TA_SUCCESS ) + { + printf( "Fail: doRangeTest whole range failed (%d)\n", retCode ); + TA_Free( refBuffer ); + TA_Free( refBufferInt ); + return TA_TESTUTIL_DRT_REF_FAILED; + } + + /* When calculating for the whole range, the lookback and the + * refOutBeg are supppose to be equal. + */ + if( refLookback != refOutBeg ) + { + printf( "Fail: doRangeTest refLookback != refOutBeg (%d != %d)\n", refLookback, refOutBeg ); + TA_Free( refBuffer ); + TA_Free( refBufferInt ); + return TA_TESTUTIL_DRT_LOOKBACK_INCORRECT; + } + + temp = MAX_RANGE_SIZE-refLookback; + if( temp != refOutNbElement ) + { + printf( "Fail: doRangeTest either refOutNbElement or refLookback bad (%d,%d)\n", temp, refOutNbElement ); + TA_Free( refBuffer ); + TA_Free( refBufferInt ); + return TA_TESTUTIL_DRT_REF_OUTPUT_INCORRECT; + } + + /* Calculate each value ONE by ONE and make sure it is identical + * to the reference. + * + * Then repeat the test but calculate TWO by TWO and so on... + */ + for( fixSize=1; fixSize <= MAX_RANGE_SIZE; fixSize++ ) + { + /* When a function has an unstable period, verify some + * unstable period between 0 and MAX_RANGE_SIZE. + */ + if( unstId == TA_FUNC_UNST_NONE ) + { + errNb = doRangeTestFixSize( testFunction, opaqueData, + refOutBeg, refOutNbElement, refLookback, + refBuffer, refBufferInt, + unstId, fixSize, outputNb, integerTolerance ); + if( errNb != TA_TEST_PASS) + { + TA_Free( refBuffer ); + TA_Free( refBufferInt ); + return errNb; + } + } + else + { + for( unstablePeriod=0; unstablePeriod <= MAX_RANGE_SIZE; unstablePeriod++ ) + { + TA_SetUnstablePeriod( unstId, unstablePeriod ); + + errNb = doRangeTestFixSize( testFunction, opaqueData, + refOutBeg, refOutNbElement, refLookback, + refBuffer, refBufferInt, + unstId, fixSize, outputNb, integerTolerance ); + if( errNb != TA_TEST_PASS) + { + printf( "Fail: Using unstable period %d\n", unstablePeriod ); + TA_Free( refBuffer ); + TA_Free( refBufferInt ); + return errNb; + } + + /* Randomly skip the test of some unstable period (limit case are + * always tested though). + */ + if( (unstablePeriod > 5) && (unstablePeriod < 240) ) + { + /* Randomly skips from 0 to 239 tests. Never + * make unstablePeriod exceed 240. + */ + temp = (rand() % 240); + unstablePeriod += temp; + if( unstablePeriod > 240 ) + unstablePeriod = 240; + } + } + + /* Because the tests with an unstable period are very intensive + * and kinda repetitive, skip the test of some fixSize (limit + * case are always tested though). + */ + if( (fixSize > 5) && (fixSize < 240) ) + { + /* Randomly skips from 0 to 239 tests. Never + * make fixSize exceed 240. + */ + temp = (rand() % 239); + fixSize += temp; + if( fixSize > 240 ) + fixSize = 240; + } + } + } + + TA_Free( refBuffer ); + TA_Free( refBufferInt ); + return TA_TEST_PASS; +} + +static ErrorNumber doRangeTestFixSize( RangeTestFunction testFunction, + void *opaqueData, + TA_Integer refOutBeg, + TA_Integer refOutNbElement, + TA_Integer refLookback, + const TA_Real *refBuffer, + const TA_Integer *refBufferInt, + TA_FuncUnstId unstId, + TA_Integer fixSize, + unsigned int outputNb, + unsigned int integerTolerance ) +{ + TA_RetCode retCode; + TA_Real *outputBuffer; + TA_Real val1, val2; + TA_Integer i, temp; + TA_Integer outputBegIdx, outputNbElement, lookback; + TA_Integer startIdx, endIdx, relativeIdx, outputSizeByOptimalLogic; + TA_Integer *outputBufferInt; + unsigned int outputIsInteger; + + (void)refLookback; + + /* Allocate the output buffer (+prefix and suffix memory guard). */ + outputBuffer = (TA_Real *)TA_Malloc( (fixSize+2) * sizeof( TA_Real ) ); + + if( !outputBuffer ) + return TA_TESTUTIL_DRT_ALLOC_ERR; + + outputBufferInt = (TA_Integer *)TA_Malloc( (fixSize+2) * sizeof( TA_Integer ) ); + + if( !refBufferInt ) + { + TA_Free( outputBuffer ); + return TA_TESTUTIL_DRT_ALLOC_ERR; + } + + outputBuffer[0] = RESV_PATTERN_PREFIX; + outputBuffer[fixSize+1] = RESV_PATTERN_SUFFIX; + + outputBufferInt[0] = RESV_PATTERN_PREFIX_INT; + outputBufferInt[fixSize+1] = RESV_PATTERN_SUFFIX_INT; + + /* Initialize the outputs with improbable values. */ + for( i=1; i <= fixSize; i++ ) + { + outputBuffer[i] = RESV_PATTERN_IMPROBABLE; + outputBufferInt[i] = RESV_PATTERN_IMPROBABLE_INT; + } + + /* Test for a large number of possible startIdx */ + for( startIdx=0; startIdx <= (MAX_RANGE_SIZE-fixSize); startIdx++ ) + { + /* Call the TA function. */ + endIdx = startIdx+fixSize-1; + retCode = CallTestFunction( testFunction, startIdx, endIdx, + &outputBuffer[1], &outputBufferInt[1], + &outputBegIdx, &outputNbElement, &lookback, + opaqueData, outputNb, &outputIsInteger ); + + if( retCode != TA_SUCCESS ) + { + /* No call shall never fail here. When the range + * is "out-of-range" the function shall still return + * TA_SUCCESS with the outNbElement equal to zero. + */ + printf( "Fail: doRangeTestFixSize testFunction return error=(%d) (%d,%d)\n", retCode, fixSize, startIdx ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_RETCODE_ERR; + } + else + { + /* Possible startIdx gap of the output shall be always the + * same regardless of the range. + */ + if( outputNbElement == 0 ) + { + /* Trap cases where there is no output. */ + if( (startIdx > lookback) || (endIdx > lookback) ) + { + /* Whenever startIdx is greater than lookback, some data + * shall be return. Same idea with endIdx. + * + * Note: + * some output will never start at the startIdx, particularly + * when a TA function have multiple output. Usually, the first output + * will be between startIdx/endIdx and other outputs may have a "gap" + * from the startIdx. + * + * Example: + * Stochastic %K is between startIdx/endIdx, but %D output will + * have less data because it is a MA of %K. A gap will then + * exist for the %D output. + */ + printf( "Fail: doRangeTestFixSize data missing (%d,%d,%d)\n", startIdx, endIdx, lookback ); + + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_MISSING_DATA; + } + } + else + { + /* Some output was returned. Are the returned index correct? */ + if( (outputBegIdx < startIdx) || (outputBegIdx > endIdx) || (outputBegIdx < refOutBeg)) + { + printf( "Fail: doRangeTestFixSize bad outBegIdx\n" ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_BAD_OUTBEGIDX; + } + + if( (outputNbElement > fixSize) || (outputNbElement > refOutNbElement) ) + { + printf( "Fail: doRangeTestFixSize Incorrect outputNbElement\n" ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + return TA_TESTUTIL_DRT_BAD_OUTNBLEMENT; + } + + /* Is the calculated lookback too high? */ + if( outputBegIdx < lookback ) + { + printf( "Fail: doRangeTestFixSize Lookback calculation too high? (%d)\n", lookback ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_LOOKBACK_TOO_HIGH; + } + + /* Is the output identical to the reference? */ + relativeIdx = outputBegIdx-refOutBeg; + for( i=0; i < outputNbElement; i++ ) + { + if( outputIsInteger ) + { + if( outputBufferInt[1+i] != refBufferInt[relativeIdx+i] ) + { + printf( "Fail: doRangeTestFixSize diff data for idx=%d (%d,%d)\n", i, + outputBufferInt[1+i], refBufferInt[relativeIdx+i] ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_DATA_DIFF_INT; + } + } + else + { + val1 = outputBuffer[1+i]; + val2 = refBuffer[relativeIdx+i]; + if( !dataWithinReasonableRange( val1, val2, i, unstId, integerTolerance ) ) + { + printf( "Fail: doRangeTestFixSize diff data for idx=%d (%e,%e)\n", i, val1, val2 ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + if( val1 != 0.0 ) + printf( "Fail: Diff %g %%\n", ((val2-val1)/val1)*100.0 ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_DATA_DIFF; + } + } + + /* Randomly skip the verification of some value. Limit + * cases are always checked though. + */ + if( outputNbElement > 30 ) + { + temp = outputNbElement-20; + if( (i > 20) && (i < temp) ) + { + /* Randomly skips from 0 to 200 verification. + * Never make it skip the last 20 values. + */ + i += (rand() % 200); + if( i > temp ) + i = temp; + } + } + } + + /* Verify out-of-bound writing in the output buffer. */ + outputSizeByOptimalLogic = max(lookback,startIdx); + if( outputSizeByOptimalLogic > endIdx ) + outputSizeByOptimalLogic = 0; + else + outputSizeByOptimalLogic = endIdx-outputSizeByOptimalLogic+1; + + if( (fixSize != outputNbElement) && (outputBuffer[1+outputSizeByOptimalLogic] != RESV_PATTERN_IMPROBABLE) ) + { + printf( "Fail: doRangeTestFixSize out-of-bound output (%e)\n", outputBuffer[1+outputSizeByOptimalLogic] ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_OUT_OF_BOUND_OUT; + } + + if( (fixSize != outputNbElement) && (outputBufferInt[1+outputSizeByOptimalLogic] != RESV_PATTERN_IMPROBABLE_INT) ) + { + printf( "Fail: doRangeTestFixSize out-of-bound output (%d)\n", outputBufferInt[1+outputSizeByOptimalLogic] ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_OUT_OF_BOUND_OUT_INT; + } + + /* Verify that the memory guard were preserved. */ + if( outputBuffer[0] != RESV_PATTERN_PREFIX ) + { + printf( "Fail: doRangeTestFixSize bad RESV_PATTERN_PREFIX (%e)\n", outputBuffer[0] ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_BAD_PREFIX; + } + + if( outputBufferInt[0] != RESV_PATTERN_PREFIX_INT ) + { + printf( "Fail: doRangeTestFixSize bad RESV_PATTERN_PREFIX_INT (%d)\n", outputBufferInt[0] ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_BAD_PREFIX; + } + + if( outputBuffer[fixSize+1] != RESV_PATTERN_SUFFIX ) + { + printf( "Fail: doRangeTestFixSize bad RESV_PATTERN_SUFFIX (%e)\n", outputBuffer[fixSize+1] ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_BAD_SUFFIX; + } + + if( outputBufferInt[fixSize+1] != RESV_PATTERN_SUFFIX_INT ) + { + printf( "Fail: doRangeTestFixSize bad RESV_PATTERN_SUFFIX_INT (%d)\n", outputBufferInt[fixSize+1] ); + printf( "Fail: doRangeTestFixSize (%d,%d,%d,%d,%d)\n", startIdx, endIdx, outputBegIdx, outputNbElement, fixSize ); + printf( "Fail: doRangeTestFixSize refOutBeg,refOutNbElement (%d,%d)\n", refOutBeg, refOutNbElement ); + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TESTUTIL_DRT_BAD_SUFFIX; + } + + /* Clean-up for next test. */ + if( outputIsInteger ) + { + for( i=1; i <= fixSize; i++ ) + outputBufferInt[i] = RESV_PATTERN_IMPROBABLE_INT; + } + else + { + for( i=1; i <= fixSize; i++ ) + outputBuffer[i] = RESV_PATTERN_IMPROBABLE; + } + } + + /* Skip some startIdx at random. Limit case are still + * tested though. + */ + if( (startIdx > 30) && ((startIdx+100) <= (MAX_RANGE_SIZE-fixSize)) ) + { + /* Randomly skips from 40 to 100 tests. */ + temp = (rand() % 100)+40; + startIdx += temp; + } + } + + /* Loop and move forward for the next startIdx to test. */ + } + + TA_Free( outputBuffer ); + TA_Free( outputBufferInt ); + return TA_TEST_PASS; +} + +/* This function compares two value. + * The value is determined to be equal + * if it is within a certain error range. + */ +static int dataWithinReasonableRange( TA_Real val1, TA_Real val2, + unsigned int outputPosition, + TA_FuncUnstId unstId, + unsigned int integerTolerance ) +{ + TA_Real difference, tolerance, temp; + unsigned int val1_int, val2_int, tempInt, periodToIgnore; + + if( integerTolerance == TA_DO_NOT_COMPARE ) + return 1; /* Don't compare, says that everything is fine */ + + /* If the function does not have an unstable period, + * the compared value shall be identical. + * + * Because the algo may vary slightly allow for + * a small epsilon error because of the nature + * of floating point operations. + */ + if( unstId == TA_FUNC_UNST_NONE ) + return TA_REAL_EQ( val1, val2, 0.000000001 ); + + /* In the context of the TA functions, all value + * below 0.00001 are considered equal to zero and + * are considered to be equal within a reasonable range. + * (the percentage difference might be large, but + * unsignificant at that level, so no tolerance + * check is being done). + */ + if( (val1 < 0.00001) && (val2 < 0.00001) ) + return 1; + + /* When the function is unstable, the comparison + * tolerate at first a large difference. + * + * As the number of "outputPosition" is higher + * the tolerance is reduced. + * + * In the same way, as the unstable period + * increase, the tolerance is reduced (that's + * what the unstable period is for... reducing + * difference). + * + * When dealing with an unstable period, the + * first 100 values are ignored. + * + * Following 100, the tolerance is + * progressively reduced as follow: + * + * 1 == 0.5/1 == 50 % + * 2 == 0.5/2 == 25 % + * ... + * 100 == 0.5/100 == 0.005 % + * ... + * + * Overall, the following is a fair estimation: + * When using a unstable period of 200, you + * can expect the output to not vary more + * than 0.005 % + * + * The logic is sligthly different if the + * output are rounded integer, but it is + * the same idea. + * + * The following describe the special meaning of + * the integerTolerance: + * + * Value 10 -> A tolerance of 1/10 is used. + * + * Value 100 -> A tolerance of 1/100 is used. + * + * Value 1000 -> A tolerance of 1/1000 is used. + * + * Value 360 -> Useful when the output are + * degrees. In that case, a fix + * tolerance of 1 degree is used. + * + * Value TA_DO_NOT_COMPARE -> + * Indicate that NO COMPARISON take + * place. This is useful for functions + * that cannot be compare when changing + * the range (like the accumulative + * algorithm used for TA_AD and TA_ADOSC). + */ + + + /* Some functions requires a longer unstable period. + * These are trap here. + */ + switch( unstId ) + { + case TA_FUNC_UNST_T3: + periodToIgnore = 200; + break; + default: + periodToIgnore = 100; + break; + } + + if( integerTolerance == 1000 ) + { + /* Check for no difference of more + * than 1/1000 + */ + if( val1 > val2 ) + difference = (val1-val2); + else + difference = (val2-val1); + + difference *= 1000.0; + + temp = outputPosition+TA_GetUnstablePeriod(unstId)+1; + if( temp <= periodToIgnore ) + { + /* Pretend it is fine. */ + return 1; + } + else if( (int)difference > 1 ) + { + printf( "\nFail: Value diffferent by more than 1/1000 (%f)\n", difference ); + return 0; + } + } + else if( integerTolerance == 100 ) + { + /* Check for no difference of more + * than 1/1000 + */ + if( val1 > val2 ) + difference = (val1-val2); + else + difference = (val2-val1); + + difference *= 100.0; + + temp = outputPosition+TA_GetUnstablePeriod(unstId)+1; + if( temp <= periodToIgnore ) + { + /* Pretend it is fine. */ + return 1; + } + else if( (int)difference > 1 ) + { + printf( "\nFail: Value diffferent by more than 1/100 (%f)\n", difference ); + return 0; + } + } + else if( integerTolerance == 10 ) + { + /* Check for no difference of more + * than 1/1000 + */ + if( val1 > val2 ) + difference = (val1-val2); + else + difference = (val2-val1); + + difference *= 10.0; + + temp = outputPosition+TA_GetUnstablePeriod(unstId)+1; + if( temp <= periodToIgnore ) + { + /* Pretend it is fine. */ + return 1; + } + else if( (int)difference > 1 ) + { + printf( "\nFail: Value diffferent by more than 1/10 (%f)\n", difference ); + return 0; + } + } + else if( integerTolerance == 360 ) + { + /* Check for no difference of no more + * than 10% when the value is higher than + * 1 degree. + * + * Difference of less than 1 degree are not significant. + */ + val1_int = (unsigned int)val1; + val2_int = (unsigned int)val2; + if( val1_int > val2_int ) + tempInt = val1_int - val2_int; + else + tempInt = val2_int - val1_int; + + if( val1 > val2 ) + difference = (val1-val2)/val1; + else + difference = (val2-val1)/val2; + + temp = outputPosition+TA_GetUnstablePeriod(unstId)+1; + if( temp <= periodToIgnore ) + { + /* Pretend it is fine. */ + return 1; + } + else if( (tempInt > 1) && (difference > 0.10) ) + { + printf( "\nFail: Value diffferent by more than 10 percent over 1 degree (%d)\n", tempInt ); + return 0; + } + } + else if( integerTolerance ) + { + /* Check that the integer part of the value + * is not different more than the specified + * integerTolerance. + */ + val1_int = (unsigned int)val1; + val2_int = (unsigned int)val2; + if( val1_int > val2_int ) + tempInt = val1_int - val2_int; + else + tempInt = val2_int - val1_int; + + temp = outputPosition+TA_GetUnstablePeriod(unstId)+1; + if( temp <= periodToIgnore ) + { + /* Pretend it is fine. */ + return 1; + } + else if( temp < 100 ) + { + if( tempInt >= 3*integerTolerance ) + { + printf( "\nFail: Value out of 3*tolerance range (%d,%d)\n", tempInt, integerTolerance ); + return 0; /* Value considered different */ + } + } + else if( temp < 150 ) + { + if( tempInt >= 2*integerTolerance ) + { + printf( "\nFail: Value out of 2*tolerance range (%d,%d)\n", tempInt, integerTolerance ); + return 0; /* Value considered different */ + } + } + else if( temp < 200 ) + { + if( tempInt >= integerTolerance ) + { + printf( "\nFail: Value out of tolerance range (%d,%d)\n", tempInt, integerTolerance ); + return 0; /* Value considered different */ + } + } + else if( tempInt >= 1 ) + { + printf( "\nFail: Value not equal (difference is %d)\n", tempInt ); + return 0; /* Value considered different */ + } + } + else + { + if( val1 > val2 ) + difference = (val1-val2)/val1; + else + difference = (val2-val1)/val2; + + temp = outputPosition+TA_GetUnstablePeriod(unstId)+1; + if( temp <= periodToIgnore ) + { + /* Pretend it is fine. */ + return 1; + } + else + { + temp -= periodToIgnore; + tolerance = 0.5/temp; + } + + if( difference > tolerance ) + { + printf( "\nFail: Value out of tolerance range (%g,%g)\n", difference, tolerance ); + return 0; /* Out of tolerance... values are not equal. */ + } + } + + return 1; /* Value equal within tolerance. */ +} + +static TA_RetCode CallTestFunction( RangeTestFunction testFunction, + TA_Integer startIdx, + TA_Integer endIdx, + TA_Real *outputBuffer, + TA_Integer *outputBufferInt, + TA_Integer *outBegIdx, + TA_Integer *outNbElement, + TA_Integer *lookback, + void *opaqueData, + unsigned int outputNb, + unsigned int *isOutputInteger ) +{ + /* Call the function and do profiling. */ + TA_RetCode retCode; + double clockDelta; + +#ifdef WIN32 + LARGE_INTEGER startClock; + LARGE_INTEGER endClock; +#else + clock_t startClock; + clock_t endClock; +#endif + +#ifdef WIN32 + QueryPerformanceCounter(&startClock); +#else + startClock = clock(); +#endif + retCode = testFunction( startIdx, + endIdx, + outputBuffer, + outputBufferInt, + outBegIdx, + outNbElement, + lookback, + opaqueData, + outputNb, + isOutputInteger ); + + /* Profile only functions producing at least 20 values. */ + if( *outNbElement < 20 ) + { + return retCode; + } + +#ifdef WIN32 + QueryPerformanceCounter(&endClock); + clockDelta = (double)((__int64)endClock.QuadPart - (__int64) startClock.QuadPart); +#else + endClock = clock(); + clockDelta = (double)(endClock - startClock); +#endif + + if( clockDelta <= 0 ) + { + insufficientClockPrecision = 1; + } + else + { + if( clockDelta > worstProfiledCall ) + worstProfiledCall = clockDelta; + timeInProfiledCall += clockDelta; + nbProfiledCall++; + } + + return retCode; +} diff --git a/ta-lib-config.in b/ta-lib-config.in new file mode 100644 index 000000000..8105d8b14 --- /dev/null +++ b/ta-lib-config.in @@ -0,0 +1,28 @@ +#!/bin/sh + +usage="\ +Usage: ta-lib-config [--version] [--libs] [--cflags]" + +if test $# -eq 0; then + echo "${usage}" 1>&2 + exit 1 +fi + +while test $# -gt 0; do + case $1 in + --version) + echo @VERSION@ + ;; + --cflags) + echo -I@includedir@/ta-lib @DEFS@ + ;; + --libs) + echo -L@libdir@ @LIBS@ + ;; + *) + echo "${usage}" 1>&2 + exit 1 + ;; + esac + shift +done diff --git a/ta-lib.dpkg.in b/ta-lib.dpkg.in new file mode 100644 index 000000000..d41b81b2c --- /dev/null +++ b/ta-lib.dpkg.in @@ -0,0 +1,16 @@ +Package: ta-lib +Version: @VERSION@ +Section: dev-libs +Priority: optional +Architecture: i686 +Essential: no +Depends: +Pre-Depends: +Recommends: +Suggests: +Installed-Size: 3700000 +Maintainer: Mario Fortier [mfortier@ta-lib.org] +Conflicts: +Replaces: +Provides: +Description: TA-Lib provides common functions for the technical analysis of stock/future/commodity market data. diff --git a/ta-lib.spec.in b/ta-lib.spec.in new file mode 100644 index 000000000..7f502df6a --- /dev/null +++ b/ta-lib.spec.in @@ -0,0 +1,25 @@ +Summary: Technical Analysis Library +Name: ta-lib +Version: @VERSION@ +Release: 1 +License: BSD +Group: Development/Libraries + +%description +TA-Lib provides common functions for the technical analysis of stock/future/commodity market data. + +%build +./autogen.sh +CFLAGS="-g0 -O2 -pipe" ./configure --prefix=/usr +make + +%install +rm -rf $RPM_BUILD_ROOT +make DESTDIR=$RPM_BUILD_ROOT install + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root) +/usr From 43d19e1d69c83d1cbf59b4f45d514823ffbacabd Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 14:32:57 -0400 Subject: [PATCH 10/22] Completely bundle upstream ta-lib. --- .github/workflows/release.yml | 17 +- .github/workflows/tests.yml | 31 +- README.md | 186 +- setup.py | 97 +- talib/_ta_lib.c | 39319 +++++++++++++++++++++++++++++++- talib/_ta_lib.pxd | 8 +- 6 files changed, 39280 insertions(+), 378 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dfd828eef..5e73bb60b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,19 +13,8 @@ env: CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" CIBW_ARCHS_MACOS: "x86_64 arm64" CIBW_BEFORE_BUILD: "pip install -r requirements_dev.txt" - # Polars is needed for the test suite, and Polars currently is only building binary packages for py3.6. - # So, we have to install rust before every build. - CIBW_BEFORE_BUILD_LINUX: | - curl -L -s https://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -o ta.tar.gz && \ - tar -zxvf ta.tar.gz && \ - rm ta.tar.gz && \ - cd ta-lib && \ - ./configure && \ - make && \ - make install - CIBW_BEFORE_BUILD_MACOS: "brew install ta-lib" - CIBW_BEFORE_BUILD_WINDOWS: | - curl -L -s https://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip -o ta.zip && 7z x ta.zip -o/c/ta-lib && mv /c/ta-lib/ta-lib/* /c/ta-lib/ && rm -rf /c/ta-lib/ta-lib && cd /c/ta-lib/c/make/cdr/win32/msvc && nmake + # Polars is needed for the test suite, and Polars currently is only building + # binary packages for py3.6. So, we have to install rust before every build. jobs: # Build & test simple source release before wasting hours building and @@ -88,4 +77,4 @@ jobs: - uses: actions/upload-artifact@v2 with: - path: ./wheelhouse/*.whl \ No newline at end of file + path: ./wheelhouse/*.whl diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1b0b35cbf..f5d487706 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,25 +7,11 @@ on: branches: [ master ] jobs: - build_talib: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Build talib - run: | - ./tools/build_talib_from_source.bash ${{ github.workspace }}/dependencies - - uses: actions/upload-artifact@v2 - with: - name: dependencies - path: ${{ github.workspace }}/dependencies/ - if-no-files-found: error - build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] - needs: [build_talib] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} @@ -38,28 +24,13 @@ jobs: python -m pip install -r requirements.txt python -m pip install -r requirements_test.txt pip install flake8 pytest polars - env: - DEPS_PATH: ${{ github.workspace }}/dependencies - TA_INCLUDE_PATH: ${{ github.workspace }}/dependencies/include - TA_LIBRARY_PATH: ${{ github.workspace }}/dependencies/lib - - uses: actions/download-artifact@v2 - with: - name: dependencies - path: ${{ github.workspace }}/dependencies - name: Build cython modules in-place run: | - python setup.py build_ext --inplace --include-dirs=$TA_INCLUDE_PATH --library-dirs=$TA_LIBRARY_PATH - env: - TA_INCLUDE_PATH: ${{ github.workspace }}/dependencies/include - TA_LIBRARY_PATH: ${{ github.workspace }}/dependencies/lib + python setup.py install - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - #flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | PYTHONPATH=. pytest - env: - LD_LIBRARY_PATH: ${{ github.workspace }}/dependencies/lib diff --git a/README.md b/README.md index 634c6573d..33a9b84bc 100644 --- a/README.md +++ b/README.md @@ -38,197 +38,13 @@ Or checkout the sources and run ``setup.py`` yourself: $ python setup.py install ``` -It also appears possible to install via +Unofficial packages are available on [Conda Forge](https://anaconda.org/conda-forge/ta-lib): ``` $ conda install -c conda-forge ta-lib ``` -### Dependencies - -To use TA-Lib for python, you need to have the -[TA-Lib](http://ta-lib.org/hdr_dw.html) already installed. You should -probably follow their installation directions for your platform, but some -suggestions are included below for reference. - -##### Mac OS X - -``` -$ brew install ta-lib -``` - -If you are using a M1 laptop and Homebrew, then you can set these before -installing: - -``` -$ export TA_INCLUDE_PATH="$(brew --prefix ta-lib)/include" -$ export TA_LIBRARY_PATH="$(brew --prefix ta-lib)/lib" -$ arch -arm64 brew install ta-lib -``` - -You might also find this helpful on M1, particularly if you have tried -several different installations without success: - -``` -$ your-arm64-python -m pip install --no-cache-dir ta-lib -``` - -##### Windows - -Download [ta-lib-0.4.0-msvc.zip](http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip) -and unzip to ``C:\ta-lib``. - -> This is a 32-bit binary release. If you want to use 64-bit Python, you will -> need to build a 64-bit version of the library. Some unofficial (**and -> unsupported**) instructions for building on 64-bit Windows 10, here for -> reference: -> -> 1. Download and Unzip ``ta-lib-0.4.0-msvc.zip`` -> 2. Move the Unzipped Folder ``ta-lib`` to ``C:\`` -> 3. Download and Install Visual Studio Community 2015 -> * Remember to Select ``[Visual C++]`` Feature -> 4. Build TA-Lib Library -> * From Windows Start Menu, Start ``[VS2015 x64 Native Tools Command -> Prompt]`` -> * Move to ``C:\ta-lib\c\make\cdr\win32\msvc`` -> * Build the Library ``nmake`` - -You might also try these unofficial windows binaries for both 32-bit and -64-bit: - -https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib - -##### Linux - -Download [ta-lib-0.4.0-src.tar.gz](http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz) and: - -``` -$ tar -xzf ta-lib-0.4.0-src.tar.gz -$ cd ta-lib/ -$ ./configure --prefix=/usr -$ make -$ sudo make install -``` - -> If you build ``TA-Lib`` using ``make -jX`` it will fail but that's OK! -> Simply rerun ``make -jX`` followed by ``[sudo] make install``. - -Note: if your directory path includes spaces, the installation will probably -fail with ``No such file or directory`` errors. - -### Troubleshooting - -If you get a warning that looks like this: - -``` -setup.py:79: UserWarning: Cannot find ta-lib library, installation may fail. -warnings.warn('Cannot find ta-lib library, installation may fail.') -``` - -This typically means ``setup.py`` can't find the underlying ``TA-Lib`` -library, a dependency which needs to be installed. - -If you installed the underlying ``TA-Lib`` library with a custom prefix -(e.g., with ``./configure --prefix=$PREFIX``), then when you go to install -this python wrapper you can specify additional search paths to find the -library and include files for the underlying ``TA-Lib`` library using the -``TA_LIBRARY_PATH`` and ``TA_INCLUDE_PATH`` environment variables: - -```sh -$ export TA_LIBRARY_PATH=$PREFIX/lib -$ export TA_INCLUDE_PATH=$PREFIX/include -$ python setup.py install # or pip install ta-lib -``` - -Sometimes installation will produce build errors like this: - -``` -talib/_ta_lib.c:601:10: fatal error: ta-lib/ta_defs.h: No such file or directory - 601 | #include "ta-lib/ta_defs.h" - | ^~~~~~~~~~~~~~~~~~ -compilation terminated. -``` - -or: - -``` -common.obj : error LNK2001: unresolved external symbol TA_SetUnstablePeriod -common.obj : error LNK2001: unresolved external symbol TA_Shutdown -common.obj : error LNK2001: unresolved external symbol TA_Initialize -common.obj : error LNK2001: unresolved external symbol TA_GetUnstablePeriod -common.obj : error LNK2001: unresolved external symbol TA_GetVersionString -``` - -This typically means that it can't find the underlying ``TA-Lib`` library, a -dependency which needs to be installed. On Windows, this could be caused by -installing the 32-bit binary distribution of the underlying ``TA-Lib`` library, -but trying to use it with 64-bit Python. - -Sometimes installation will fail with errors like this: - -``` -talib/common.c:8:22: fatal error: pyconfig.h: No such file or directory - #include "pyconfig.h" - ^ -compilation terminated. -error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 -``` - -This typically means that you need the Python headers, and should run -something like: - -``` -$ sudo apt-get install python3-dev -``` - -Sometimes building the underlying ``TA-Lib`` library has errors running -``make`` that look like this: - -``` -../libtool: line 1717: cd: .libs/libta_lib.lax/libta_abstract.a: No such file or directory -make[2]: *** [libta_lib.la] Error 1 -make[1]: *** [all-recursive] Error 1 -make: *** [all-recursive] Error 1 -``` - -This might mean that the directory path to the underlying ``TA-Lib`` library -has spaces in the directory names. Try putting it in a path that does not have -any spaces and trying again. - -Sometimes you might get this error running ``setup.py``: - -``` -/usr/include/limits.h:26:10: fatal error: bits/libc-header-start.h: No such file or directory -#include - ^~~~~~~~~~~~~~~~~~~~~~~~~~ -``` - -This is likely an issue with trying to compile for 32-bit platform but -without the appropriate headers. You might find some success looking at the -first answer to [this question](https://stackoverflow.com/questions/54082459/fatal-error-bits-libc-header-start-h-no-such-file-or-directory-while-compili). - -If you wonder why ``STOCHRSI`` gives you different results than you expect, -probably you want ``STOCH`` applied to ``RSI``, which is a little different -than the ``STOCHRSI`` which is ``STOCHF`` applied to ``RSI``: - -```python ->>> import talib ->>> import numpy ->>> c = numpy.random.randn(100) - -# this is the library function ->>> k, d = talib.STOCHRSI(c) - -# this produces the same result, calling STOCHF ->>> rsi = talib.RSI(c) ->>> k, d = talib.STOCHF(rsi, rsi, rsi) - -# you might want this instead, calling STOCH ->>> rsi = talib.RSI(c) ->>> k, d = talib.STOCH(rsi, rsi, rsi) -``` - ## Function API Similar to TA-Lib, the Function API provides a lightweight wrapper of the diff --git a/setup.py b/setup.py index 1119f6e48..54b8d4f52 100644 --- a/setup.py +++ b/setup.py @@ -1,81 +1,24 @@ #!/usr/bin/env python - -import sys -import os -import os.path -import warnings +import glob +from os import path try: from setuptools import setup, Extension - from setuptools.dist import Distribution requires = { "install_requires": ["numpy"], "setup_requires": ["numpy"] } except ImportError: from distutils.core import setup - from distutils.dist import Distribution from distutils.extension import Extension requires = {"requires": ["numpy"]} -lib_talib_name = 'ta_lib' # the underlying C library's name - -platform_supported = False - -if any(s in sys.platform for s in ['darwin', 'linux', 'bsd', 'sunos']): - platform_supported = True - include_dirs = [ - '/usr/include', - '/usr/local/include', - '/opt/include', - '/opt/local/include', - '/opt/homebrew/include', - '/opt/homebrew/opt/ta-lib/include', - ] - library_dirs = [ - '/usr/lib', - '/usr/local/lib', - '/usr/lib64', - '/usr/local/lib64', - '/opt/lib', - '/opt/local/lib', - '/opt/homebrew/lib', - '/opt/homebrew/opt/ta-lib/lib', - ] - -elif sys.platform == "win32": - platform_supported = True - lib_talib_name = 'ta_libc_cdr' - include_dirs = [r"c:\ta-lib\c\include"] - library_dirs = [r"c:\ta-lib\c\lib"] - -if 'TA_INCLUDE_PATH' in os.environ: - paths = os.environ['TA_INCLUDE_PATH'].split(os.pathsep) - include_dirs.extend(path for path in paths if path) - -if 'TA_LIBRARY_PATH' in os.environ: - paths = os.environ['TA_LIBRARY_PATH'].split(os.pathsep) - library_dirs.extend(path for path in paths if path) - -if not platform_supported: - raise NotImplementedError(sys.platform) - try: from Cython.Distutils import build_ext as cython_build_ext has_cython = True except ImportError: has_cython = False -for path in library_dirs: - try: - files = os.listdir(path) - if any(lib_talib_name in f for f in files): - break - except OSError: - pass -else: - warnings.warn('Cannot find ta-lib library, installation may fail.') - class LazyBuildExtCommandClass(dict): """ @@ -126,19 +69,34 @@ def build_extensions(self): return build_ext -cmdclass = LazyBuildExtCommandClass() - ext_modules = [ Extension( 'talib._ta_lib', - ['talib/_ta_lib.pyx' if has_cython else 'talib/_ta_lib.c'], - include_dirs=include_dirs, - library_dirs=library_dirs, - libraries=[lib_talib_name], - runtime_library_dirs=[] if sys.platform == 'win32' else library_dirs) + [ + *glob.glob('talib/upstream/src/ta_common/*.c', recursive=True), + *glob.glob('talib/upstream/src/ta_func/*.c', recursive=True), + # We can't just glob ta_abstract, as ta_abstract includes things we + # don't want like the Excel integration. + 'talib/upstream/src/ta_abstract/ta_group_idx.c', + 'talib/upstream/src/ta_abstract/ta_def_ui.c', + 'talib/upstream/src/ta_abstract/ta_abstract.c', + 'talib/upstream/src/ta_abstract/ta_func_api.c', + 'talib/upstream/src/ta_abstract/frames/ta_frame.c', + *glob.glob('talib/upstream/src/ta_abstract/tables/*.c'), + # This is our actual Python extension, everything else above is + # just the upstream ta-lib dependency. + 'talib/_ta_lib.pyx' if has_cython else 'talib/_ta_lib.c' + ], + include_dirs=[ + 'talib/upstream/include', + 'talib/upstream/src/ta_abstract', + 'talib/upstream/src/ta_abstract/frames', + 'talib/upstream/src/ta_common', + 'talib/upstream/src/ta_func' + ] + ) ] -from os import path this_directory = path.abspath(path.dirname(__file__)) with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f: long_description = f.read() @@ -181,5 +139,6 @@ def build_extensions(self): ], packages=['talib'], ext_modules=ext_modules, - cmdclass=cmdclass, - **requires) + cmdclass=LazyBuildExtCommandClass(), + **requires +) diff --git a/talib/_ta_lib.c b/talib/_ta_lib.c index bdcb1054c..77215d0d9 100644 --- a/talib/_ta_lib.c +++ b/talib/_ta_lib.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.29.25 */ +/* Generated by Cython 0.29.30 */ #ifndef PY_SSIZE_T_CLEAN #define PY_SSIZE_T_CLEAN @@ -9,8 +9,8 @@ #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) #error Cython requires Python 2.6+ or Python 3.3+. #else -#define CYTHON_ABI "0_29_25" -#define CYTHON_HEX_VERSION 0x001D19F0 +#define CYTHON_ABI "0_29_30" +#define CYTHON_HEX_VERSION 0x001D1EF0 #define CYTHON_FUTURE_DIVISION 0 #include #ifndef offsetof @@ -85,6 +85,9 @@ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900) + #endif #elif defined(PYSTON_VERSION) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_PYSTON 1 @@ -126,6 +129,9 @@ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_PYSTON 0 @@ -172,11 +178,14 @@ #ifndef CYTHON_UNPACK_METHODS #define CYTHON_UNPACK_METHODS 1 #endif - #ifndef CYTHON_FAST_THREAD_STATE + #if PY_VERSION_HEX >= 0x030B00A4 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #elif !defined(CYTHON_FAST_THREAD_STATE) #define CYTHON_FAST_THREAD_STATE 1 #endif #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030B00A1) + #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000) #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) @@ -187,9 +196,15 @@ #ifndef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) #endif - #ifndef CYTHON_USE_EXC_INFO_STACK + #if PY_VERSION_HEX >= 0x030B00A4 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) @@ -641,8 +656,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { } __Pyx_PyAsyncMethodsStruct; #endif -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif #endif #include #ifdef NAN @@ -676,14 +693,10 @@ static CYTHON_INLINE float __PYX_NAN() { #define __PYX_HAVE__talib___ta_lib #define __PYX_HAVE_API__talib___ta_lib /* Early includes */ -#if defined(WIN32) || defined(MS_WINDOWS) -#include "ta_libc.h" -#else -#include "ta-lib/ta_defs.h" -#include "ta-lib/ta_common.h" -#include "ta-lib/ta_abstract.h" -#include "ta-lib/ta_func.h" -#endif +#include "ta_defs.h" +#include "ta_common.h" +#include "ta_abstract.h" +#include "ta_func.h" #include #include #include "numpy/arrayobject.h" @@ -929,51 +942,198 @@ static const char *__pyx_f[] = { "talib/_abstract.pxi", "talib/_func.pxi", "talib/_stream.pxi", - "__init__.pxd", + ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd", "talib/_ta_lib.pyx", - "type.pxd", + "venv/lib/python3.10/site-packages/Cython/Includes/cpython/type.pxd", }; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":690 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ typedef npy_int8 __pyx_t_5numpy_int8_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":691 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ typedef npy_int16 __pyx_t_5numpy_int16_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":692 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ typedef npy_int32 __pyx_t_5numpy_int32_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":693 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ typedef npy_int64 __pyx_t_5numpy_int64_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":697 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":698 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":699 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":700 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":704 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ typedef npy_float32 __pyx_t_5numpy_float32_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":705 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ typedef npy_float64 __pyx_t_5numpy_float64_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":714 + * # The int types are mapped a bit surprising -- + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t + */ typedef npy_long __pyx_t_5numpy_int_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":715 + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong longlong_t + * + */ typedef npy_longlong __pyx_t_5numpy_long_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":716 + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_ulong uint_t + */ typedef npy_longlong __pyx_t_5numpy_longlong_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":718 + * ctypedef npy_longlong longlong_t + * + * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t + */ typedef npy_ulong __pyx_t_5numpy_uint_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":719 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ typedef npy_ulonglong __pyx_t_5numpy_ulong_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":720 + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":722 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ typedef npy_intp __pyx_t_5numpy_intp_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":723 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ typedef npy_uintp __pyx_t_5numpy_uintp_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":725 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ typedef npy_double __pyx_t_5numpy_float_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":726 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ typedef npy_double __pyx_t_5numpy_double_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":727 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cfloat cfloat_t + */ typedef npy_longdouble __pyx_t_5numpy_longdouble_t; /* Declarations.proto */ #if CYTHON_CCOMPLEX @@ -1002,12 +1162,40 @@ static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(do /*--- Type declarations ---*/ +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":729 + * ctypedef npy_longdouble longdouble_t + * + * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t + */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":730 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":731 + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cdouble complex_t + */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":733 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ typedef npy_cdouble __pyx_t_5numpy_complex_t; /* --- Runtime support code (head) --- */ @@ -1108,6 +1296,12 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, #if CYTHON_FAST_PYCALL static size_t __pyx_pyframe_localsplus_offset = 0; #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif #define __Pxy_PyFrame_Initialize_Offsets()\ ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) @@ -4871,6 +5065,13 @@ static PyObject *__pyx_codeobj__744; static PyObject *__pyx_codeobj__746; /* Late includes */ +/* "talib/_common.pxi":6 + * __ta_version__ = lib.TA_GetVersionString() + * + * cpdef _ta_check_success(str function_name, TA_RetCode ret_code): # <<<<<<<<<<<<<< + * if ret_code == 0: + * return True + */ static PyObject *__pyx_pw_5talib_7_ta_lib_1_ta_check_success(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_5talib_7_ta_lib__ta_check_success(PyObject *__pyx_v_function_name, TA_RetCode __pyx_v_ret_code, CYTHON_UNUSED int __pyx_skip_dispatch) { @@ -4884,130 +5085,417 @@ static PyObject *__pyx_f_5talib_7_ta_lib__ta_check_success(PyObject *__pyx_v_fun int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_check_success", 0); + /* "talib/_common.pxi":7 + * + * cpdef _ta_check_success(str function_name, TA_RetCode ret_code): + * if ret_code == 0: # <<<<<<<<<<<<<< + * return True + * elif ret_code == 1: + */ switch (__pyx_v_ret_code) { case 0: + /* "talib/_common.pxi":8 + * cpdef _ta_check_success(str function_name, TA_RetCode ret_code): + * if ret_code == 0: + * return True # <<<<<<<<<<<<<< + * elif ret_code == 1: + * description = 'Library Not Initialized (TA_LIB_NOT_INITIALIZE)' + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_True); __pyx_r = Py_True; goto __pyx_L0; + /* "talib/_common.pxi":7 + * + * cpdef _ta_check_success(str function_name, TA_RetCode ret_code): + * if ret_code == 0: # <<<<<<<<<<<<<< + * return True + * elif ret_code == 1: + */ break; case 1: + /* "talib/_common.pxi":10 + * return True + * elif ret_code == 1: + * description = 'Library Not Initialized (TA_LIB_NOT_INITIALIZE)' # <<<<<<<<<<<<<< + * elif ret_code == 2: + * description = 'Bad Parameter (TA_BAD_PARAM)' + */ __Pyx_INCREF(__pyx_kp_s_Library_Not_Initialized_TA_LIB_N); __pyx_v_description = __pyx_kp_s_Library_Not_Initialized_TA_LIB_N; + /* "talib/_common.pxi":9 + * if ret_code == 0: + * return True + * elif ret_code == 1: # <<<<<<<<<<<<<< + * description = 'Library Not Initialized (TA_LIB_NOT_INITIALIZE)' + * elif ret_code == 2: + */ break; case 2: + /* "talib/_common.pxi":12 + * description = 'Library Not Initialized (TA_LIB_NOT_INITIALIZE)' + * elif ret_code == 2: + * description = 'Bad Parameter (TA_BAD_PARAM)' # <<<<<<<<<<<<<< + * elif ret_code == 3: + * description = 'Allocation Error (TA_ALLOC_ERR)' + */ __Pyx_INCREF(__pyx_kp_s_Bad_Parameter_TA_BAD_PARAM); __pyx_v_description = __pyx_kp_s_Bad_Parameter_TA_BAD_PARAM; + /* "talib/_common.pxi":11 + * elif ret_code == 1: + * description = 'Library Not Initialized (TA_LIB_NOT_INITIALIZE)' + * elif ret_code == 2: # <<<<<<<<<<<<<< + * description = 'Bad Parameter (TA_BAD_PARAM)' + * elif ret_code == 3: + */ break; case 3: + /* "talib/_common.pxi":14 + * description = 'Bad Parameter (TA_BAD_PARAM)' + * elif ret_code == 3: + * description = 'Allocation Error (TA_ALLOC_ERR)' # <<<<<<<<<<<<<< + * elif ret_code == 4: + * description = 'Group Not Found (TA_GROUP_NOT_FOUND)' + */ __Pyx_INCREF(__pyx_kp_s_Allocation_Error_TA_ALLOC_ERR); __pyx_v_description = __pyx_kp_s_Allocation_Error_TA_ALLOC_ERR; + /* "talib/_common.pxi":13 + * elif ret_code == 2: + * description = 'Bad Parameter (TA_BAD_PARAM)' + * elif ret_code == 3: # <<<<<<<<<<<<<< + * description = 'Allocation Error (TA_ALLOC_ERR)' + * elif ret_code == 4: + */ break; case 4: + /* "talib/_common.pxi":16 + * description = 'Allocation Error (TA_ALLOC_ERR)' + * elif ret_code == 4: + * description = 'Group Not Found (TA_GROUP_NOT_FOUND)' # <<<<<<<<<<<<<< + * elif ret_code == 5: + * description = 'Function Not Found (TA_FUNC_NOT_FOUND)' + */ __Pyx_INCREF(__pyx_kp_s_Group_Not_Found_TA_GROUP_NOT_FOU); __pyx_v_description = __pyx_kp_s_Group_Not_Found_TA_GROUP_NOT_FOU; + /* "talib/_common.pxi":15 + * elif ret_code == 3: + * description = 'Allocation Error (TA_ALLOC_ERR)' + * elif ret_code == 4: # <<<<<<<<<<<<<< + * description = 'Group Not Found (TA_GROUP_NOT_FOUND)' + * elif ret_code == 5: + */ break; case 5: + /* "talib/_common.pxi":18 + * description = 'Group Not Found (TA_GROUP_NOT_FOUND)' + * elif ret_code == 5: + * description = 'Function Not Found (TA_FUNC_NOT_FOUND)' # <<<<<<<<<<<<<< + * elif ret_code == 6: + * description = 'Invalid Handle (TA_INVALID_HANDLE)' + */ __Pyx_INCREF(__pyx_kp_s_Function_Not_Found_TA_FUNC_NOT_F); __pyx_v_description = __pyx_kp_s_Function_Not_Found_TA_FUNC_NOT_F; + /* "talib/_common.pxi":17 + * elif ret_code == 4: + * description = 'Group Not Found (TA_GROUP_NOT_FOUND)' + * elif ret_code == 5: # <<<<<<<<<<<<<< + * description = 'Function Not Found (TA_FUNC_NOT_FOUND)' + * elif ret_code == 6: + */ break; case 6: + /* "talib/_common.pxi":20 + * description = 'Function Not Found (TA_FUNC_NOT_FOUND)' + * elif ret_code == 6: + * description = 'Invalid Handle (TA_INVALID_HANDLE)' # <<<<<<<<<<<<<< + * elif ret_code == 7: + * description = 'Invalid Parameter Holder (TA_INVALID_PARAM_HOLDER)' + */ __Pyx_INCREF(__pyx_kp_s_Invalid_Handle_TA_INVALID_HANDLE); __pyx_v_description = __pyx_kp_s_Invalid_Handle_TA_INVALID_HANDLE; + /* "talib/_common.pxi":19 + * elif ret_code == 5: + * description = 'Function Not Found (TA_FUNC_NOT_FOUND)' + * elif ret_code == 6: # <<<<<<<<<<<<<< + * description = 'Invalid Handle (TA_INVALID_HANDLE)' + * elif ret_code == 7: + */ break; case 7: + /* "talib/_common.pxi":22 + * description = 'Invalid Handle (TA_INVALID_HANDLE)' + * elif ret_code == 7: + * description = 'Invalid Parameter Holder (TA_INVALID_PARAM_HOLDER)' # <<<<<<<<<<<<<< + * elif ret_code == 8: + * description = 'Invalid Parameter Holder Type (TA_INVALID_PARAM_HOLDER_TYPE)' + */ __Pyx_INCREF(__pyx_kp_s_Invalid_Parameter_Holder_TA_INVA); __pyx_v_description = __pyx_kp_s_Invalid_Parameter_Holder_TA_INVA; + /* "talib/_common.pxi":21 + * elif ret_code == 6: + * description = 'Invalid Handle (TA_INVALID_HANDLE)' + * elif ret_code == 7: # <<<<<<<<<<<<<< + * description = 'Invalid Parameter Holder (TA_INVALID_PARAM_HOLDER)' + * elif ret_code == 8: + */ break; case 8: + /* "talib/_common.pxi":24 + * description = 'Invalid Parameter Holder (TA_INVALID_PARAM_HOLDER)' + * elif ret_code == 8: + * description = 'Invalid Parameter Holder Type (TA_INVALID_PARAM_HOLDER_TYPE)' # <<<<<<<<<<<<<< + * elif ret_code == 9: + * description = 'Invalid Parameter Function (TA_INVALID_PARAM_FUNCTION)' + */ __Pyx_INCREF(__pyx_kp_s_Invalid_Parameter_Holder_Type_TA); __pyx_v_description = __pyx_kp_s_Invalid_Parameter_Holder_Type_TA; + /* "talib/_common.pxi":23 + * elif ret_code == 7: + * description = 'Invalid Parameter Holder (TA_INVALID_PARAM_HOLDER)' + * elif ret_code == 8: # <<<<<<<<<<<<<< + * description = 'Invalid Parameter Holder Type (TA_INVALID_PARAM_HOLDER_TYPE)' + * elif ret_code == 9: + */ break; case 9: + /* "talib/_common.pxi":26 + * description = 'Invalid Parameter Holder Type (TA_INVALID_PARAM_HOLDER_TYPE)' + * elif ret_code == 9: + * description = 'Invalid Parameter Function (TA_INVALID_PARAM_FUNCTION)' # <<<<<<<<<<<<<< + * elif ret_code == 10: + * description = 'Input Not All Initialized (TA_INPUT_NOT_ALL_INITIALIZE)' + */ __Pyx_INCREF(__pyx_kp_s_Invalid_Parameter_Function_TA_IN); __pyx_v_description = __pyx_kp_s_Invalid_Parameter_Function_TA_IN; + /* "talib/_common.pxi":25 + * elif ret_code == 8: + * description = 'Invalid Parameter Holder Type (TA_INVALID_PARAM_HOLDER_TYPE)' + * elif ret_code == 9: # <<<<<<<<<<<<<< + * description = 'Invalid Parameter Function (TA_INVALID_PARAM_FUNCTION)' + * elif ret_code == 10: + */ break; case 10: + /* "talib/_common.pxi":28 + * description = 'Invalid Parameter Function (TA_INVALID_PARAM_FUNCTION)' + * elif ret_code == 10: + * description = 'Input Not All Initialized (TA_INPUT_NOT_ALL_INITIALIZE)' # <<<<<<<<<<<<<< + * elif ret_code == 11: + * description = 'Output Not All Initialized (TA_OUTPUT_NOT_ALL_INITIALIZE)' + */ __Pyx_INCREF(__pyx_kp_s_Input_Not_All_Initialized_TA_INP); __pyx_v_description = __pyx_kp_s_Input_Not_All_Initialized_TA_INP; + /* "talib/_common.pxi":27 + * elif ret_code == 9: + * description = 'Invalid Parameter Function (TA_INVALID_PARAM_FUNCTION)' + * elif ret_code == 10: # <<<<<<<<<<<<<< + * description = 'Input Not All Initialized (TA_INPUT_NOT_ALL_INITIALIZE)' + * elif ret_code == 11: + */ break; case 11: + /* "talib/_common.pxi":30 + * description = 'Input Not All Initialized (TA_INPUT_NOT_ALL_INITIALIZE)' + * elif ret_code == 11: + * description = 'Output Not All Initialized (TA_OUTPUT_NOT_ALL_INITIALIZE)' # <<<<<<<<<<<<<< + * elif ret_code == 12: + * description = 'Out-of-Range Start Index (TA_OUT_OF_RANGE_START_INDEX)' + */ __Pyx_INCREF(__pyx_kp_s_Output_Not_All_Initialized_TA_OU); __pyx_v_description = __pyx_kp_s_Output_Not_All_Initialized_TA_OU; + /* "talib/_common.pxi":29 + * elif ret_code == 10: + * description = 'Input Not All Initialized (TA_INPUT_NOT_ALL_INITIALIZE)' + * elif ret_code == 11: # <<<<<<<<<<<<<< + * description = 'Output Not All Initialized (TA_OUTPUT_NOT_ALL_INITIALIZE)' + * elif ret_code == 12: + */ break; case 12: + /* "talib/_common.pxi":32 + * description = 'Output Not All Initialized (TA_OUTPUT_NOT_ALL_INITIALIZE)' + * elif ret_code == 12: + * description = 'Out-of-Range Start Index (TA_OUT_OF_RANGE_START_INDEX)' # <<<<<<<<<<<<<< + * elif ret_code == 13: + * description = 'Out-of-Range End Index (TA_OUT_OF_RANGE_END_INDEX)' + */ __Pyx_INCREF(__pyx_kp_s_Out_of_Range_Start_Index_TA_OUT); __pyx_v_description = __pyx_kp_s_Out_of_Range_Start_Index_TA_OUT; + /* "talib/_common.pxi":31 + * elif ret_code == 11: + * description = 'Output Not All Initialized (TA_OUTPUT_NOT_ALL_INITIALIZE)' + * elif ret_code == 12: # <<<<<<<<<<<<<< + * description = 'Out-of-Range Start Index (TA_OUT_OF_RANGE_START_INDEX)' + * elif ret_code == 13: + */ break; case 13: + /* "talib/_common.pxi":34 + * description = 'Out-of-Range Start Index (TA_OUT_OF_RANGE_START_INDEX)' + * elif ret_code == 13: + * description = 'Out-of-Range End Index (TA_OUT_OF_RANGE_END_INDEX)' # <<<<<<<<<<<<<< + * elif ret_code == 14: + * description = 'Invalid List Type (TA_INVALID_LIST_TYPE)' + */ __Pyx_INCREF(__pyx_kp_s_Out_of_Range_End_Index_TA_OUT_OF); __pyx_v_description = __pyx_kp_s_Out_of_Range_End_Index_TA_OUT_OF; + /* "talib/_common.pxi":33 + * elif ret_code == 12: + * description = 'Out-of-Range Start Index (TA_OUT_OF_RANGE_START_INDEX)' + * elif ret_code == 13: # <<<<<<<<<<<<<< + * description = 'Out-of-Range End Index (TA_OUT_OF_RANGE_END_INDEX)' + * elif ret_code == 14: + */ break; case 14: + /* "talib/_common.pxi":36 + * description = 'Out-of-Range End Index (TA_OUT_OF_RANGE_END_INDEX)' + * elif ret_code == 14: + * description = 'Invalid List Type (TA_INVALID_LIST_TYPE)' # <<<<<<<<<<<<<< + * elif ret_code == 15: + * description = 'Bad Object (TA_BAD_OBJECT)' + */ __Pyx_INCREF(__pyx_kp_s_Invalid_List_Type_TA_INVALID_LIS); __pyx_v_description = __pyx_kp_s_Invalid_List_Type_TA_INVALID_LIS; + /* "talib/_common.pxi":35 + * elif ret_code == 13: + * description = 'Out-of-Range End Index (TA_OUT_OF_RANGE_END_INDEX)' + * elif ret_code == 14: # <<<<<<<<<<<<<< + * description = 'Invalid List Type (TA_INVALID_LIST_TYPE)' + * elif ret_code == 15: + */ break; case 15: + /* "talib/_common.pxi":38 + * description = 'Invalid List Type (TA_INVALID_LIST_TYPE)' + * elif ret_code == 15: + * description = 'Bad Object (TA_BAD_OBJECT)' # <<<<<<<<<<<<<< + * elif ret_code == 16: + * description = 'Not Supported (TA_NOT_SUPPORTED)' + */ __Pyx_INCREF(__pyx_kp_s_Bad_Object_TA_BAD_OBJECT); __pyx_v_description = __pyx_kp_s_Bad_Object_TA_BAD_OBJECT; + /* "talib/_common.pxi":37 + * elif ret_code == 14: + * description = 'Invalid List Type (TA_INVALID_LIST_TYPE)' + * elif ret_code == 15: # <<<<<<<<<<<<<< + * description = 'Bad Object (TA_BAD_OBJECT)' + * elif ret_code == 16: + */ break; case 16: + /* "talib/_common.pxi":40 + * description = 'Bad Object (TA_BAD_OBJECT)' + * elif ret_code == 16: + * description = 'Not Supported (TA_NOT_SUPPORTED)' # <<<<<<<<<<<<<< + * elif ret_code == 5000: + * description = 'Internal Error (TA_INTERNAL_ERROR)' + */ __Pyx_INCREF(__pyx_kp_s_Not_Supported_TA_NOT_SUPPORTED); __pyx_v_description = __pyx_kp_s_Not_Supported_TA_NOT_SUPPORTED; + /* "talib/_common.pxi":39 + * elif ret_code == 15: + * description = 'Bad Object (TA_BAD_OBJECT)' + * elif ret_code == 16: # <<<<<<<<<<<<<< + * description = 'Not Supported (TA_NOT_SUPPORTED)' + * elif ret_code == 5000: + */ break; case 0x1388: + /* "talib/_common.pxi":42 + * description = 'Not Supported (TA_NOT_SUPPORTED)' + * elif ret_code == 5000: + * description = 'Internal Error (TA_INTERNAL_ERROR)' # <<<<<<<<<<<<<< + * elif ret_code == 65535: + * description = 'Unknown Error (TA_UNKNOWN_ERR)' + */ __Pyx_INCREF(__pyx_kp_s_Internal_Error_TA_INTERNAL_ERROR); __pyx_v_description = __pyx_kp_s_Internal_Error_TA_INTERNAL_ERROR; + /* "talib/_common.pxi":41 + * elif ret_code == 16: + * description = 'Not Supported (TA_NOT_SUPPORTED)' + * elif ret_code == 5000: # <<<<<<<<<<<<<< + * description = 'Internal Error (TA_INTERNAL_ERROR)' + * elif ret_code == 65535: + */ break; case 0xFFFF: + /* "talib/_common.pxi":44 + * description = 'Internal Error (TA_INTERNAL_ERROR)' + * elif ret_code == 65535: + * description = 'Unknown Error (TA_UNKNOWN_ERR)' # <<<<<<<<<<<<<< + * else: + * description = 'Unknown Error' + */ __Pyx_INCREF(__pyx_kp_s_Unknown_Error_TA_UNKNOWN_ERR); __pyx_v_description = __pyx_kp_s_Unknown_Error_TA_UNKNOWN_ERR; + /* "talib/_common.pxi":43 + * elif ret_code == 5000: + * description = 'Internal Error (TA_INTERNAL_ERROR)' + * elif ret_code == 65535: # <<<<<<<<<<<<<< + * description = 'Unknown Error (TA_UNKNOWN_ERR)' + * else: + */ break; default: + /* "talib/_common.pxi":46 + * description = 'Unknown Error (TA_UNKNOWN_ERR)' + * else: + * description = 'Unknown Error' # <<<<<<<<<<<<<< + * raise Exception('%s function failed with error code %s: %s' % ( + * function_name, ret_code, description)) + */ __Pyx_INCREF(__pyx_kp_s_Unknown_Error); __pyx_v_description = __pyx_kp_s_Unknown_Error; break; } + /* "talib/_common.pxi":48 + * description = 'Unknown Error' + * raise Exception('%s function failed with error code %s: %s' % ( + * function_name, ret_code, description)) # <<<<<<<<<<<<<< + * + * def _ta_initialize(): + */ __pyx_t_1 = __Pyx_PyInt_From_TA_RetCode(__pyx_v_ret_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error) @@ -5022,6 +5510,13 @@ static PyObject *__pyx_f_5talib_7_ta_lib__ta_check_success(PyObject *__pyx_v_fun PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_description); __pyx_t_1 = 0; + /* "talib/_common.pxi":47 + * else: + * description = 'Unknown Error' + * raise Exception('%s function failed with error code %s: %s' % ( # <<<<<<<<<<<<<< + * function_name, ret_code, description)) + * + */ __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_function_failed_with_error_co, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -5032,6 +5527,13 @@ static PyObject *__pyx_f_5talib_7_ta_lib__ta_check_success(PyObject *__pyx_v_fun __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 47, __pyx_L1_error) + /* "talib/_common.pxi":6 + * __ta_version__ = lib.TA_GetVersionString() + * + * cpdef _ta_check_success(str function_name, TA_RetCode ret_code): # <<<<<<<<<<<<<< + * if ret_code == 0: + * return True + */ /* function exit code */ __pyx_L1_error:; @@ -5141,6 +5643,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib__ta_check_success(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_common.pxi":50 + * function_name, ret_code, description)) + * + * def _ta_initialize(): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Initialize() + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_3_ta_initialize(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ @@ -5166,12 +5675,33 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_2_ta_initialize(CYTHON_UNUSED PyObject int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_initialize", 0); + /* "talib/_common.pxi":52 + * def _ta_initialize(): + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Initialize() # <<<<<<<<<<<<<< + * _ta_check_success('TA_Initialize', ret_code) + * + */ __pyx_v_ret_code = TA_Initialize(); + /* "talib/_common.pxi":53 + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Initialize() + * _ta_check_success('TA_Initialize', ret_code) # <<<<<<<<<<<<<< + * + * def _ta_shutdown(): + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_Initialize, __pyx_v_ret_code, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_common.pxi":50 + * function_name, ret_code, description)) + * + * def _ta_initialize(): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Initialize() + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -5186,6 +5716,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_2_ta_initialize(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_common.pxi":55 + * _ta_check_success('TA_Initialize', ret_code) + * + * def _ta_shutdown(): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Shutdown() + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_5_ta_shutdown(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ @@ -5211,12 +5748,33 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_4_ta_shutdown(CYTHON_UNUSED PyObject * int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_shutdown", 0); + /* "talib/_common.pxi":57 + * def _ta_shutdown(): + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Shutdown() # <<<<<<<<<<<<<< + * _ta_check_success('TA_Shutdown', ret_code) + * + */ __pyx_v_ret_code = TA_Shutdown(); + /* "talib/_common.pxi":58 + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Shutdown() + * _ta_check_success('TA_Shutdown', ret_code) # <<<<<<<<<<<<<< + * + * class MA_Type(object): + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_Shutdown, __pyx_v_ret_code, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_common.pxi":55 + * _ta_check_success('TA_Initialize', ret_code) + * + * def _ta_shutdown(): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Shutdown() + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -5231,6 +5789,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_4_ta_shutdown(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_common.pxi":63 + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) + * + * def __init__(self): # <<<<<<<<<<<<<< + * self._lookup = { + * MA_Type.SMA: 'Simple Moving Average', + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_7MA_Type_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -5257,6 +5822,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__init__", 0); + /* "talib/_common.pxi":65 + * def __init__(self): + * self._lookup = { + * MA_Type.SMA: 'Simple Moving Average', # <<<<<<<<<<<<<< + * MA_Type.EMA: 'Exponential Moving Average', + * MA_Type.WMA: 'Weighted Moving Average', + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) @@ -5267,6 +5839,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_kp_s_Simple_Moving_Average) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":66 + * self._lookup = { + * MA_Type.SMA: 'Simple Moving Average', + * MA_Type.EMA: 'Exponential Moving Average', # <<<<<<<<<<<<<< + * MA_Type.WMA: 'Weighted Moving Average', + * MA_Type.DEMA: 'Double Exponential Moving Average', + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_EMA); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error) @@ -5275,6 +5854,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_kp_s_Exponential_Moving_Average) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":67 + * MA_Type.SMA: 'Simple Moving Average', + * MA_Type.EMA: 'Exponential Moving Average', + * MA_Type.WMA: 'Weighted Moving Average', # <<<<<<<<<<<<<< + * MA_Type.DEMA: 'Double Exponential Moving Average', + * MA_Type.TEMA: 'Triple Exponential Moving Average', + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_WMA); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 67, __pyx_L1_error) @@ -5283,6 +5869,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_kp_s_Weighted_Moving_Average) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":68 + * MA_Type.EMA: 'Exponential Moving Average', + * MA_Type.WMA: 'Weighted Moving Average', + * MA_Type.DEMA: 'Double Exponential Moving Average', # <<<<<<<<<<<<<< + * MA_Type.TEMA: 'Triple Exponential Moving Average', + * MA_Type.TRIMA: 'Triangular Moving Average', + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DEMA); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 68, __pyx_L1_error) @@ -5291,6 +5884,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_kp_s_Double_Exponential_Moving_Averag) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":69 + * MA_Type.WMA: 'Weighted Moving Average', + * MA_Type.DEMA: 'Double Exponential Moving Average', + * MA_Type.TEMA: 'Triple Exponential Moving Average', # <<<<<<<<<<<<<< + * MA_Type.TRIMA: 'Triangular Moving Average', + * MA_Type.KAMA: 'Kaufman Adaptive Moving Average', + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_TEMA); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) @@ -5299,6 +5899,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_kp_s_Triple_Exponential_Moving_Averag) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":70 + * MA_Type.DEMA: 'Double Exponential Moving Average', + * MA_Type.TEMA: 'Triple Exponential Moving Average', + * MA_Type.TRIMA: 'Triangular Moving Average', # <<<<<<<<<<<<<< + * MA_Type.KAMA: 'Kaufman Adaptive Moving Average', + * MA_Type.MAMA: 'MESA Adaptive Moving Average', + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_TRIMA); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) @@ -5307,6 +5914,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_kp_s_Triangular_Moving_Average) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":71 + * MA_Type.TEMA: 'Triple Exponential Moving Average', + * MA_Type.TRIMA: 'Triangular Moving Average', + * MA_Type.KAMA: 'Kaufman Adaptive Moving Average', # <<<<<<<<<<<<<< + * MA_Type.MAMA: 'MESA Adaptive Moving Average', + * MA_Type.T3: 'Triple Generalized Double Exponential Moving Average', + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_KAMA); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error) @@ -5315,6 +5929,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_kp_s_Kaufman_Adaptive_Moving_Average) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":72 + * MA_Type.TRIMA: 'Triangular Moving Average', + * MA_Type.KAMA: 'Kaufman Adaptive Moving Average', + * MA_Type.MAMA: 'MESA Adaptive Moving Average', # <<<<<<<<<<<<<< + * MA_Type.T3: 'Triple Generalized Double Exponential Moving Average', + * } + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_MAMA); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 72, __pyx_L1_error) @@ -5323,6 +5944,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_kp_s_MESA_Adaptive_Moving_Average) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":73 + * MA_Type.KAMA: 'Kaufman Adaptive Moving Average', + * MA_Type.MAMA: 'MESA Adaptive Moving Average', + * MA_Type.T3: 'Triple Generalized Double Exponential Moving Average', # <<<<<<<<<<<<<< + * } + * + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 73, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_T3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) @@ -5331,9 +5959,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_kp_s_Triple_Generalized_Double_Expone) < 0) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":64 + * + * def __init__(self): + * self._lookup = { # <<<<<<<<<<<<<< + * MA_Type.SMA: 'Simple Moving Average', + * MA_Type.EMA: 'Exponential Moving Average', + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lookup, __pyx_t_1) < 0) __PYX_ERR(0, 64, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_common.pxi":63 + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) + * + * def __init__(self): # <<<<<<<<<<<<<< + * self._lookup = { + * MA_Type.SMA: 'Simple Moving Average', + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -5350,6 +5992,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_common.pxi":76 + * } + * + * def __getitem__(self, type_): # <<<<<<<<<<<<<< + * return self._lookup[type_] + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_7MA_Type_3__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -5426,6 +6075,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type_2__getitem__(CYTHON_UNUSED Py int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__getitem__", 0); + /* "talib/_common.pxi":77 + * + * def __getitem__(self, type_): + * return self._lookup[type_] # <<<<<<<<<<<<<< + * + * MA_Type = MA_Type() + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lookup); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -5436,6 +6092,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type_2__getitem__(CYTHON_UNUSED Py __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_common.pxi":76 + * } + * + * def __getitem__(self, type_): # <<<<<<<<<<<<<< + * return self._lookup[type_] + * + */ /* function exit code */ __pyx_L1_error:; @@ -5449,6 +6112,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type_2__getitem__(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_common.pxi":90 + * _ta_func_unst_ids[name] = i + * + * def _ta_set_unstable_period(name, period): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_7_ta_set_unstable_period(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -5529,6 +6199,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_6_ta_set_unstable_period(CYTHON_UNUSED int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_set_unstable_period", 0); + /* "talib/_common.pxi":92 + * def _ta_set_unstable_period(name, period): + * cdef TA_RetCode ret_code + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] # <<<<<<<<<<<<<< + * ret_code = lib.TA_SetUnstablePeriod(id, period) + * _ta_check_success('TA_SetUnstablePeriod', ret_code) + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ta_func_unst_ids); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error) @@ -5538,13 +6215,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_6_ta_set_unstable_period(CYTHON_UNUSED __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_id = __pyx_t_3; + /* "talib/_common.pxi":93 + * cdef TA_RetCode ret_code + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + * ret_code = lib.TA_SetUnstablePeriod(id, period) # <<<<<<<<<<<<<< + * _ta_check_success('TA_SetUnstablePeriod', ret_code) + * + */ __pyx_t_4 = __Pyx_PyInt_As_unsigned_int(__pyx_v_period); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L1_error) __pyx_v_ret_code = TA_SetUnstablePeriod(__pyx_v_id, __pyx_t_4); + /* "talib/_common.pxi":94 + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + * ret_code = lib.TA_SetUnstablePeriod(id, period) + * _ta_check_success('TA_SetUnstablePeriod', ret_code) # <<<<<<<<<<<<<< + * + * def _ta_get_unstable_period(name): + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SetUnstablePeriod, __pyx_v_ret_code, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 94, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":90 + * _ta_func_unst_ids[name] = i + * + * def _ta_set_unstable_period(name, period): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -5560,6 +6258,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_6_ta_set_unstable_period(CYTHON_UNUSED return __pyx_r; } +/* "talib/_common.pxi":96 + * _ta_check_success('TA_SetUnstablePeriod', ret_code) + * + * def _ta_get_unstable_period(name): # <<<<<<<<<<<<<< + * cdef unsigned int period + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_9_ta_get_unstable_period(PyObject *__pyx_self, PyObject *__pyx_v_name); /*proto*/ @@ -5588,6 +6293,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8_ta_get_unstable_period(CYTHON_UNUSED int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_get_unstable_period", 0); + /* "talib/_common.pxi":98 + * def _ta_get_unstable_period(name): + * cdef unsigned int period + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] # <<<<<<<<<<<<<< + * period = lib.TA_GetUnstablePeriod(id) + * return period + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ta_func_unst_ids); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 98, __pyx_L1_error) @@ -5597,8 +6309,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8_ta_get_unstable_period(CYTHON_UNUSED __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_id = __pyx_t_3; + /* "talib/_common.pxi":99 + * cdef unsigned int period + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + * period = lib.TA_GetUnstablePeriod(id) # <<<<<<<<<<<<<< + * return period + * + */ __pyx_v_period = TA_GetUnstablePeriod(__pyx_v_id); + /* "talib/_common.pxi":100 + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + * period = lib.TA_GetUnstablePeriod(id) + * return period # <<<<<<<<<<<<<< + * + * def _ta_set_compatibility(value): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_period); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -5606,6 +6332,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8_ta_get_unstable_period(CYTHON_UNUSED __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_common.pxi":96 + * _ta_check_success('TA_SetUnstablePeriod', ret_code) + * + * def _ta_get_unstable_period(name): # <<<<<<<<<<<<<< + * cdef unsigned int period + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + */ /* function exit code */ __pyx_L1_error:; @@ -5619,6 +6352,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8_ta_get_unstable_period(CYTHON_UNUSED return __pyx_r; } +/* "talib/_common.pxi":102 + * return period + * + * def _ta_set_compatibility(value): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCompatibility(value) + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_11_ta_set_compatibility(PyObject *__pyx_self, PyObject *__pyx_v_value); /*proto*/ @@ -5645,13 +6385,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_10_ta_set_compatibility(CYTHON_UNUSED int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_set_compatibility", 0); + /* "talib/_common.pxi":104 + * def _ta_set_compatibility(value): + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCompatibility(value) # <<<<<<<<<<<<<< + * _ta_check_success('TA_SetCompatibility', ret_code) + * + */ __pyx_t_1 = __Pyx_PyInt_As_TA_Compatibility(__pyx_v_value); if (unlikely((__pyx_t_1 == ((TA_Compatibility)-1)) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error) __pyx_v_ret_code = TA_SetCompatibility(__pyx_t_1); + /* "talib/_common.pxi":105 + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCompatibility(value) + * _ta_check_success('TA_SetCompatibility', ret_code) # <<<<<<<<<<<<<< + * + * def _ta_get_compatibility(): + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SetCompatibility, __pyx_v_ret_code, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":102 + * return period + * + * def _ta_set_compatibility(value): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCompatibility(value) + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -5666,6 +6427,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_10_ta_set_compatibility(CYTHON_UNUSED return __pyx_r; } +/* "talib/_common.pxi":107 + * _ta_check_success('TA_SetCompatibility', ret_code) + * + * def _ta_get_compatibility(): # <<<<<<<<<<<<<< + * cdef int value + * value = lib.TA_GetCompatibility() + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_13_ta_get_compatibility(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ @@ -5691,8 +6459,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_12_ta_get_compatibility(CYTHON_UNUSED int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_get_compatibility", 0); + /* "talib/_common.pxi":109 + * def _ta_get_compatibility(): + * cdef int value + * value = lib.TA_GetCompatibility() # <<<<<<<<<<<<<< + * return value + * + */ __pyx_v_value = TA_GetCompatibility(); + /* "talib/_common.pxi":110 + * cdef int value + * value = lib.TA_GetCompatibility() + * return value # <<<<<<<<<<<<<< + * + * class CandleSettingType(object): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -5700,6 +6482,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_12_ta_get_compatibility(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_common.pxi":107 + * _ta_check_success('TA_SetCompatibility', ret_code) + * + * def _ta_get_compatibility(): # <<<<<<<<<<<<<< + * cdef int value + * value = lib.TA_GetCompatibility() + */ /* function exit code */ __pyx_L1_error:; @@ -5712,6 +6501,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_12_ta_get_compatibility(CYTHON_UNUSED return __pyx_r; } +/* "talib/_common.pxi":124 + * RangeType = RangeType() + * + * def _ta_set_candle_settings(settingtype, rangetype, avgperiod, factor): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCandleSettings(settingtype, rangetype, avgperiod, factor) + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_15_ta_set_candle_settings(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -5814,16 +6610,37 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_14_ta_set_candle_settings(CYTHON_UNUSE int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_set_candle_settings", 0); + /* "talib/_common.pxi":126 + * def _ta_set_candle_settings(settingtype, rangetype, avgperiod, factor): + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCandleSettings(settingtype, rangetype, avgperiod, factor) # <<<<<<<<<<<<<< + * _ta_check_success('TA_SetCandleSettings', ret_code) + * + */ __pyx_t_1 = __Pyx_PyInt_As_TA_CandleSettingType(__pyx_v_settingtype); if (unlikely((__pyx_t_1 == ((TA_CandleSettingType)-1)) && PyErr_Occurred())) __PYX_ERR(0, 126, __pyx_L1_error) __pyx_t_2 = __Pyx_PyInt_As_TA_RangeType(__pyx_v_rangetype); if (unlikely((__pyx_t_2 == ((TA_RangeType)-1)) && PyErr_Occurred())) __PYX_ERR(0, 126, __pyx_L1_error) __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_avgperiod); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 126, __pyx_L1_error) __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_factor); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 126, __pyx_L1_error) __pyx_v_ret_code = TA_SetCandleSettings(__pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4); + /* "talib/_common.pxi":127 + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCandleSettings(settingtype, rangetype, avgperiod, factor) + * _ta_check_success('TA_SetCandleSettings', ret_code) # <<<<<<<<<<<<<< + * + * def _ta_restore_candle_default_settings(settingtype): + */ __pyx_t_5 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SetCandleSettings, __pyx_v_ret_code, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + /* "talib/_common.pxi":124 + * RangeType = RangeType() + * + * def _ta_set_candle_settings(settingtype, rangetype, avgperiod, factor): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCandleSettings(settingtype, rangetype, avgperiod, factor) + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -5838,6 +6655,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_14_ta_set_candle_settings(CYTHON_UNUSE return __pyx_r; } +/* "talib/_common.pxi":129 + * _ta_check_success('TA_SetCandleSettings', ret_code) + * + * def _ta_restore_candle_default_settings(settingtype): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_RestoreCandleDefaultSettings(settingtype) + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_17_ta_restore_candle_default_settings(PyObject *__pyx_self, PyObject *__pyx_v_settingtype); /*proto*/ @@ -5864,13 +6688,31 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_16_ta_restore_candle_default_settings( int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_restore_candle_default_settings", 0); + /* "talib/_common.pxi":131 + * def _ta_restore_candle_default_settings(settingtype): + * cdef TA_RetCode ret_code + * ret_code = lib.TA_RestoreCandleDefaultSettings(settingtype) # <<<<<<<<<<<<<< + * _ta_check_success('TA_RestoreCandleDefaultSettings', ret_code) + */ __pyx_t_1 = __Pyx_PyInt_As_TA_CandleSettingType(__pyx_v_settingtype); if (unlikely((__pyx_t_1 == ((TA_CandleSettingType)-1)) && PyErr_Occurred())) __PYX_ERR(0, 131, __pyx_L1_error) __pyx_v_ret_code = TA_RestoreCandleDefaultSettings(__pyx_t_1); + /* "talib/_common.pxi":132 + * cdef TA_RetCode ret_code + * ret_code = lib.TA_RestoreCandleDefaultSettings(settingtype) + * _ta_check_success('TA_RestoreCandleDefaultSettings', ret_code) # <<<<<<<<<<<<<< + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_RestoreCandleDefaultSettings, __pyx_v_ret_code, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":129 + * _ta_check_success('TA_SetCandleSettings', ret_code) + * + * def _ta_restore_candle_default_settings(settingtype): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_RestoreCandleDefaultSettings(settingtype) + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -5885,6 +6727,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_16_ta_restore_candle_default_settings( return __pyx_r; } +/* "talib/_func.pxi":20 + * from _ta_lib cimport TA_RetCode + * + * cdef np.ndarray check_array(np.ndarray real): # <<<<<<<<<<<<<< + * if PyArray_TYPE(real) != np.NPY_DOUBLE: + * raise Exception("input array type is not double") + */ static PyArrayObject *__pyx_f_5talib_7_ta_lib_check_array(PyArrayObject *__pyx_v_real) { PyArrayObject *__pyx_r = NULL; @@ -5897,43 +6746,120 @@ static PyArrayObject *__pyx_f_5talib_7_ta_lib_check_array(PyArrayObject *__pyx_v __Pyx_RefNannySetupContext("check_array", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":21 + * + * cdef np.ndarray check_array(np.ndarray real): + * if PyArray_TYPE(real) != np.NPY_DOUBLE: # <<<<<<<<<<<<<< + * raise Exception("input array type is not double") + * if real.ndim != 1: + */ __pyx_t_1 = ((PyArray_TYPE(__pyx_v_real) != NPY_DOUBLE) != 0); if (unlikely(__pyx_t_1)) { + /* "talib/_func.pxi":22 + * cdef np.ndarray check_array(np.ndarray real): + * if PyArray_TYPE(real) != np.NPY_DOUBLE: + * raise Exception("input array type is not double") # <<<<<<<<<<<<<< + * if real.ndim != 1: + * raise Exception("input array has wrong dimensions") + */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 22, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 22, __pyx_L1_error) + /* "talib/_func.pxi":21 + * + * cdef np.ndarray check_array(np.ndarray real): + * if PyArray_TYPE(real) != np.NPY_DOUBLE: # <<<<<<<<<<<<<< + * raise Exception("input array type is not double") + * if real.ndim != 1: + */ } + /* "talib/_func.pxi":23 + * if PyArray_TYPE(real) != np.NPY_DOUBLE: + * raise Exception("input array type is not double") + * if real.ndim != 1: # <<<<<<<<<<<<<< + * raise Exception("input array has wrong dimensions") + * if not (PyArray_FLAGS(real) & np.NPY_C_CONTIGUOUS): + */ __pyx_t_1 = ((__pyx_v_real->nd != 1) != 0); if (unlikely(__pyx_t_1)) { + /* "talib/_func.pxi":24 + * raise Exception("input array type is not double") + * if real.ndim != 1: + * raise Exception("input array has wrong dimensions") # <<<<<<<<<<<<<< + * if not (PyArray_FLAGS(real) & np.NPY_C_CONTIGUOUS): + * real = PyArray_GETCONTIGUOUS(real) + */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 24, __pyx_L1_error) + /* "talib/_func.pxi":23 + * if PyArray_TYPE(real) != np.NPY_DOUBLE: + * raise Exception("input array type is not double") + * if real.ndim != 1: # <<<<<<<<<<<<<< + * raise Exception("input array has wrong dimensions") + * if not (PyArray_FLAGS(real) & np.NPY_C_CONTIGUOUS): + */ } + /* "talib/_func.pxi":25 + * if real.ndim != 1: + * raise Exception("input array has wrong dimensions") + * if not (PyArray_FLAGS(real) & np.NPY_C_CONTIGUOUS): # <<<<<<<<<<<<<< + * real = PyArray_GETCONTIGUOUS(real) + * return real + */ __pyx_t_1 = ((!((PyArray_FLAGS(__pyx_v_real) & NPY_C_CONTIGUOUS) != 0)) != 0); if (__pyx_t_1) { + /* "talib/_func.pxi":26 + * raise Exception("input array has wrong dimensions") + * if not (PyArray_FLAGS(real) & np.NPY_C_CONTIGUOUS): + * real = PyArray_GETCONTIGUOUS(real) # <<<<<<<<<<<<<< + * return real + * + */ __pyx_t_2 = ((PyObject *)PyArray_GETCONTIGUOUS(__pyx_v_real)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_2)); __pyx_t_2 = 0; + /* "talib/_func.pxi":25 + * if real.ndim != 1: + * raise Exception("input array has wrong dimensions") + * if not (PyArray_FLAGS(real) & np.NPY_C_CONTIGUOUS): # <<<<<<<<<<<<<< + * real = PyArray_GETCONTIGUOUS(real) + * return real + */ } + /* "talib/_func.pxi":27 + * if not (PyArray_FLAGS(real) & np.NPY_C_CONTIGUOUS): + * real = PyArray_GETCONTIGUOUS(real) + * return real # <<<<<<<<<<<<<< + * + * cdef np.npy_intp check_length2(np.ndarray a1, np.ndarray a2) except -1: + */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __Pyx_INCREF(((PyObject *)__pyx_v_real)); __pyx_r = __pyx_v_real; goto __pyx_L0; + /* "talib/_func.pxi":20 + * from _ta_lib cimport TA_RetCode + * + * cdef np.ndarray check_array(np.ndarray real): # <<<<<<<<<<<<<< + * if PyArray_TYPE(real) != np.NPY_DOUBLE: + * raise Exception("input array type is not double") + */ /* function exit code */ __pyx_L1_error:; @@ -5947,6 +6873,13 @@ static PyArrayObject *__pyx_f_5talib_7_ta_lib_check_array(PyArrayObject *__pyx_v return __pyx_r; } +/* "talib/_func.pxi":29 + * return real + * + * cdef np.npy_intp check_length2(np.ndarray a1, np.ndarray a2) except -1: # <<<<<<<<<<<<<< + * cdef: + * np.npy_intp length + */ static npy_intp __pyx_f_5talib_7_ta_lib_check_length2(PyArrayObject *__pyx_v_a1, PyArrayObject *__pyx_v_a2) { npy_intp __pyx_v_length; @@ -5959,22 +6892,64 @@ static npy_intp __pyx_f_5talib_7_ta_lib_check_length2(PyArrayObject *__pyx_v_a1, int __pyx_clineno = 0; __Pyx_RefNannySetupContext("check_length2", 0); + /* "talib/_func.pxi":32 + * cdef: + * np.npy_intp length + * length = a1.shape[0] # <<<<<<<<<<<<<< + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") + */ __pyx_v_length = (__pyx_v_a1->dimensions[0]); + /* "talib/_func.pxi":33 + * np.npy_intp length + * length = a1.shape[0] + * if length != a2.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * return length + */ __pyx_t_1 = ((__pyx_v_length != (__pyx_v_a2->dimensions[0])) != 0); if (unlikely(__pyx_t_1)) { + /* "talib/_func.pxi":34 + * length = a1.shape[0] + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") # <<<<<<<<<<<<<< + * return length + * + */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 34, __pyx_L1_error) + /* "talib/_func.pxi":33 + * np.npy_intp length + * length = a1.shape[0] + * if length != a2.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * return length + */ } + /* "talib/_func.pxi":35 + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") + * return length # <<<<<<<<<<<<<< + * + * cdef np.npy_intp check_length3(np.ndarray a1, np.ndarray a2, np.ndarray a3) except -1: + */ __pyx_r = __pyx_v_length; goto __pyx_L0; + /* "talib/_func.pxi":29 + * return real + * + * cdef np.npy_intp check_length2(np.ndarray a1, np.ndarray a2) except -1: # <<<<<<<<<<<<<< + * cdef: + * np.npy_intp length + */ /* function exit code */ __pyx_L1_error:; @@ -5986,6 +6961,13 @@ static npy_intp __pyx_f_5talib_7_ta_lib_check_length2(PyArrayObject *__pyx_v_a1, return __pyx_r; } +/* "talib/_func.pxi":37 + * return length + * + * cdef np.npy_intp check_length3(np.ndarray a1, np.ndarray a2, np.ndarray a3) except -1: # <<<<<<<<<<<<<< + * cdef: + * np.npy_intp length + */ static npy_intp __pyx_f_5talib_7_ta_lib_check_length3(PyArrayObject *__pyx_v_a1, PyArrayObject *__pyx_v_a2, PyArrayObject *__pyx_v_a3) { npy_intp __pyx_v_length; @@ -5998,33 +6980,96 @@ static npy_intp __pyx_f_5talib_7_ta_lib_check_length3(PyArrayObject *__pyx_v_a1, int __pyx_clineno = 0; __Pyx_RefNannySetupContext("check_length3", 0); + /* "talib/_func.pxi":40 + * cdef: + * np.npy_intp length + * length = a1.shape[0] # <<<<<<<<<<<<<< + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") + */ __pyx_v_length = (__pyx_v_a1->dimensions[0]); + /* "talib/_func.pxi":41 + * np.npy_intp length + * length = a1.shape[0] + * if length != a2.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: + */ __pyx_t_1 = ((__pyx_v_length != (__pyx_v_a2->dimensions[0])) != 0); if (unlikely(__pyx_t_1)) { + /* "talib/_func.pxi":42 + * length = a1.shape[0] + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") # <<<<<<<<<<<<<< + * if length != a3.shape[0]: + * raise Exception("input array lengths are different") + */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 42, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 42, __pyx_L1_error) + /* "talib/_func.pxi":41 + * np.npy_intp length + * length = a1.shape[0] + * if length != a2.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: + */ } + /* "talib/_func.pxi":43 + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * return length + */ __pyx_t_1 = ((__pyx_v_length != (__pyx_v_a3->dimensions[0])) != 0); if (unlikely(__pyx_t_1)) { + /* "talib/_func.pxi":44 + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: + * raise Exception("input array lengths are different") # <<<<<<<<<<<<<< + * return length + * + */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 44, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 44, __pyx_L1_error) + /* "talib/_func.pxi":43 + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * return length + */ } + /* "talib/_func.pxi":45 + * if length != a3.shape[0]: + * raise Exception("input array lengths are different") + * return length # <<<<<<<<<<<<<< + * + * cdef np.npy_intp check_length4(np.ndarray a1, np.ndarray a2, np.ndarray a3, np.ndarray a4) except -1: + */ __pyx_r = __pyx_v_length; goto __pyx_L0; + /* "talib/_func.pxi":37 + * return length + * + * cdef np.npy_intp check_length3(np.ndarray a1, np.ndarray a2, np.ndarray a3) except -1: # <<<<<<<<<<<<<< + * cdef: + * np.npy_intp length + */ /* function exit code */ __pyx_L1_error:; @@ -6036,6 +7081,13 @@ static npy_intp __pyx_f_5talib_7_ta_lib_check_length3(PyArrayObject *__pyx_v_a1, return __pyx_r; } +/* "talib/_func.pxi":47 + * return length + * + * cdef np.npy_intp check_length4(np.ndarray a1, np.ndarray a2, np.ndarray a3, np.ndarray a4) except -1: # <<<<<<<<<<<<<< + * cdef: + * np.npy_intp length + */ static npy_intp __pyx_f_5talib_7_ta_lib_check_length4(PyArrayObject *__pyx_v_a1, PyArrayObject *__pyx_v_a2, PyArrayObject *__pyx_v_a3, PyArrayObject *__pyx_v_a4) { npy_intp __pyx_v_length; @@ -6048,44 +7100,128 @@ static npy_intp __pyx_f_5talib_7_ta_lib_check_length4(PyArrayObject *__pyx_v_a1, int __pyx_clineno = 0; __Pyx_RefNannySetupContext("check_length4", 0); + /* "talib/_func.pxi":50 + * cdef: + * np.npy_intp length + * length = a1.shape[0] # <<<<<<<<<<<<<< + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") + */ __pyx_v_length = (__pyx_v_a1->dimensions[0]); + /* "talib/_func.pxi":51 + * np.npy_intp length + * length = a1.shape[0] + * if length != a2.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: + */ __pyx_t_1 = ((__pyx_v_length != (__pyx_v_a2->dimensions[0])) != 0); if (unlikely(__pyx_t_1)) { + /* "talib/_func.pxi":52 + * length = a1.shape[0] + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") # <<<<<<<<<<<<<< + * if length != a3.shape[0]: + * raise Exception("input array lengths are different") + */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 52, __pyx_L1_error) + /* "talib/_func.pxi":51 + * np.npy_intp length + * length = a1.shape[0] + * if length != a2.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: + */ } + /* "talib/_func.pxi":53 + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * if length != a4.shape[0]: + */ __pyx_t_1 = ((__pyx_v_length != (__pyx_v_a3->dimensions[0])) != 0); if (unlikely(__pyx_t_1)) { + /* "talib/_func.pxi":54 + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: + * raise Exception("input array lengths are different") # <<<<<<<<<<<<<< + * if length != a4.shape[0]: + * raise Exception("input array lengths are different") + */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 54, __pyx_L1_error) + /* "talib/_func.pxi":53 + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") + * if length != a3.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * if length != a4.shape[0]: + */ } + /* "talib/_func.pxi":55 + * if length != a3.shape[0]: + * raise Exception("input array lengths are different") + * if length != a4.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * return length + */ __pyx_t_1 = ((__pyx_v_length != (__pyx_v_a4->dimensions[0])) != 0); if (unlikely(__pyx_t_1)) { + /* "talib/_func.pxi":56 + * raise Exception("input array lengths are different") + * if length != a4.shape[0]: + * raise Exception("input array lengths are different") # <<<<<<<<<<<<<< + * return length + * + */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 56, __pyx_L1_error) + /* "talib/_func.pxi":55 + * if length != a3.shape[0]: + * raise Exception("input array lengths are different") + * if length != a4.shape[0]: # <<<<<<<<<<<<<< + * raise Exception("input array lengths are different") + * return length + */ } + /* "talib/_func.pxi":57 + * if length != a4.shape[0]: + * raise Exception("input array lengths are different") + * return length # <<<<<<<<<<<<<< + * + * cdef np.npy_int check_begidx1(np.npy_intp length, double* a1) except -1: + */ __pyx_r = __pyx_v_length; goto __pyx_L0; + /* "talib/_func.pxi":47 + * return length + * + * cdef np.npy_intp check_length4(np.ndarray a1, np.ndarray a2, np.ndarray a3, np.ndarray a4) except -1: # <<<<<<<<<<<<<< + * cdef: + * np.npy_intp length + */ /* function exit code */ __pyx_L1_error:; @@ -6097,6 +7233,13 @@ static npy_intp __pyx_f_5talib_7_ta_lib_check_length4(PyArrayObject *__pyx_v_a1, return __pyx_r; } +/* "talib/_func.pxi":59 + * return length + * + * cdef np.npy_int check_begidx1(np.npy_intp length, double* a1) except -1: # <<<<<<<<<<<<<< + * cdef: + * double val + */ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx1(npy_intp __pyx_v_length, double *__pyx_v_a1) { double __pyx_v_val; @@ -6111,24 +7254,73 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx1(npy_intp __pyx_v_length, do int __pyx_clineno = 0; __Pyx_RefNannySetupContext("check_begidx1", 0); + /* "talib/_func.pxi":62 + * cdef: + * double val + * for i from 0 <= i < length: # <<<<<<<<<<<<<< + * val = a1[i] + * if val != val: + */ __pyx_t_1 = __pyx_v_length; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) { + /* "talib/_func.pxi":63 + * double val + * for i from 0 <= i < length: + * val = a1[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a1[__pyx_v_i]); + /* "talib/_func.pxi":64 + * for i from 0 <= i < length: + * val = a1[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * return i + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":65 + * val = a1[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * return i + * else: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":64 + * for i from 0 <= i < length: + * val = a1[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * return i + */ + } + + /* "talib/_func.pxi":66 + * if val != val: + * continue + * return i # <<<<<<<<<<<<<< + * else: + * raise Exception("inputs are all NaN") + */ __pyx_r = __pyx_v_i; goto __pyx_L0; __pyx_L3_continue:; } /*else*/ { + /* "talib/_func.pxi":68 + * return i + * else: + * raise Exception("inputs are all NaN") # <<<<<<<<<<<<<< + * + * cdef np.npy_int check_begidx2(np.npy_intp length, double* a1, double* a2) except -1: + */ __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); @@ -6136,6 +7328,13 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx1(npy_intp __pyx_v_length, do __PYX_ERR(2, 68, __pyx_L1_error) } + /* "talib/_func.pxi":59 + * return length + * + * cdef np.npy_int check_begidx1(np.npy_intp length, double* a1) except -1: # <<<<<<<<<<<<<< + * cdef: + * double val + */ /* function exit code */ __pyx_L1_error:; @@ -6147,6 +7346,13 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx1(npy_intp __pyx_v_length, do return __pyx_r; } +/* "talib/_func.pxi":70 + * raise Exception("inputs are all NaN") + * + * cdef np.npy_int check_begidx2(np.npy_intp length, double* a1, double* a2) except -1: # <<<<<<<<<<<<<< + * cdef: + * double val + */ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx2(npy_intp __pyx_v_length, double *__pyx_v_a1, double *__pyx_v_a2) { double __pyx_v_val; @@ -6161,33 +7367,110 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx2(npy_intp __pyx_v_length, do int __pyx_clineno = 0; __Pyx_RefNannySetupContext("check_begidx2", 0); + /* "talib/_func.pxi":73 + * cdef: + * double val + * for i from 0 <= i < length: # <<<<<<<<<<<<<< + * val = a1[i] + * if val != val: + */ __pyx_t_1 = __pyx_v_length; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) { + /* "talib/_func.pxi":74 + * double val + * for i from 0 <= i < length: + * val = a1[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a1[__pyx_v_i]); + /* "talib/_func.pxi":75 + * for i from 0 <= i < length: + * val = a1[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a2[i] + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":76 + * val = a1[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * val = a2[i] + * if val != val: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":75 + * for i from 0 <= i < length: + * val = a1[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a2[i] + */ + } + + /* "talib/_func.pxi":77 + * if val != val: + * continue + * val = a2[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a2[__pyx_v_i]); + /* "talib/_func.pxi":78 + * continue + * val = a2[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * return i + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":79 + * val = a2[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * return i + * else: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":78 + * continue + * val = a2[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * return i + */ + } + + /* "talib/_func.pxi":80 + * if val != val: + * continue + * return i # <<<<<<<<<<<<<< + * else: + * raise Exception("inputs are all NaN") + */ __pyx_r = __pyx_v_i; goto __pyx_L0; __pyx_L3_continue:; } /*else*/ { + /* "talib/_func.pxi":82 + * return i + * else: + * raise Exception("inputs are all NaN") # <<<<<<<<<<<<<< + * + * cdef np.npy_int check_begidx3(np.npy_intp length, double* a1, double* a2, double* a3) except -1: + */ __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 82, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); @@ -6195,6 +7478,13 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx2(npy_intp __pyx_v_length, do __PYX_ERR(2, 82, __pyx_L1_error) } + /* "talib/_func.pxi":70 + * raise Exception("inputs are all NaN") + * + * cdef np.npy_int check_begidx2(np.npy_intp length, double* a1, double* a2) except -1: # <<<<<<<<<<<<<< + * cdef: + * double val + */ /* function exit code */ __pyx_L1_error:; @@ -6206,6 +7496,13 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx2(npy_intp __pyx_v_length, do return __pyx_r; } +/* "talib/_func.pxi":84 + * raise Exception("inputs are all NaN") + * + * cdef np.npy_int check_begidx3(np.npy_intp length, double* a1, double* a2, double* a3) except -1: # <<<<<<<<<<<<<< + * cdef: + * double val + */ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx3(npy_intp __pyx_v_length, double *__pyx_v_a1, double *__pyx_v_a2, double *__pyx_v_a3) { double __pyx_v_val; @@ -6220,42 +7517,147 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx3(npy_intp __pyx_v_length, do int __pyx_clineno = 0; __Pyx_RefNannySetupContext("check_begidx3", 0); + /* "talib/_func.pxi":87 + * cdef: + * double val + * for i from 0 <= i < length: # <<<<<<<<<<<<<< + * val = a1[i] + * if val != val: + */ __pyx_t_1 = __pyx_v_length; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) { + /* "talib/_func.pxi":88 + * double val + * for i from 0 <= i < length: + * val = a1[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a1[__pyx_v_i]); + /* "talib/_func.pxi":89 + * for i from 0 <= i < length: + * val = a1[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a2[i] + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":90 + * val = a1[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * val = a2[i] + * if val != val: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":89 + * for i from 0 <= i < length: + * val = a1[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a2[i] + */ + } + + /* "talib/_func.pxi":91 + * if val != val: + * continue + * val = a2[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a2[__pyx_v_i]); + /* "talib/_func.pxi":92 + * continue + * val = a2[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a3[i] + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":93 + * val = a2[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * val = a3[i] + * if val != val: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":92 + * continue + * val = a2[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a3[i] + */ + } + + /* "talib/_func.pxi":94 + * if val != val: + * continue + * val = a3[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a3[__pyx_v_i]); + /* "talib/_func.pxi":95 + * continue + * val = a3[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * return i + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":96 + * val = a3[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * return i + * else: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":95 + * continue + * val = a3[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * return i + */ + } + + /* "talib/_func.pxi":97 + * if val != val: + * continue + * return i # <<<<<<<<<<<<<< + * else: + * raise Exception("inputs are all NaN") + */ __pyx_r = __pyx_v_i; goto __pyx_L0; __pyx_L3_continue:; } /*else*/ { + /* "talib/_func.pxi":99 + * return i + * else: + * raise Exception("inputs are all NaN") # <<<<<<<<<<<<<< + * + * cdef np.npy_int check_begidx4(np.npy_intp length, double* a1, double* a2, double* a3, double* a4) except -1: + */ __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); @@ -6263,6 +7665,13 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx3(npy_intp __pyx_v_length, do __PYX_ERR(2, 99, __pyx_L1_error) } + /* "talib/_func.pxi":84 + * raise Exception("inputs are all NaN") + * + * cdef np.npy_int check_begidx3(np.npy_intp length, double* a1, double* a2, double* a3) except -1: # <<<<<<<<<<<<<< + * cdef: + * double val + */ /* function exit code */ __pyx_L1_error:; @@ -6274,6 +7683,13 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx3(npy_intp __pyx_v_length, do return __pyx_r; } +/* "talib/_func.pxi":101 + * raise Exception("inputs are all NaN") + * + * cdef np.npy_int check_begidx4(np.npy_intp length, double* a1, double* a2, double* a3, double* a4) except -1: # <<<<<<<<<<<<<< + * cdef: + * double val + */ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx4(npy_intp __pyx_v_length, double *__pyx_v_a1, double *__pyx_v_a2, double *__pyx_v_a3, double *__pyx_v_a4) { double __pyx_v_val; @@ -6288,51 +7704,184 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx4(npy_intp __pyx_v_length, do int __pyx_clineno = 0; __Pyx_RefNannySetupContext("check_begidx4", 0); + /* "talib/_func.pxi":104 + * cdef: + * double val + * for i from 0 <= i < length: # <<<<<<<<<<<<<< + * val = a1[i] + * if val != val: + */ __pyx_t_1 = __pyx_v_length; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) { + /* "talib/_func.pxi":105 + * double val + * for i from 0 <= i < length: + * val = a1[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a1[__pyx_v_i]); + /* "talib/_func.pxi":106 + * for i from 0 <= i < length: + * val = a1[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a2[i] + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":107 + * val = a1[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * val = a2[i] + * if val != val: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":106 + * for i from 0 <= i < length: + * val = a1[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a2[i] + */ + } + + /* "talib/_func.pxi":108 + * if val != val: + * continue + * val = a2[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a2[__pyx_v_i]); + /* "talib/_func.pxi":109 + * continue + * val = a2[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a3[i] + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":110 + * val = a2[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * val = a3[i] + * if val != val: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":109 + * continue + * val = a2[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a3[i] + */ + } + + /* "talib/_func.pxi":111 + * if val != val: + * continue + * val = a3[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a3[__pyx_v_i]); + /* "talib/_func.pxi":112 + * continue + * val = a3[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a4[i] + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":113 + * val = a3[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * val = a4[i] + * if val != val: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":112 + * continue + * val = a3[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * val = a4[i] + */ + } + + /* "talib/_func.pxi":114 + * if val != val: + * continue + * val = a4[i] # <<<<<<<<<<<<<< + * if val != val: + * continue + */ __pyx_v_val = (__pyx_v_a4[__pyx_v_i]); + /* "talib/_func.pxi":115 + * continue + * val = a4[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * return i + */ __pyx_t_2 = ((__pyx_v_val != __pyx_v_val) != 0); if (__pyx_t_2) { + /* "talib/_func.pxi":116 + * val = a4[i] + * if val != val: + * continue # <<<<<<<<<<<<<< + * return i + * else: + */ goto __pyx_L3_continue; - } - + /* "talib/_func.pxi":115 + * continue + * val = a4[i] + * if val != val: # <<<<<<<<<<<<<< + * continue + * return i + */ + } + + /* "talib/_func.pxi":117 + * if val != val: + * continue + * return i # <<<<<<<<<<<<<< + * else: + * raise Exception("inputs are all NaN") + */ __pyx_r = __pyx_v_i; goto __pyx_L0; __pyx_L3_continue:; } /*else*/ { + /* "talib/_func.pxi":119 + * return i + * else: + * raise Exception("inputs are all NaN") # <<<<<<<<<<<<<< + * + * cdef np.ndarray make_double_array(np.npy_intp length, int lookback): + */ __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); @@ -6340,6 +7889,13 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx4(npy_intp __pyx_v_length, do __PYX_ERR(2, 119, __pyx_L1_error) } + /* "talib/_func.pxi":101 + * raise Exception("inputs are all NaN") + * + * cdef np.npy_int check_begidx4(np.npy_intp length, double* a1, double* a2, double* a3, double* a4) except -1: # <<<<<<<<<<<<<< + * cdef: + * double val + */ /* function exit code */ __pyx_L1_error:; @@ -6351,6 +7907,13 @@ static npy_int __pyx_f_5talib_7_ta_lib_check_begidx4(npy_intp __pyx_v_length, do return __pyx_r; } +/* "talib/_func.pxi":121 + * raise Exception("inputs are all NaN") + * + * cdef np.ndarray make_double_array(np.npy_intp length, int lookback): # <<<<<<<<<<<<<< + * cdef: + * np.ndarray outreal + */ static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_double_array(npy_intp __pyx_v_length, int __pyx_v_lookback) { PyArrayObject *__pyx_v_outreal = 0; @@ -6367,13 +7930,34 @@ static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_double_array(npy_intp __pyx_v int __pyx_clineno = 0; __Pyx_RefNannySetupContext("make_double_array", 0); + /* "talib/_func.pxi":125 + * np.ndarray outreal + * double* outreal_data + * outreal = PyArray_EMPTY(1, &length, np.NPY_DOUBLE, np.NPY_DEFAULT) # <<<<<<<<<<<<<< + * outreal_data = outreal.data + * for i from 0 <= i < min(lookback, length): + */ __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_length), NPY_DOUBLE, NPY_DEFAULT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 125, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":126 + * double* outreal_data + * outreal = PyArray_EMPTY(1, &length, np.NPY_DOUBLE, np.NPY_DEFAULT) + * outreal_data = outreal.data # <<<<<<<<<<<<<< + * for i from 0 <= i < min(lookback, length): + * outreal_data[i] = NaN + */ __pyx_v_outreal_data = ((double *)__pyx_v_outreal->data); + /* "talib/_func.pxi":127 + * outreal = PyArray_EMPTY(1, &length, np.NPY_DOUBLE, np.NPY_DEFAULT) + * outreal_data = outreal.data + * for i from 0 <= i < min(lookback, length): # <<<<<<<<<<<<<< + * outreal_data[i] = NaN + * return outreal + */ __pyx_t_2 = __pyx_v_length; __pyx_t_3 = __pyx_v_lookback; if (((__pyx_t_2 < __pyx_t_3) != 0)) { @@ -6384,14 +7968,35 @@ static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_double_array(npy_intp __pyx_v __pyx_t_2 = __pyx_t_4; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) { + /* "talib/_func.pxi":128 + * outreal_data = outreal.data + * for i from 0 <= i < min(lookback, length): + * outreal_data[i] = NaN # <<<<<<<<<<<<<< + * return outreal + * + */ (__pyx_v_outreal_data[__pyx_v_i]) = __pyx_v_5talib_7_ta_lib_NaN; } + /* "talib/_func.pxi":129 + * for i from 0 <= i < min(lookback, length): + * outreal_data[i] = NaN + * return outreal # <<<<<<<<<<<<<< + * + * cdef np.ndarray make_int_array(np.npy_intp length, int lookback): + */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = __pyx_v_outreal; goto __pyx_L0; + /* "talib/_func.pxi":121 + * raise Exception("inputs are all NaN") + * + * cdef np.ndarray make_double_array(np.npy_intp length, int lookback): # <<<<<<<<<<<<<< + * cdef: + * np.ndarray outreal + */ /* function exit code */ __pyx_L1_error:; @@ -6405,6 +8010,13 @@ static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_double_array(npy_intp __pyx_v return __pyx_r; } +/* "talib/_func.pxi":131 + * return outreal + * + * cdef np.ndarray make_int_array(np.npy_intp length, int lookback): # <<<<<<<<<<<<<< + * cdef: + * np.ndarray outinteger + */ static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_int_array(npy_intp __pyx_v_length, int __pyx_v_lookback) { PyArrayObject *__pyx_v_outinteger = 0; @@ -6421,13 +8033,34 @@ static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_int_array(npy_intp __pyx_v_le int __pyx_clineno = 0; __Pyx_RefNannySetupContext("make_int_array", 0); + /* "talib/_func.pxi":135 + * np.ndarray outinteger + * int* outinteger_data + * outinteger = PyArray_EMPTY(1, &length, np.NPY_INT32, np.NPY_DEFAULT) # <<<<<<<<<<<<<< + * outinteger_data = outinteger.data + * for i from 0 <= i < min(lookback, length): + */ __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_length), NPY_INT32, NPY_DEFAULT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":136 + * int* outinteger_data + * outinteger = PyArray_EMPTY(1, &length, np.NPY_INT32, np.NPY_DEFAULT) + * outinteger_data = outinteger.data # <<<<<<<<<<<<<< + * for i from 0 <= i < min(lookback, length): + * outinteger_data[i] = 0 + */ __pyx_v_outinteger_data = ((int *)__pyx_v_outinteger->data); + /* "talib/_func.pxi":137 + * outinteger = PyArray_EMPTY(1, &length, np.NPY_INT32, np.NPY_DEFAULT) + * outinteger_data = outinteger.data + * for i from 0 <= i < min(lookback, length): # <<<<<<<<<<<<<< + * outinteger_data[i] = 0 + * return outinteger + */ __pyx_t_2 = __pyx_v_length; __pyx_t_3 = __pyx_v_lookback; if (((__pyx_t_2 < __pyx_t_3) != 0)) { @@ -6438,14 +8071,35 @@ static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_int_array(npy_intp __pyx_v_le __pyx_t_2 = __pyx_t_4; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) { + /* "talib/_func.pxi":138 + * outinteger_data = outinteger.data + * for i from 0 <= i < min(lookback, length): + * outinteger_data[i] = 0 # <<<<<<<<<<<<<< + * return outinteger + * + */ (__pyx_v_outinteger_data[__pyx_v_i]) = 0; } + /* "talib/_func.pxi":139 + * for i from 0 <= i < min(lookback, length): + * outinteger_data[i] = 0 + * return outinteger # <<<<<<<<<<<<<< + * + * + */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = __pyx_v_outinteger; goto __pyx_L0; + /* "talib/_func.pxi":131 + * return outreal + * + * cdef np.ndarray make_int_array(np.npy_intp length, int lookback): # <<<<<<<<<<<<<< + * cdef: + * np.ndarray outinteger + */ /* function exit code */ __pyx_L1_error:; @@ -6459,6 +8113,13 @@ static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_int_array(npy_intp __pyx_v_le return __pyx_r; } +/* "talib/_func.pxi":144 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ACOS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ACOS(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_19ACOS(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -6502,36 +8163,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_18ACOS(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("ACOS", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":161 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":162 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":163 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ACOS_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 163, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":164 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ACOS_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":165 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ACOS_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ACOS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ACOS_Lookback()); + /* "talib/_func.pxi":166 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ACOS_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ACOS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ACOS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":167 + * lookback = begidx + lib.TA_ACOS_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ACOS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ACOS", retCode) + * return outreal + */ __pyx_v_retCode = TA_ACOS(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":168 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ACOS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ACOS", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ACOS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":169 + * retCode = lib.TA_ACOS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ACOS", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":144 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ACOS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ACOS(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -6546,6 +8277,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_18ACOS(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":173 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ AD(high, low, close, volume) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_21AD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -6666,52 +8404,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_20AD(CYTHON_UNUSED PyObject *__pyx_sel __Pyx_INCREF((PyObject *)__pyx_v_close); __Pyx_INCREF((PyObject *)__pyx_v_volume); + /* "talib/_func.pxi":190 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 190, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":191 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * volume = check_array(volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":192 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 192, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":193 + * low = check_array(low) + * close = check_array(close) + * volume = check_array(volume) # <<<<<<<<<<<<<< + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_volume)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_volume, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":194 + * close = check_array(close) + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_high, __pyx_v_low, __pyx_v_close, __pyx_v_volume); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 194, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":195 + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AD_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data), ((double *)__pyx_v_volume->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 195, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":196 + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_AD_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":197 + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AD_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AD( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_AD_Lookback()); + /* "talib/_func.pxi":198 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AD_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_AD( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AD", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 198, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":199 + * lookback = begidx + lib.TA_AD_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AD( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_AD", retCode) + * return outreal + */ __pyx_v_retCode = TA_AD(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (((double *)__pyx_v_volume->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":200 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AD( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AD", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_AD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":201 + * retCode = lib.TA_AD( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AD", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":173 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ AD(high, low, close, volume) + * + */ /* function exit code */ __pyx_L1_error:; @@ -6729,6 +8558,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_20AD(CYTHON_UNUSED PyObject *__pyx_sel return __pyx_r; } +/* "talib/_func.pxi":205 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADD( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ ADD(real0, real1) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_23ADD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -6823,42 +8659,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_22ADD(CYTHON_UNUSED PyObject *__pyx_se __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_func.pxi":223 + * int outnbelement + * np.ndarray outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":224 + * np.ndarray outreal + * real0 = check_array(real0) + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":225 + * real0 = check_array(real0) + * real1 = check_array(real1) + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 225, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":226 + * real1 = check_array(real1) + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADD_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_real0->data), ((double *)__pyx_v_real1->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 226, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":227 + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ADD_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":228 + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADD_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADD( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ADD_Lookback()); + /* "talib/_func.pxi":229 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADD_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ADD( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADD", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":230 + * lookback = begidx + lib.TA_ADD_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADD( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ADD", retCode) + * return outreal + */ __pyx_v_retCode = TA_ADD(0, __pyx_v_endidx, (((double *)__pyx_v_real0->data) + __pyx_v_begidx), (((double *)__pyx_v_real1->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":231 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADD( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADD", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ADD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":232 + * retCode = lib.TA_ADD( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADD", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":205 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADD( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ ADD(real0, real1) + * + */ /* function exit code */ __pyx_L1_error:; @@ -6874,6 +8787,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_22ADD(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":236 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_25ADOSC(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -7028,52 +8948,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_24ADOSC(CYTHON_UNUSED PyObject *__pyx_ __Pyx_INCREF((PyObject *)__pyx_v_close); __Pyx_INCREF((PyObject *)__pyx_v_volume); + /* "talib/_func.pxi":256 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":257 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * volume = check_array(volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 257, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":258 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":259 + * low = check_array(low) + * close = check_array(close) + * volume = check_array(volume) # <<<<<<<<<<<<<< + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_volume)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_volume, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":260 + * close = check_array(close) + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_high, __pyx_v_low, __pyx_v_close, __pyx_v_volume); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 260, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":261 + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADOSC_Lookback( fastperiod , slowperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data), ((double *)__pyx_v_volume->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 261, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":262 + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ADOSC_Lookback( fastperiod , slowperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":263 + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADOSC_Lookback( fastperiod , slowperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , fastperiod , slowperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ADOSC_Lookback(__pyx_v_fastperiod, __pyx_v_slowperiod)); + /* "talib/_func.pxi":264 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADOSC_Lookback( fastperiod , slowperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ADOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , fastperiod , slowperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADOSC", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 264, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":265 + * lookback = begidx + lib.TA_ADOSC_Lookback( fastperiod , slowperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , fastperiod , slowperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ADOSC", retCode) + * return outreal + */ __pyx_v_retCode = TA_ADOSC(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (((double *)__pyx_v_volume->data) + __pyx_v_begidx), __pyx_v_fastperiod, __pyx_v_slowperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":266 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , fastperiod , slowperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADOSC", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ADOSC, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":267 + * retCode = lib.TA_ADOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , fastperiod , slowperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADOSC", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":236 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -7091,6 +9102,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_24ADOSC(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":271 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADX(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_27ADX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -7216,47 +9234,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_26ADX(CYTHON_UNUSED PyObject *__pyx_se __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":290 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":291 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 291, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":292 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":293 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 293, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":294 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADX_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 294, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":295 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ADX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":296 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADX_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ADX_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":297 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ADX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":298 + * lookback = begidx + lib.TA_ADX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ADX", retCode) + * return outreal + */ __pyx_v_retCode = TA_ADX(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":299 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADX", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ADX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 299, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":300 + * retCode = lib.TA_ADX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADX", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":271 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADX(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -7273,6 +9375,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_26ADX(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":304 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADXR(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_29ADXR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -7398,47 +9507,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_28ADXR(CYTHON_UNUSED PyObject *__pyx_s __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":323 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":324 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":325 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":326 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 326, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":327 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADXR_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 327, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":328 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ADXR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":329 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADXR_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADXR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ADXR_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":330 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ADXR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ADXR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADXR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":331 + * lookback = begidx + lib.TA_ADXR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADXR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ADXR", retCode) + * return outreal + */ __pyx_v_retCode = TA_ADXR(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":332 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ADXR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADXR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ADXR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":333 + * retCode = lib.TA_ADXR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ADXR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":304 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADXR(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -7455,6 +9648,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_28ADXR(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":337 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ APO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_31APO(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -7585,36 +9785,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_30APO(CYTHON_UNUSED PyObject *__pyx_se __Pyx_RefNannySetupContext("APO", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":358 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":359 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":360 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_APO_Lookback( fastperiod , slowperiod , matype ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 360, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":361 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_APO_Lookback( fastperiod , slowperiod , matype ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":362 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_APO_Lookback( fastperiod , slowperiod , matype ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_APO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_APO_Lookback(__pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_matype)); + /* "talib/_func.pxi":363 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_APO_Lookback( fastperiod , slowperiod , matype ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_APO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_APO", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":364 + * lookback = begidx + lib.TA_APO_Lookback( fastperiod , slowperiod , matype ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_APO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_APO", retCode) + * return outreal + */ __pyx_v_retCode = TA_APO(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":365 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_APO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_APO", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_APO, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":366 + * retCode = lib.TA_APO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_APO", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":337 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ APO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -7629,6 +9899,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_30APO(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":370 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROON(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_33AROON(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -7742,42 +10019,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_32AROON(CYTHON_UNUSED PyObject *__pyx_ __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_func.pxi":391 + * np.ndarray outaroondown + * np.ndarray outaroonup + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":392 + * np.ndarray outaroonup + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":393 + * high = check_array(high) + * low = check_array(low) + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 393, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":394 + * low = check_array(low) + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AROON_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 394, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":395 + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_AROON_Lookback( timeperiod ) + * outaroondown = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":396 + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AROON_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outaroondown = make_double_array(length, lookback) + * outaroonup = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_AROON_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":397 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AROON_Lookback( timeperiod ) + * outaroondown = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outaroonup = make_double_array(length, lookback) + * retCode = lib.TA_AROON( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outaroondown.data)+lookback , (outaroonup.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outaroondown = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":398 + * lookback = begidx + lib.TA_AROON_Lookback( timeperiod ) + * outaroondown = make_double_array(length, lookback) + * outaroonup = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_AROON( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outaroondown.data)+lookback , (outaroonup.data)+lookback ) + * _ta_check_success("TA_AROON", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outaroonup = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":399 + * outaroondown = make_double_array(length, lookback) + * outaroonup = make_double_array(length, lookback) + * retCode = lib.TA_AROON( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outaroondown.data)+lookback , (outaroonup.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_AROON", retCode) + * return outaroondown , outaroonup + */ __pyx_v_retCode = TA_AROON(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outaroondown->data) + __pyx_v_lookback), (((double *)__pyx_v_outaroonup->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":400 + * outaroonup = make_double_array(length, lookback) + * retCode = lib.TA_AROON( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outaroondown.data)+lookback , (outaroonup.data)+lookback ) + * _ta_check_success("TA_AROON", retCode) # <<<<<<<<<<<<<< + * return outaroondown , outaroonup + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_AROON, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":401 + * retCode = lib.TA_AROON( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outaroondown.data)+lookback , (outaroonup.data)+lookback ) + * _ta_check_success("TA_AROON", retCode) + * return outaroondown , outaroonup # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -7791,6 +10145,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_32AROON(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":370 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROON(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -7807,6 +10168,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_32AROON(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":405 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROONOSC(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_35AROONOSC(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -7919,42 +10287,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_34AROONOSC(CYTHON_UNUSED PyObject *__p __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_func.pxi":424 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":425 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":426 + * high = check_array(high) + * low = check_array(low) + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 426, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":427 + * low = check_array(low) + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AROONOSC_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 427, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":428 + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_AROONOSC_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":429 + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AROONOSC_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AROONOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_AROONOSC_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":430 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AROONOSC_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_AROONOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AROONOSC", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 430, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":431 + * lookback = begidx + lib.TA_AROONOSC_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AROONOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_AROONOSC", retCode) + * return outreal + */ __pyx_v_retCode = TA_AROONOSC(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":432 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AROONOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AROONOSC", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_AROONOSC, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":433 + * retCode = lib.TA_AROONOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AROONOSC", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":405 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROONOSC(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -7970,6 +10415,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_34AROONOSC(CYTHON_UNUSED PyObject *__p return __pyx_r; } +/* "talib/_func.pxi":437 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ASIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ASIN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_37ASIN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -8013,36 +10465,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_36ASIN(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("ASIN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":454 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":455 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":456 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ASIN_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 456, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":457 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ASIN_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":458 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ASIN_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ASIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ASIN_Lookback()); + /* "talib/_func.pxi":459 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ASIN_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ASIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ASIN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":460 + * lookback = begidx + lib.TA_ASIN_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ASIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ASIN", retCode) + * return outreal + */ __pyx_v_retCode = TA_ASIN(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":461 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ASIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ASIN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ASIN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":462 + * retCode = lib.TA_ASIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ASIN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":437 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ASIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ASIN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -8057,6 +10579,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_36ASIN(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":466 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ATAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ATAN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_39ATAN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -8100,36 +10629,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_38ATAN(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("ATAN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":483 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":484 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":485 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ATAN_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 485, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":486 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ATAN_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":487 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ATAN_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ATAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ATAN_Lookback()); + /* "talib/_func.pxi":488 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ATAN_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ATAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ATAN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 488, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":489 + * lookback = begidx + lib.TA_ATAN_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ATAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ATAN", retCode) + * return outreal + */ __pyx_v_retCode = TA_ATAN(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":490 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ATAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ATAN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ATAN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":491 + * retCode = lib.TA_ATAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ATAN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":466 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ATAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ATAN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -8144,6 +10743,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_38ATAN(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":495 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ATR(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_41ATR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -8269,47 +10875,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_40ATR(CYTHON_UNUSED PyObject *__pyx_se __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":514 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 514, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":515 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 515, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":516 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 516, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":517 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 517, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":518 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ATR_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 518, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":519 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ATR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":520 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ATR_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ATR_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":521 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ATR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ATR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":522 + * lookback = begidx + lib.TA_ATR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ATR", retCode) + * return outreal + */ __pyx_v_retCode = TA_ATR(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":523 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ATR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ATR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":524 + * retCode = lib.TA_ATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ATR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":495 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ATR(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -8326,6 +11016,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_40ATR(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":528 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ AVGPRICE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_43AVGPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -8446,52 +11143,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_42AVGPRICE(CYTHON_UNUSED PyObject *__p __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":545 + * int outnbelement + * np.ndarray outreal + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":546 + * np.ndarray outreal + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":547 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 547, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":548 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":549 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 549, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":550 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AVGPRICE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 550, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":551 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_AVGPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":552 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AVGPRICE_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AVGPRICE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_AVGPRICE_Lookback()); + /* "talib/_func.pxi":553 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_AVGPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_AVGPRICE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AVGPRICE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 553, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":554 + * lookback = begidx + lib.TA_AVGPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AVGPRICE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_AVGPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_AVGPRICE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":555 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_AVGPRICE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AVGPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_AVGPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":556 + * retCode = lib.TA_AVGPRICE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_AVGPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":528 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ AVGPRICE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -8509,6 +11297,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_42AVGPRICE(CYTHON_UNUSED PyObject *__p return __pyx_r; } +/* "talib/_func.pxi":560 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ): # <<<<<<<<<<<<<< + * """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_45BBANDS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -8657,41 +11452,118 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_44BBANDS(CYTHON_UNUSED PyObject *__pyx __Pyx_RefNannySetupContext("BBANDS", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":586 + * np.ndarray outrealmiddleband + * np.ndarray outreallowerband + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":587 + * np.ndarray outreallowerband + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":588 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BBANDS_Lookback( timeperiod , nbdevup , nbdevdn , matype ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 588, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":589 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_BBANDS_Lookback( timeperiod , nbdevup , nbdevdn , matype ) + * outrealupperband = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":590 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BBANDS_Lookback( timeperiod , nbdevup , nbdevdn , matype ) # <<<<<<<<<<<<<< + * outrealupperband = make_double_array(length, lookback) + * outrealmiddleband = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_BBANDS_Lookback(__pyx_v_timeperiod, __pyx_v_nbdevup, __pyx_v_nbdevdn, __pyx_v_matype)); + /* "talib/_func.pxi":591 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BBANDS_Lookback( timeperiod , nbdevup , nbdevdn , matype ) + * outrealupperband = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outrealmiddleband = make_double_array(length, lookback) + * outreallowerband = make_double_array(length, lookback) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outrealupperband = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":592 + * lookback = begidx + lib.TA_BBANDS_Lookback( timeperiod , nbdevup , nbdevdn , matype ) + * outrealupperband = make_double_array(length, lookback) + * outrealmiddleband = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outreallowerband = make_double_array(length, lookback) + * retCode = lib.TA_BBANDS( 0 , endidx , (real.data)+begidx , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , (outrealupperband.data)+lookback , (outrealmiddleband.data)+lookback , (outreallowerband.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outrealmiddleband = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":593 + * outrealupperband = make_double_array(length, lookback) + * outrealmiddleband = make_double_array(length, lookback) + * outreallowerband = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_BBANDS( 0 , endidx , (real.data)+begidx , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , (outrealupperband.data)+lookback , (outrealmiddleband.data)+lookback , (outreallowerband.data)+lookback ) + * _ta_check_success("TA_BBANDS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreallowerband = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":594 + * outrealmiddleband = make_double_array(length, lookback) + * outreallowerband = make_double_array(length, lookback) + * retCode = lib.TA_BBANDS( 0 , endidx , (real.data)+begidx , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , (outrealupperband.data)+lookback , (outrealmiddleband.data)+lookback , (outreallowerband.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_BBANDS", retCode) + * return outrealupperband , outrealmiddleband , outreallowerband + */ __pyx_v_retCode = TA_BBANDS(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, __pyx_v_nbdevup, __pyx_v_nbdevdn, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outrealupperband->data) + __pyx_v_lookback), (((double *)__pyx_v_outrealmiddleband->data) + __pyx_v_lookback), (((double *)__pyx_v_outreallowerband->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":595 + * outreallowerband = make_double_array(length, lookback) + * retCode = lib.TA_BBANDS( 0 , endidx , (real.data)+begidx , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , (outrealupperband.data)+lookback , (outrealmiddleband.data)+lookback , (outreallowerband.data)+lookback ) + * _ta_check_success("TA_BBANDS", retCode) # <<<<<<<<<<<<<< + * return outrealupperband , outrealmiddleband , outreallowerband + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_BBANDS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":596 + * retCode = lib.TA_BBANDS( 0 , endidx , (real.data)+begidx , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , (outrealupperband.data)+lookback , (outrealmiddleband.data)+lookback , (outreallowerband.data)+lookback ) + * _ta_check_success("TA_BBANDS", retCode) + * return outrealupperband , outrealmiddleband , outreallowerband # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -8708,6 +11580,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_44BBANDS(CYTHON_UNUSED PyObject *__pyx __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":560 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ): # <<<<<<<<<<<<<< + * """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -8724,6 +11603,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_44BBANDS(CYTHON_UNUSED PyObject *__pyx return __pyx_r; } +/* "talib/_func.pxi":600 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ BETA(real0, real1[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_47BETA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -8836,42 +11722,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_46BETA(CYTHON_UNUSED PyObject *__pyx_s __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_func.pxi":620 + * int outnbelement + * np.ndarray outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":621 + * np.ndarray outreal + * real0 = check_array(real0) + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":622 + * real0 = check_array(real0) + * real1 = check_array(real1) + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 622, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":623 + * real1 = check_array(real1) + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BETA_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_real0->data), ((double *)__pyx_v_real1->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 623, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":624 + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_BETA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":625 + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BETA_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_BETA( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_BETA_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":626 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BETA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_BETA( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_BETA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":627 + * lookback = begidx + lib.TA_BETA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_BETA( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_BETA", retCode) + * return outreal + */ __pyx_v_retCode = TA_BETA(0, __pyx_v_endidx, (((double *)__pyx_v_real0->data) + __pyx_v_begidx), (((double *)__pyx_v_real1->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":628 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_BETA( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_BETA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_BETA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":629 + * retCode = lib.TA_BETA( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_BETA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":600 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ BETA(real0, real1[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -8887,6 +11850,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_46BETA(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":633 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ BOP(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_49BOP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -9007,52 +11977,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_48BOP(CYTHON_UNUSED PyObject *__pyx_se __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":650 + * int outnbelement + * np.ndarray outreal + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":651 + * np.ndarray outreal + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":652 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":653 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 653, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":654 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 654, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":655 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BOP_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 655, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":656 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_BOP_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":657 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BOP_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_BOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_BOP_Lookback()); + /* "talib/_func.pxi":658 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_BOP_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_BOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_BOP", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":659 + * lookback = begidx + lib.TA_BOP_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_BOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_BOP", retCode) + * return outreal + */ __pyx_v_retCode = TA_BOP(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":660 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_BOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_BOP", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_BOP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 660, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":661 + * retCode = lib.TA_BOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_BOP", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":633 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ BOP(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -9070,6 +12131,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_48BOP(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":665 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CCI(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_51CCI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -9195,47 +12263,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_50CCI(CYTHON_UNUSED PyObject *__pyx_se __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":684 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 684, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":685 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":686 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":687 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 687, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":688 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CCI_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 688, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":689 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CCI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":690 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CCI_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CCI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CCI_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":691 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CCI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CCI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CCI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":692 + * lookback = begidx + lib.TA_CCI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CCI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CCI", retCode) + * return outreal + */ __pyx_v_retCode = TA_CCI(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":693 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CCI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CCI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CCI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":694 + * retCode = lib.TA_CCI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CCI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":665 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CCI(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -9252,6 +12404,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_50CCI(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":698 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL2CROWS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_53CDL2CROWS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -9372,52 +12531,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_52CDL2CROWS(CYTHON_UNUSED PyObject *__ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":715 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":716 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":717 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":718 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":719 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 719, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":720 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL2CROWS_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 720, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":721 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDL2CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":722 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL2CROWS_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDL2CROWS_Lookback()); + /* "talib/_func.pxi":723 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL2CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL2CROWS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":724 + * lookback = begidx + lib.TA_CDL2CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL2CROWS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL2CROWS(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":725 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL2CROWS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL2CROWS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":726 + * retCode = lib.TA_CDL2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL2CROWS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":698 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL2CROWS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -9435,6 +12685,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_52CDL2CROWS(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":730 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3BLACKCROWS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_55CDL3BLACKCROWS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -9555,52 +12812,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_54CDL3BLACKCROWS(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":747 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":748 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":749 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":750 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":751 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 751, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":752 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3BLACKCROWS_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 752, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":753 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDL3BLACKCROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":754 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3BLACKCROWS_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3BLACKCROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDL3BLACKCROWS_Lookback()); + /* "talib/_func.pxi":755 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3BLACKCROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3BLACKCROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3BLACKCROWS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":756 + * lookback = begidx + lib.TA_CDL3BLACKCROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3BLACKCROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3BLACKCROWS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3BLACKCROWS(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":757 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3BLACKCROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3BLACKCROWS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3BLACKCROWS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 757, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":758 + * retCode = lib.TA_CDL3BLACKCROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3BLACKCROWS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":730 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3BLACKCROWS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -9618,6 +12966,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_54CDL3BLACKCROWS(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_func.pxi":762 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3INSIDE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_57CDL3INSIDE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -9738,52 +13093,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_56CDL3INSIDE(CYTHON_UNUSED PyObject *_ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":779 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":780 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":781 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":782 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":783 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 783, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":784 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3INSIDE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 784, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":785 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDL3INSIDE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":786 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3INSIDE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3INSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDL3INSIDE_Lookback()); + /* "talib/_func.pxi":787 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3INSIDE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3INSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3INSIDE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 787, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":788 + * lookback = begidx + lib.TA_CDL3INSIDE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3INSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3INSIDE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3INSIDE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":789 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3INSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3INSIDE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3INSIDE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 789, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":790 + * retCode = lib.TA_CDL3INSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3INSIDE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":762 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3INSIDE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -9801,6 +13247,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_56CDL3INSIDE(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_func.pxi":794 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3LINESTRIKE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_59CDL3LINESTRIKE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -9921,52 +13374,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_58CDL3LINESTRIKE(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":811 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":812 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":813 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":814 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":815 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 815, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":816 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3LINESTRIKE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 816, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":817 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDL3LINESTRIKE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":818 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3LINESTRIKE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3LINESTRIKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDL3LINESTRIKE_Lookback()); + /* "talib/_func.pxi":819 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3LINESTRIKE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3LINESTRIKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3LINESTRIKE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":820 + * lookback = begidx + lib.TA_CDL3LINESTRIKE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3LINESTRIKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3LINESTRIKE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3LINESTRIKE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":821 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3LINESTRIKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3LINESTRIKE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3LINESTRIKE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":822 + * retCode = lib.TA_CDL3LINESTRIKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3LINESTRIKE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":794 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3LINESTRIKE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -9984,6 +13528,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_58CDL3LINESTRIKE(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_func.pxi":826 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3OUTSIDE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_61CDL3OUTSIDE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -10104,52 +13655,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_60CDL3OUTSIDE(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":843 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 843, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":844 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":845 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 845, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":846 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":847 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 847, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":848 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3OUTSIDE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 848, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":849 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDL3OUTSIDE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":850 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3OUTSIDE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3OUTSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDL3OUTSIDE_Lookback()); + /* "talib/_func.pxi":851 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3OUTSIDE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3OUTSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3OUTSIDE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 851, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":852 + * lookback = begidx + lib.TA_CDL3OUTSIDE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3OUTSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3OUTSIDE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3OUTSIDE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":853 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3OUTSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3OUTSIDE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3OUTSIDE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 853, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":854 + * retCode = lib.TA_CDL3OUTSIDE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3OUTSIDE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":826 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3OUTSIDE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -10167,6 +13809,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_60CDL3OUTSIDE(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_func.pxi":858 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3STARSINSOUTH(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_63CDL3STARSINSOUTH(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -10287,52 +13936,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_62CDL3STARSINSOUTH(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":875 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":876 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":877 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":878 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":879 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 879, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":880 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3STARSINSOUTH_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 880, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":881 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDL3STARSINSOUTH_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":882 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3STARSINSOUTH_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3STARSINSOUTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDL3STARSINSOUTH_Lookback()); + /* "talib/_func.pxi":883 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3STARSINSOUTH_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3STARSINSOUTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3STARSINSOUTH", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":884 + * lookback = begidx + lib.TA_CDL3STARSINSOUTH_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3STARSINSOUTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3STARSINSOUTH", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3STARSINSOUTH(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":885 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3STARSINSOUTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3STARSINSOUTH", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3STARSINSOUTH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":886 + * retCode = lib.TA_CDL3STARSINSOUTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3STARSINSOUTH", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":858 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3STARSINSOUTH(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -10350,6 +14090,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_62CDL3STARSINSOUTH(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":890 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3WHITESOLDIERS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_65CDL3WHITESOLDIERS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -10470,52 +14217,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_64CDL3WHITESOLDIERS(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":907 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 907, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":908 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 908, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":909 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 909, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":910 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 910, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":911 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 911, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":912 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3WHITESOLDIERS_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 912, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":913 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDL3WHITESOLDIERS_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":914 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3WHITESOLDIERS_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3WHITESOLDIERS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDL3WHITESOLDIERS_Lookback()); + /* "talib/_func.pxi":915 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDL3WHITESOLDIERS_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3WHITESOLDIERS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3WHITESOLDIERS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 915, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":916 + * lookback = begidx + lib.TA_CDL3WHITESOLDIERS_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3WHITESOLDIERS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3WHITESOLDIERS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3WHITESOLDIERS(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":917 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDL3WHITESOLDIERS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3WHITESOLDIERS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3WHITESOLDIERS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 917, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":918 + * retCode = lib.TA_CDL3WHITESOLDIERS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDL3WHITESOLDIERS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":890 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3WHITESOLDIERS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -10533,6 +14371,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_64CDL3WHITESOLDIERS(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_func.pxi":922 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLABANDONEDBABY(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_67CDLABANDONEDBABY(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -10671,52 +14516,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_66CDLABANDONEDBABY(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":941 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":942 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 942, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":943 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 943, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":944 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 944, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":945 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 945, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":946 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLABANDONEDBABY_Lookback( penetration ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 946, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":947 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLABANDONEDBABY_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":948 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLABANDONEDBABY_Lookback( penetration ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLABANDONEDBABY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLABANDONEDBABY_Lookback(__pyx_v_penetration)); + /* "talib/_func.pxi":949 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLABANDONEDBABY_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLABANDONEDBABY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLABANDONEDBABY", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 949, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":950 + * lookback = begidx + lib.TA_CDLABANDONEDBABY_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLABANDONEDBABY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLABANDONEDBABY", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLABANDONEDBABY(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":951 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLABANDONEDBABY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLABANDONEDBABY", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLABANDONEDBABY, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 951, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":952 + * retCode = lib.TA_CDLABANDONEDBABY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLABANDONEDBABY", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":922 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLABANDONEDBABY(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -10734,6 +14670,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_66CDLABANDONEDBABY(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":956 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLADVANCEBLOCK(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_69CDLADVANCEBLOCK(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -10854,52 +14797,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_68CDLADVANCEBLOCK(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":973 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 973, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":974 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":975 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":976 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":977 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 977, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":978 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLADVANCEBLOCK_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 978, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":979 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLADVANCEBLOCK_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":980 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLADVANCEBLOCK_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLADVANCEBLOCK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLADVANCEBLOCK_Lookback()); + /* "talib/_func.pxi":981 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLADVANCEBLOCK_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLADVANCEBLOCK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLADVANCEBLOCK", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":982 + * lookback = begidx + lib.TA_CDLADVANCEBLOCK_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLADVANCEBLOCK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLADVANCEBLOCK", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLADVANCEBLOCK(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":983 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLADVANCEBLOCK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLADVANCEBLOCK", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLADVANCEBLOCK, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 983, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":984 + * retCode = lib.TA_CDLADVANCEBLOCK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLADVANCEBLOCK", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":956 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLADVANCEBLOCK(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -10917,6 +14951,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_68CDLADVANCEBLOCK(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_func.pxi":988 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBELTHOLD(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_71CDLBELTHOLD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -11037,52 +15078,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_70CDLBELTHOLD(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1005 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1005, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1006 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1006, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1007 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1007, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1008 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1008, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1009 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1009, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1010 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLBELTHOLD_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1010, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1011 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLBELTHOLD_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1012 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLBELTHOLD_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLBELTHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLBELTHOLD_Lookback()); + /* "talib/_func.pxi":1013 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLBELTHOLD_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLBELTHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLBELTHOLD", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1013, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1014 + * lookback = begidx + lib.TA_CDLBELTHOLD_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLBELTHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLBELTHOLD", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLBELTHOLD(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1015 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLBELTHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLBELTHOLD", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLBELTHOLD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1015, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1016 + * retCode = lib.TA_CDLBELTHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLBELTHOLD", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":988 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBELTHOLD(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -11100,6 +15232,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_70CDLBELTHOLD(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_func.pxi":1020 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBREAKAWAY(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_73CDLBREAKAWAY(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -11220,52 +15359,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_72CDLBREAKAWAY(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1037 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1038 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1038, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1039 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1039, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1040 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1040, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1041 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1041, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1042 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLBREAKAWAY_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1042, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1043 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLBREAKAWAY_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1044 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLBREAKAWAY_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLBREAKAWAY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLBREAKAWAY_Lookback()); + /* "talib/_func.pxi":1045 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLBREAKAWAY_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLBREAKAWAY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLBREAKAWAY", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1045, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1046 + * lookback = begidx + lib.TA_CDLBREAKAWAY_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLBREAKAWAY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLBREAKAWAY", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLBREAKAWAY(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1047 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLBREAKAWAY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLBREAKAWAY", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLBREAKAWAY, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1047, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1048 + * retCode = lib.TA_CDLBREAKAWAY( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLBREAKAWAY", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1020 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBREAKAWAY(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -11283,6 +15513,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_72CDLBREAKAWAY(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":1052 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCLOSINGMARUBOZU(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_75CDLCLOSINGMARUBOZU(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -11403,52 +15640,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_74CDLCLOSINGMARUBOZU(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1069 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1069, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1070 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1070, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1071 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1071, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1072 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1072, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1073 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1073, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1074 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCLOSINGMARUBOZU_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1074, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1075 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLCLOSINGMARUBOZU_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1076 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCLOSINGMARUBOZU_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCLOSINGMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLCLOSINGMARUBOZU_Lookback()); + /* "talib/_func.pxi":1077 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCLOSINGMARUBOZU_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLCLOSINGMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1078 + * lookback = begidx + lib.TA_CDLCLOSINGMARUBOZU_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCLOSINGMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLCLOSINGMARUBOZU(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1079 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCLOSINGMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLCLOSINGMARUBOZU, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1080 + * retCode = lib.TA_CDLCLOSINGMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1052 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCLOSINGMARUBOZU(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -11466,6 +15794,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_74CDLCLOSINGMARUBOZU(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_func.pxi":1084 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCONCEALBABYSWALL(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_77CDLCONCEALBABYSWALL(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -11586,52 +15921,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_76CDLCONCEALBABYSWALL(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1101 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1102 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1102, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1103 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1104 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1104, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1105 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1105, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1106 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCONCEALBABYSWALL_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1106, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1107 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLCONCEALBABYSWALL_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1108 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCONCEALBABYSWALL_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCONCEALBABYSWALL( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLCONCEALBABYSWALL_Lookback()); + /* "talib/_func.pxi":1109 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCONCEALBABYSWALL_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLCONCEALBABYSWALL( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1110 + * lookback = begidx + lib.TA_CDLCONCEALBABYSWALL_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCONCEALBABYSWALL( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLCONCEALBABYSWALL(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1111 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCONCEALBABYSWALL( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLCONCEALBABYSWALL, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1112 + * retCode = lib.TA_CDLCONCEALBABYSWALL( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1084 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCONCEALBABYSWALL(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -11649,6 +16075,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_76CDLCONCEALBABYSWALL(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_func.pxi":1116 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCOUNTERATTACK(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_79CDLCOUNTERATTACK(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -11769,52 +16202,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_78CDLCOUNTERATTACK(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1133 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1134 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1135 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1136 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1137 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1137, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1138 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCOUNTERATTACK_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1138, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1139 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLCOUNTERATTACK_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1140 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCOUNTERATTACK_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCOUNTERATTACK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLCOUNTERATTACK_Lookback()); + /* "talib/_func.pxi":1141 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLCOUNTERATTACK_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLCOUNTERATTACK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCOUNTERATTACK", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1141, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1142 + * lookback = begidx + lib.TA_CDLCOUNTERATTACK_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCOUNTERATTACK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLCOUNTERATTACK", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLCOUNTERATTACK(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1143 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLCOUNTERATTACK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCOUNTERATTACK", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLCOUNTERATTACK, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1144 + * retCode = lib.TA_CDLCOUNTERATTACK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLCOUNTERATTACK", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1116 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCOUNTERATTACK(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -11832,6 +16356,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_78CDLCOUNTERATTACK(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":1148 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_81CDLDARKCLOUDCOVER(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -11970,52 +16501,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_80CDLDARKCLOUDCOVER(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1167 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1168 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1169 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1169, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1170 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1171 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1171, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1172 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDARKCLOUDCOVER_Lookback( penetration ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1172, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1173 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLDARKCLOUDCOVER_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1174 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDARKCLOUDCOVER_Lookback( penetration ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDARKCLOUDCOVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLDARKCLOUDCOVER_Lookback(__pyx_v_penetration)); + /* "talib/_func.pxi":1175 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDARKCLOUDCOVER_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLDARKCLOUDCOVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1176 + * lookback = begidx + lib.TA_CDLDARKCLOUDCOVER_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDARKCLOUDCOVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLDARKCLOUDCOVER(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1177 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDARKCLOUDCOVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLDARKCLOUDCOVER, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1178 + * retCode = lib.TA_CDLDARKCLOUDCOVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1148 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -12033,6 +16655,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_80CDLDARKCLOUDCOVER(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_func.pxi":1182 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_83CDLDOJI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -12153,52 +16782,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_82CDLDOJI(CYTHON_UNUSED PyObject *__py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1199 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1200 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1201 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1201, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1202 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1203 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1203, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1204 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDOJI_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1204, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1205 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1206 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDOJI_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLDOJI_Lookback()); + /* "talib/_func.pxi":1207 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDOJI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1207, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1208 + * lookback = begidx + lib.TA_CDLDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLDOJI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLDOJI(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1209 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDOJI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLDOJI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1209, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1210 + * retCode = lib.TA_CDLDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDOJI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1182 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -12216,6 +16936,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_82CDLDOJI(CYTHON_UNUSED PyObject *__py return __pyx_r; } +/* "talib/_func.pxi":1214 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJISTAR(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_85CDLDOJISTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -12336,52 +17063,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_84CDLDOJISTAR(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1231 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1232 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1233 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1233, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1234 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1235 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1235, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1236 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDOJISTAR_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1236, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1237 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLDOJISTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1238 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDOJISTAR_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLDOJISTAR_Lookback()); + /* "talib/_func.pxi":1239 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDOJISTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDOJISTAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1240 + * lookback = begidx + lib.TA_CDLDOJISTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLDOJISTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLDOJISTAR(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1241 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDOJISTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLDOJISTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1242 + * retCode = lib.TA_CDLDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDOJISTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1214 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJISTAR(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -12399,6 +17217,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_84CDLDOJISTAR(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_func.pxi":1246 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDRAGONFLYDOJI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_87CDLDRAGONFLYDOJI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -12519,52 +17344,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_86CDLDRAGONFLYDOJI(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1263 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1263, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1264 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1264, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1265 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1266 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1267 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1267, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1268 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDRAGONFLYDOJI_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1268, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1269 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLDRAGONFLYDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1270 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDRAGONFLYDOJI_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDRAGONFLYDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLDRAGONFLYDOJI_Lookback()); + /* "talib/_func.pxi":1271 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLDRAGONFLYDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLDRAGONFLYDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1272 + * lookback = begidx + lib.TA_CDLDRAGONFLYDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDRAGONFLYDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLDRAGONFLYDOJI(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1273 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLDRAGONFLYDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLDRAGONFLYDOJI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1274 + * retCode = lib.TA_CDLDRAGONFLYDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1246 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDRAGONFLYDOJI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -12582,6 +17498,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_86CDLDRAGONFLYDOJI(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":1278 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLENGULFING(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_89CDLENGULFING(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -12702,52 +17625,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_88CDLENGULFING(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1295 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1295, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1296 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1296, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1297 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1298 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1299 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1299, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1300 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLENGULFING_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1300, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1301 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLENGULFING_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1302 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLENGULFING_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLENGULFING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLENGULFING_Lookback()); + /* "talib/_func.pxi":1303 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLENGULFING_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLENGULFING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLENGULFING", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1304 + * lookback = begidx + lib.TA_CDLENGULFING_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLENGULFING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLENGULFING", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLENGULFING(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1305 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLENGULFING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLENGULFING", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLENGULFING, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1306 + * retCode = lib.TA_CDLENGULFING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLENGULFING", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1278 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLENGULFING(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -12765,6 +17779,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_88CDLENGULFING(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":1310 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_91CDLEVENINGDOJISTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -12903,52 +17924,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_90CDLEVENINGDOJISTAR(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1329 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1330 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1331 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1331, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1332 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1333 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1333, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1334 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLEVENINGDOJISTAR_Lookback( penetration ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1334, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1335 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLEVENINGDOJISTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1336 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLEVENINGDOJISTAR_Lookback( penetration ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLEVENINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLEVENINGDOJISTAR_Lookback(__pyx_v_penetration)); + /* "talib/_func.pxi":1337 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLEVENINGDOJISTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLEVENINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLEVENINGDOJISTAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1338 + * lookback = begidx + lib.TA_CDLEVENINGDOJISTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLEVENINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLEVENINGDOJISTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLEVENINGDOJISTAR(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1339 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLEVENINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLEVENINGDOJISTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLEVENINGDOJISTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1340 + * retCode = lib.TA_CDLEVENINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLEVENINGDOJISTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1310 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -12966,6 +18078,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_90CDLEVENINGDOJISTAR(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_func.pxi":1344 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLEVENINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGSTAR(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_93CDLEVENINGSTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -13104,52 +18223,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_92CDLEVENINGSTAR(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1363 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1364 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1365 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1366 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1367 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1367, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1368 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLEVENINGSTAR_Lookback( penetration ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1368, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1369 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLEVENINGSTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1370 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLEVENINGSTAR_Lookback( penetration ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLEVENINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLEVENINGSTAR_Lookback(__pyx_v_penetration)); + /* "talib/_func.pxi":1371 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLEVENINGSTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLEVENINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLEVENINGSTAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1372 + * lookback = begidx + lib.TA_CDLEVENINGSTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLEVENINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLEVENINGSTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLEVENINGSTAR(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1373 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLEVENINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLEVENINGSTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLEVENINGSTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1374 + * retCode = lib.TA_CDLEVENINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLEVENINGSTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1344 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLEVENINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGSTAR(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -13167,6 +18377,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_92CDLEVENINGSTAR(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_func.pxi":1378 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLGAPSIDESIDEWHITE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGAPSIDESIDEWHITE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_95CDLGAPSIDESIDEWHITE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -13287,52 +18504,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_94CDLGAPSIDESIDEWHITE(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1395 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1396 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1397 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1398 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1399 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1399, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1400 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLGAPSIDESIDEWHITE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1400, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1401 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLGAPSIDESIDEWHITE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1402 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLGAPSIDESIDEWHITE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLGAPSIDESIDEWHITE_Lookback()); + /* "talib/_func.pxi":1403 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLGAPSIDESIDEWHITE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLGAPSIDESIDEWHITE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1404 + * lookback = begidx + lib.TA_CDLGAPSIDESIDEWHITE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLGAPSIDESIDEWHITE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLGAPSIDESIDEWHITE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1405 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLGAPSIDESIDEWHITE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLGAPSIDESIDEWHITE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1406 + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLGAPSIDESIDEWHITE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1378 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLGAPSIDESIDEWHITE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGAPSIDESIDEWHITE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -13350,6 +18658,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_94CDLGAPSIDESIDEWHITE(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_func.pxi":1410 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLGRAVESTONEDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGRAVESTONEDOJI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_97CDLGRAVESTONEDOJI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -13470,52 +18785,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_96CDLGRAVESTONEDOJI(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1427 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1428 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1429 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1430 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1430, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1431 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1431, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1432 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLGRAVESTONEDOJI_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1432, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1433 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLGRAVESTONEDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1434 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLGRAVESTONEDOJI_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLGRAVESTONEDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLGRAVESTONEDOJI_Lookback()); + /* "talib/_func.pxi":1435 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLGRAVESTONEDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLGRAVESTONEDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLGRAVESTONEDOJI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1436 + * lookback = begidx + lib.TA_CDLGRAVESTONEDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLGRAVESTONEDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLGRAVESTONEDOJI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLGRAVESTONEDOJI(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1437 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLGRAVESTONEDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLGRAVESTONEDOJI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLGRAVESTONEDOJI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1438 + * retCode = lib.TA_CDLGRAVESTONEDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLGRAVESTONEDOJI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1410 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLGRAVESTONEDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGRAVESTONEDOJI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -13533,6 +18939,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_96CDLGRAVESTONEDOJI(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_func.pxi":1442 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHAMMER(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_99CDLHAMMER(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -13653,52 +19066,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_98CDLHAMMER(CYTHON_UNUSED PyObject *__ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1459 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1460 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1461 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1462 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1462, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1463 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1463, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1464 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHAMMER_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1464, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1465 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLHAMMER_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1466 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHAMMER_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLHAMMER_Lookback()); + /* "talib/_func.pxi":1467 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHAMMER_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHAMMER", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1468 + * lookback = begidx + lib.TA_CDLHAMMER_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHAMMER", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHAMMER(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1469 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHAMMER", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHAMMER, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1469, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1470 + * retCode = lib.TA_CDLHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHAMMER", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1442 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHAMMER(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -13716,6 +19220,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_98CDLHAMMER(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":1474 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHANGINGMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHANGINGMAN(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_101CDLHANGINGMAN(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -13836,52 +19347,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_100CDLHANGINGMAN(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1491 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1492 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1493 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1494 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1495 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1495, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1496 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHANGINGMAN_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1496, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1497 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLHANGINGMAN_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1498 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHANGINGMAN_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHANGINGMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLHANGINGMAN_Lookback()); + /* "talib/_func.pxi":1499 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHANGINGMAN_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHANGINGMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHANGINGMAN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1500 + * lookback = begidx + lib.TA_CDLHANGINGMAN_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHANGINGMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHANGINGMAN", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHANGINGMAN(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1501 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHANGINGMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHANGINGMAN", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHANGINGMAN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1502 + * retCode = lib.TA_CDLHANGINGMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHANGINGMAN", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1474 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHANGINGMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHANGINGMAN(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -13899,6 +19501,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_100CDLHANGINGMAN(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_func.pxi":1506 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHARAMI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_103CDLHARAMI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -14019,52 +19628,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_102CDLHARAMI(CYTHON_UNUSED PyObject *_ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1523 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1524 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1524, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1525 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1525, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1526 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1526, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1527 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1527, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1528 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHARAMI_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1528, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1529 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLHARAMI_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1530 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHARAMI_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHARAMI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLHARAMI_Lookback()); + /* "talib/_func.pxi":1531 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHARAMI_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHARAMI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHARAMI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1532 + * lookback = begidx + lib.TA_CDLHARAMI_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHARAMI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHARAMI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHARAMI(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1533 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHARAMI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHARAMI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHARAMI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1534 + * retCode = lib.TA_CDLHARAMI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHARAMI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1506 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHARAMI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -14082,6 +19782,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_102CDLHARAMI(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_func.pxi":1538 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHARAMICROSS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMICROSS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_105CDLHARAMICROSS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -14202,52 +19909,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_104CDLHARAMICROSS(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1555 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1556 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1557 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1557, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1558 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1559 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1559, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1560 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHARAMICROSS_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1560, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1561 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLHARAMICROSS_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1562 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHARAMICROSS_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHARAMICROSS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLHARAMICROSS_Lookback()); + /* "talib/_func.pxi":1563 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHARAMICROSS_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHARAMICROSS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHARAMICROSS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1563, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1564 + * lookback = begidx + lib.TA_CDLHARAMICROSS_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHARAMICROSS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHARAMICROSS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHARAMICROSS(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1565 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHARAMICROSS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHARAMICROSS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHARAMICROSS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1566 + * retCode = lib.TA_CDLHARAMICROSS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHARAMICROSS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1538 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHARAMICROSS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMICROSS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -14265,6 +20063,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_104CDLHARAMICROSS(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_func.pxi":1570 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIGHWAVE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIGHWAVE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_107CDLHIGHWAVE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -14385,52 +20190,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_106CDLHIGHWAVE(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1587 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1588 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1589 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1590 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1591 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1591, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1592 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIGHWAVE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1592, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1593 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLHIGHWAVE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1594 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIGHWAVE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIGHWAVE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLHIGHWAVE_Lookback()); + /* "talib/_func.pxi":1595 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIGHWAVE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHIGHWAVE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIGHWAVE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1596 + * lookback = begidx + lib.TA_CDLHIGHWAVE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIGHWAVE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHIGHWAVE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHIGHWAVE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1597 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIGHWAVE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIGHWAVE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHIGHWAVE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1598 + * retCode = lib.TA_CDLHIGHWAVE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIGHWAVE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1570 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIGHWAVE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIGHWAVE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -14448,6 +20344,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_106CDLHIGHWAVE(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":1602 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIKKAKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_109CDLHIKKAKE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -14568,52 +20471,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_108CDLHIKKAKE(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1619 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1620 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1621 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1622 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1622, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1623 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1623, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1624 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIKKAKE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1624, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1625 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLHIKKAKE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1626 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIKKAKE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIKKAKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLHIKKAKE_Lookback()); + /* "talib/_func.pxi":1627 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIKKAKE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHIKKAKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIKKAKE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1628 + * lookback = begidx + lib.TA_CDLHIKKAKE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIKKAKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHIKKAKE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHIKKAKE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1629 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIKKAKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIKKAKE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHIKKAKE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1630 + * retCode = lib.TA_CDLHIKKAKE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIKKAKE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1602 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIKKAKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -14631,6 +20625,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_108CDLHIKKAKE(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_func.pxi":1634 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIKKAKEMOD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKEMOD(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_111CDLHIKKAKEMOD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -14751,52 +20752,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_110CDLHIKKAKEMOD(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1651 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1652 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1653 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1653, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1654 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1655 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1655, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1656 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIKKAKEMOD_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1656, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1657 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLHIKKAKEMOD_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1658 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIKKAKEMOD_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIKKAKEMOD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLHIKKAKEMOD_Lookback()); + /* "talib/_func.pxi":1659 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHIKKAKEMOD_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHIKKAKEMOD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIKKAKEMOD", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1660 + * lookback = begidx + lib.TA_CDLHIKKAKEMOD_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIKKAKEMOD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHIKKAKEMOD", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHIKKAKEMOD(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1661 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHIKKAKEMOD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIKKAKEMOD", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHIKKAKEMOD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1661, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1662 + * retCode = lib.TA_CDLHIKKAKEMOD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHIKKAKEMOD", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1634 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIKKAKEMOD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKEMOD(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -14814,6 +20906,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_110CDLHIKKAKEMOD(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_func.pxi":1666 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHOMINGPIGEON( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHOMINGPIGEON(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_113CDLHOMINGPIGEON(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -14934,52 +21033,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_112CDLHOMINGPIGEON(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1683 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1684 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1684, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1685 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1686 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1687 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1687, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1688 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHOMINGPIGEON_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1688, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1689 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLHOMINGPIGEON_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1690 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHOMINGPIGEON_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHOMINGPIGEON( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLHOMINGPIGEON_Lookback()); + /* "talib/_func.pxi":1691 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLHOMINGPIGEON_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHOMINGPIGEON( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHOMINGPIGEON", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1692 + * lookback = begidx + lib.TA_CDLHOMINGPIGEON_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHOMINGPIGEON( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHOMINGPIGEON", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHOMINGPIGEON(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1693 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLHOMINGPIGEON( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHOMINGPIGEON", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHOMINGPIGEON, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1694 + * retCode = lib.TA_CDLHOMINGPIGEON( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLHOMINGPIGEON", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1666 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHOMINGPIGEON( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHOMINGPIGEON(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -14997,6 +21187,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_112CDLHOMINGPIGEON(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":1698 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLIDENTICAL3CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLIDENTICAL3CROWS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_115CDLIDENTICAL3CROWS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -15117,52 +21314,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_114CDLIDENTICAL3CROWS(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1715 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1716 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1717 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1718 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1719 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1719, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1720 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLIDENTICAL3CROWS_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1720, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1721 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLIDENTICAL3CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1722 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLIDENTICAL3CROWS_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLIDENTICAL3CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLIDENTICAL3CROWS_Lookback()); + /* "talib/_func.pxi":1723 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLIDENTICAL3CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLIDENTICAL3CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLIDENTICAL3CROWS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1724 + * lookback = begidx + lib.TA_CDLIDENTICAL3CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLIDENTICAL3CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLIDENTICAL3CROWS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLIDENTICAL3CROWS(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1725 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLIDENTICAL3CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLIDENTICAL3CROWS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLIDENTICAL3CROWS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1726 + * retCode = lib.TA_CDLIDENTICAL3CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLIDENTICAL3CROWS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1698 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLIDENTICAL3CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLIDENTICAL3CROWS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -15180,6 +21468,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_114CDLIDENTICAL3CROWS(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_func.pxi":1730 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLINNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINNECK(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_117CDLINNECK(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -15300,52 +21595,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_116CDLINNECK(CYTHON_UNUSED PyObject *_ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1747 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1748 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1749 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1750 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1751 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1751, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1752 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLINNECK_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1752, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1753 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLINNECK_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1754 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLINNECK_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLINNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLINNECK_Lookback()); + /* "talib/_func.pxi":1755 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLINNECK_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLINNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLINNECK", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1755, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1756 + * lookback = begidx + lib.TA_CDLINNECK_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLINNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLINNECK", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLINNECK(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1757 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLINNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLINNECK", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLINNECK, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1757, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1758 + * retCode = lib.TA_CDLINNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLINNECK", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1730 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLINNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINNECK(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -15363,6 +21749,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_116CDLINNECK(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_func.pxi":1762 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLINVERTEDHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINVERTEDHAMMER(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_119CDLINVERTEDHAMMER(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -15483,52 +21876,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_118CDLINVERTEDHAMMER(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1779 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1780 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1781 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1782 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1783 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1783, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1784 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLINVERTEDHAMMER_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1784, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1785 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLINVERTEDHAMMER_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1786 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLINVERTEDHAMMER_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLINVERTEDHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLINVERTEDHAMMER_Lookback()); + /* "talib/_func.pxi":1787 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLINVERTEDHAMMER_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLINVERTEDHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLINVERTEDHAMMER", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1787, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1788 + * lookback = begidx + lib.TA_CDLINVERTEDHAMMER_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLINVERTEDHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLINVERTEDHAMMER", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLINVERTEDHAMMER(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1789 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLINVERTEDHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLINVERTEDHAMMER", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLINVERTEDHAMMER, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1789, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1790 + * retCode = lib.TA_CDLINVERTEDHAMMER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLINVERTEDHAMMER", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1762 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLINVERTEDHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINVERTEDHAMMER(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -15546,6 +22030,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_118CDLINVERTEDHAMMER(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_func.pxi":1794 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLKICKING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKING(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_121CDLKICKING(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -15666,52 +22157,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_120CDLKICKING(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1811 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1812 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1813 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1814 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1815 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1815, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1816 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLKICKING_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1816, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1817 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLKICKING_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1818 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLKICKING_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLKICKING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLKICKING_Lookback()); + /* "talib/_func.pxi":1819 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLKICKING_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLKICKING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLKICKING", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1820 + * lookback = begidx + lib.TA_CDLKICKING_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLKICKING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLKICKING", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLKICKING(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1821 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLKICKING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLKICKING", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLKICKING, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1822 + * retCode = lib.TA_CDLKICKING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLKICKING", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1794 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLKICKING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKING(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -15729,6 +22311,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_120CDLKICKING(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_func.pxi":1826 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLKICKINGBYLENGTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKINGBYLENGTH(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_123CDLKICKINGBYLENGTH(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -15849,52 +22438,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_122CDLKICKINGBYLENGTH(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1843 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1843, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1844 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1845 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1845, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1846 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1847 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1847, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1848 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLKICKINGBYLENGTH_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1848, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1849 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLKICKINGBYLENGTH_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1850 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLKICKINGBYLENGTH_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLKICKINGBYLENGTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLKICKINGBYLENGTH_Lookback()); + /* "talib/_func.pxi":1851 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLKICKINGBYLENGTH_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLKICKINGBYLENGTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLKICKINGBYLENGTH", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1851, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1852 + * lookback = begidx + lib.TA_CDLKICKINGBYLENGTH_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLKICKINGBYLENGTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLKICKINGBYLENGTH", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLKICKINGBYLENGTH(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1853 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLKICKINGBYLENGTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLKICKINGBYLENGTH", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLKICKINGBYLENGTH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1853, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1854 + * retCode = lib.TA_CDLKICKINGBYLENGTH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLKICKINGBYLENGTH", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1826 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLKICKINGBYLENGTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKINGBYLENGTH(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -15912,6 +22592,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_122CDLKICKINGBYLENGTH(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_func.pxi":1858 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLADDERBOTTOM( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLADDERBOTTOM(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_125CDLLADDERBOTTOM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -16032,52 +22719,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_124CDLLADDERBOTTOM(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1875 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1876 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1877 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1878 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1879 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1879, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1880 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLADDERBOTTOM_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1880, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1881 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLLADDERBOTTOM_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1882 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLADDERBOTTOM_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLADDERBOTTOM( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLLADDERBOTTOM_Lookback()); + /* "talib/_func.pxi":1883 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLADDERBOTTOM_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLLADDERBOTTOM( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLADDERBOTTOM", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1884 + * lookback = begidx + lib.TA_CDLLADDERBOTTOM_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLADDERBOTTOM( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLLADDERBOTTOM", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLLADDERBOTTOM(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1885 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLADDERBOTTOM( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLADDERBOTTOM", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLLADDERBOTTOM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1886 + * retCode = lib.TA_CDLLADDERBOTTOM( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLADDERBOTTOM", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1858 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLADDERBOTTOM( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLADDERBOTTOM(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -16095,6 +22873,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_124CDLLADDERBOTTOM(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":1890 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLONGLEGGEDDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLEGGEDDOJI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_127CDLLONGLEGGEDDOJI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -16215,52 +23000,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_126CDLLONGLEGGEDDOJI(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1907 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1907, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1908 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1908, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1909 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1909, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1910 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1910, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1911 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1911, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1912 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLONGLEGGEDDOJI_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1912, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1913 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLLONGLEGGEDDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1914 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLONGLEGGEDDOJI_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLONGLEGGEDDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLLONGLEGGEDDOJI_Lookback()); + /* "talib/_func.pxi":1915 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLONGLEGGEDDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLLONGLEGGEDDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLONGLEGGEDDOJI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1915, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1916 + * lookback = begidx + lib.TA_CDLLONGLEGGEDDOJI_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLONGLEGGEDDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLLONGLEGGEDDOJI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLLONGLEGGEDDOJI(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1917 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLONGLEGGEDDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLONGLEGGEDDOJI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLLONGLEGGEDDOJI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1917, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1918 + * retCode = lib.TA_CDLLONGLEGGEDDOJI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLONGLEGGEDDOJI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1890 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLONGLEGGEDDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLEGGEDDOJI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -16278,6 +23154,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_126CDLLONGLEGGEDDOJI(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_func.pxi":1922 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLONGLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLINE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_129CDLLONGLINE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -16398,52 +23281,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_128CDLLONGLINE(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1939 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1940 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1940, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1941 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1942 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1942, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1943 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1943, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1944 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLONGLINE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1944, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1945 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLLONGLINE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1946 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLONGLINE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLONGLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLLONGLINE_Lookback()); + /* "talib/_func.pxi":1947 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLLONGLINE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLLONGLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLONGLINE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1947, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1948 + * lookback = begidx + lib.TA_CDLLONGLINE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLONGLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLLONGLINE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLLONGLINE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1949 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLLONGLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLONGLINE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLLONGLINE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1949, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1950 + * retCode = lib.TA_CDLLONGLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLLONGLINE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1922 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLONGLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLINE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -16461,6 +23435,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_128CDLLONGLINE(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":1954 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMARUBOZU(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_131CDLMARUBOZU(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -16581,52 +23562,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_130CDLMARUBOZU(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":1971 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1971, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1972 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1973 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1973, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1974 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":1975 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 1975, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":1976 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMARUBOZU_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 1976, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":1977 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLMARUBOZU_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":1978 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMARUBOZU_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLMARUBOZU_Lookback()); + /* "talib/_func.pxi":1979 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMARUBOZU_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMARUBOZU", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1980 + * lookback = begidx + lib.TA_CDLMARUBOZU_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMARUBOZU", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMARUBOZU(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":1981 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMARUBOZU", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMARUBOZU, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":1982 + * retCode = lib.TA_CDLMARUBOZU( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMARUBOZU", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1954 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMARUBOZU(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -16644,6 +23716,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_130CDLMARUBOZU(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":1986 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMATCHINGLOW( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMATCHINGLOW(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_133CDLMATCHINGLOW(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -16764,52 +23843,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_132CDLMATCHINGLOW(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2003 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2003, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2004 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2004, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2005 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2005, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2006 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2006, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2007 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2007, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2008 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMATCHINGLOW_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2008, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2009 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLMATCHINGLOW_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2010 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMATCHINGLOW_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMATCHINGLOW( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLMATCHINGLOW_Lookback()); + /* "talib/_func.pxi":2011 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMATCHINGLOW_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMATCHINGLOW( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMATCHINGLOW", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2011, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2012 + * lookback = begidx + lib.TA_CDLMATCHINGLOW_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMATCHINGLOW( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMATCHINGLOW", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMATCHINGLOW(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2013 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMATCHINGLOW( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMATCHINGLOW", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMATCHINGLOW, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2013, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2014 + * retCode = lib.TA_CDLMATCHINGLOW( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMATCHINGLOW", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":1986 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMATCHINGLOW( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMATCHINGLOW(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -16827,6 +23997,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_132CDLMATCHINGLOW(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_func.pxi":2018 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMATHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLMATHOLD(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_135CDLMATHOLD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -16965,52 +24142,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_134CDLMATHOLD(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2037 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2038 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2038, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2039 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2039, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2040 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2040, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2041 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2041, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2042 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMATHOLD_Lookback( penetration ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2042, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2043 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLMATHOLD_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2044 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMATHOLD_Lookback( penetration ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMATHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLMATHOLD_Lookback(__pyx_v_penetration)); + /* "talib/_func.pxi":2045 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMATHOLD_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMATHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMATHOLD", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2045, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2046 + * lookback = begidx + lib.TA_CDLMATHOLD_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMATHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMATHOLD", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMATHOLD(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2047 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMATHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMATHOLD", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMATHOLD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2047, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2048 + * retCode = lib.TA_CDLMATHOLD( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMATHOLD", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2018 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMATHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLMATHOLD(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -17028,6 +24296,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_134CDLMATHOLD(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_func.pxi":2052 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMORNINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_137CDLMORNINGDOJISTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -17166,52 +24441,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_136CDLMORNINGDOJISTAR(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2071 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2071, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2072 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2072, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2073 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2074 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2075 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2075, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2076 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMORNINGDOJISTAR_Lookback( penetration ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2076, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2077 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLMORNINGDOJISTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2078 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMORNINGDOJISTAR_Lookback( penetration ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMORNINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLMORNINGDOJISTAR_Lookback(__pyx_v_penetration)); + /* "talib/_func.pxi":2079 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMORNINGDOJISTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMORNINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMORNINGDOJISTAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2080 + * lookback = begidx + lib.TA_CDLMORNINGDOJISTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMORNINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMORNINGDOJISTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMORNINGDOJISTAR(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2081 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMORNINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMORNINGDOJISTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMORNINGDOJISTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2081, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2082 + * retCode = lib.TA_CDLMORNINGDOJISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMORNINGDOJISTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2052 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMORNINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -17229,6 +24595,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_136CDLMORNINGDOJISTAR(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_func.pxi":2086 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMORNINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGSTAR(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_139CDLMORNINGSTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -17367,52 +24740,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_138CDLMORNINGSTAR(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2105 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2106 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2106, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2107 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2108 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2109 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2109, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2110 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMORNINGSTAR_Lookback( penetration ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2110, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2111 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLMORNINGSTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2112 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMORNINGSTAR_Lookback( penetration ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMORNINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLMORNINGSTAR_Lookback(__pyx_v_penetration)); + /* "talib/_func.pxi":2113 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLMORNINGSTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMORNINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMORNINGSTAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2114 + * lookback = begidx + lib.TA_CDLMORNINGSTAR_Lookback( penetration ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMORNINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMORNINGSTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMORNINGSTAR(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2115 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLMORNINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMORNINGSTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMORNINGSTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2116 + * retCode = lib.TA_CDLMORNINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , penetration , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLMORNINGSTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2086 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMORNINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGSTAR(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -17430,6 +24894,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_138CDLMORNINGSTAR(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_func.pxi":2120 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLONNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLONNECK(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_141CDLONNECK(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -17550,52 +25021,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_140CDLONNECK(CYTHON_UNUSED PyObject *_ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2137 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2138 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2138, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2139 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2140 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2140, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2141 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2141, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2142 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLONNECK_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2142, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2143 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLONNECK_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2144 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLONNECK_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLONNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLONNECK_Lookback()); + /* "talib/_func.pxi":2145 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLONNECK_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLONNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLONNECK", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2146 + * lookback = begidx + lib.TA_CDLONNECK_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLONNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLONNECK", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLONNECK(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2147 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLONNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLONNECK", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLONNECK, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2148 + * retCode = lib.TA_CDLONNECK( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLONNECK", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2120 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLONNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLONNECK(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -17613,6 +25175,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_140CDLONNECK(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_func.pxi":2152 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLPIERCING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLPIERCING(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_143CDLPIERCING(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -17733,52 +25302,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_142CDLPIERCING(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2169 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2169, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2170 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2171 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2172 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2173 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2173, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2174 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLPIERCING_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2174, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2175 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLPIERCING_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2176 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLPIERCING_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLPIERCING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLPIERCING_Lookback()); + /* "talib/_func.pxi":2177 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLPIERCING_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLPIERCING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLPIERCING", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2178 + * lookback = begidx + lib.TA_CDLPIERCING_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLPIERCING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLPIERCING", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLPIERCING(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2179 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLPIERCING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLPIERCING", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLPIERCING, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2180 + * retCode = lib.TA_CDLPIERCING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLPIERCING", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2152 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLPIERCING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLPIERCING(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -17796,6 +25456,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_142CDLPIERCING(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":2184 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLRICKSHAWMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRICKSHAWMAN(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_145CDLRICKSHAWMAN(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -17916,52 +25583,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_144CDLRICKSHAWMAN(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2201 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2201, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2202 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2203 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2204 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2204, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2205 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2205, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2206 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLRICKSHAWMAN_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2206, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2207 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLRICKSHAWMAN_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2208 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLRICKSHAWMAN_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLRICKSHAWMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLRICKSHAWMAN_Lookback()); + /* "talib/_func.pxi":2209 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLRICKSHAWMAN_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLRICKSHAWMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLRICKSHAWMAN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2209, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2210 + * lookback = begidx + lib.TA_CDLRICKSHAWMAN_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLRICKSHAWMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLRICKSHAWMAN", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLRICKSHAWMAN(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2211 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLRICKSHAWMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLRICKSHAWMAN", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLRICKSHAWMAN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2211, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2212 + * retCode = lib.TA_CDLRICKSHAWMAN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLRICKSHAWMAN", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2184 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLRICKSHAWMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRICKSHAWMAN(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -17979,6 +25737,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_144CDLRICKSHAWMAN(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_func.pxi":2216 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLRISEFALL3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRISEFALL3METHODS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_147CDLRISEFALL3METHODS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -18099,52 +25864,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_146CDLRISEFALL3METHODS(CYTHON_UNUSED P __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2233 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2233, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2234 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2235 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2236 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2237 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2237, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2238 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLRISEFALL3METHODS_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2238, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2239 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLRISEFALL3METHODS_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2240 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLRISEFALL3METHODS_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLRISEFALL3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLRISEFALL3METHODS_Lookback()); + /* "talib/_func.pxi":2241 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLRISEFALL3METHODS_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLRISEFALL3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLRISEFALL3METHODS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2242 + * lookback = begidx + lib.TA_CDLRISEFALL3METHODS_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLRISEFALL3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLRISEFALL3METHODS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLRISEFALL3METHODS(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2243 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLRISEFALL3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLRISEFALL3METHODS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLRISEFALL3METHODS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2243, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2244 + * retCode = lib.TA_CDLRISEFALL3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLRISEFALL3METHODS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2216 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLRISEFALL3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRISEFALL3METHODS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -18162,6 +26018,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_146CDLRISEFALL3METHODS(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_func.pxi":2248 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSEPARATINGLINES( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSEPARATINGLINES(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_149CDLSEPARATINGLINES(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -18282,52 +26145,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_148CDLSEPARATINGLINES(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2265 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2266 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2267 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2267, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2268 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2269 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2269, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2270 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSEPARATINGLINES_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2270, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2271 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLSEPARATINGLINES_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2272 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSEPARATINGLINES_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSEPARATINGLINES( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLSEPARATINGLINES_Lookback()); + /* "talib/_func.pxi":2273 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSEPARATINGLINES_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSEPARATINGLINES( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSEPARATINGLINES", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2274 + * lookback = begidx + lib.TA_CDLSEPARATINGLINES_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSEPARATINGLINES( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSEPARATINGLINES", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSEPARATINGLINES(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2275 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSEPARATINGLINES( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSEPARATINGLINES", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSEPARATINGLINES, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2275, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2276 + * retCode = lib.TA_CDLSEPARATINGLINES( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSEPARATINGLINES", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2248 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSEPARATINGLINES( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSEPARATINGLINES(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -18345,6 +26299,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_148CDLSEPARATINGLINES(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_func.pxi":2280 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSHOOTINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHOOTINGSTAR(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_151CDLSHOOTINGSTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -18465,52 +26426,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_150CDLSHOOTINGSTAR(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2297 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2298 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2299 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2299, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2300 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2301 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2301, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2302 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSHOOTINGSTAR_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2302, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2303 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLSHOOTINGSTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2304 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSHOOTINGSTAR_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSHOOTINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLSHOOTINGSTAR_Lookback()); + /* "talib/_func.pxi":2305 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSHOOTINGSTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSHOOTINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSHOOTINGSTAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2306 + * lookback = begidx + lib.TA_CDLSHOOTINGSTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSHOOTINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSHOOTINGSTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSHOOTINGSTAR(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2307 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSHOOTINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSHOOTINGSTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSHOOTINGSTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2308 + * retCode = lib.TA_CDLSHOOTINGSTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSHOOTINGSTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2280 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSHOOTINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHOOTINGSTAR(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -18528,6 +26580,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_150CDLSHOOTINGSTAR(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":2312 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSHORTLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHORTLINE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_153CDLSHORTLINE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -18648,52 +26707,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_152CDLSHORTLINE(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2329 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2330 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2331 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2331, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2332 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2333 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2333, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2334 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSHORTLINE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2334, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2335 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLSHORTLINE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2336 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSHORTLINE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSHORTLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLSHORTLINE_Lookback()); + /* "talib/_func.pxi":2337 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSHORTLINE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSHORTLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSHORTLINE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2338 + * lookback = begidx + lib.TA_CDLSHORTLINE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSHORTLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSHORTLINE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSHORTLINE(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2339 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSHORTLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSHORTLINE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSHORTLINE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2340 + * retCode = lib.TA_CDLSHORTLINE( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSHORTLINE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2312 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSHORTLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHORTLINE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -18711,6 +26861,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_152CDLSHORTLINE(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":2344 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSPINNINGTOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSPINNINGTOP(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_155CDLSPINNINGTOP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -18831,52 +26988,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_154CDLSPINNINGTOP(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2361 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2362 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2363 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2364 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2365 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2365, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2366 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSPINNINGTOP_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2366, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2367 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLSPINNINGTOP_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2368 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSPINNINGTOP_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSPINNINGTOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLSPINNINGTOP_Lookback()); + /* "talib/_func.pxi":2369 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSPINNINGTOP_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSPINNINGTOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSPINNINGTOP", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2370 + * lookback = begidx + lib.TA_CDLSPINNINGTOP_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSPINNINGTOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSPINNINGTOP", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSPINNINGTOP(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2371 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSPINNINGTOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSPINNINGTOP", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSPINNINGTOP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2372 + * retCode = lib.TA_CDLSPINNINGTOP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSPINNINGTOP", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2344 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSPINNINGTOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSPINNINGTOP(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -18894,6 +27142,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_154CDLSPINNINGTOP(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_func.pxi":2376 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSTALLEDPATTERN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTALLEDPATTERN(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_157CDLSTALLEDPATTERN(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -19014,52 +27269,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_156CDLSTALLEDPATTERN(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2393 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2394 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2395 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2396 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2397 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2397, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2398 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSTALLEDPATTERN_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2398, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2399 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLSTALLEDPATTERN_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2400 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSTALLEDPATTERN_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSTALLEDPATTERN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLSTALLEDPATTERN_Lookback()); + /* "talib/_func.pxi":2401 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSTALLEDPATTERN_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSTALLEDPATTERN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSTALLEDPATTERN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2402 + * lookback = begidx + lib.TA_CDLSTALLEDPATTERN_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSTALLEDPATTERN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSTALLEDPATTERN", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSTALLEDPATTERN(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2403 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSTALLEDPATTERN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSTALLEDPATTERN", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSTALLEDPATTERN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2404 + * retCode = lib.TA_CDLSTALLEDPATTERN( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSTALLEDPATTERN", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2376 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSTALLEDPATTERN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTALLEDPATTERN(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -19077,6 +27423,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_156CDLSTALLEDPATTERN(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_func.pxi":2408 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSTICKSANDWICH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTICKSANDWICH(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_159CDLSTICKSANDWICH(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -19197,52 +27550,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_158CDLSTICKSANDWICH(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2425 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2426 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2427 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2428 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2429 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2429, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2430 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSTICKSANDWICH_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2430, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2431 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLSTICKSANDWICH_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2432 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSTICKSANDWICH_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSTICKSANDWICH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLSTICKSANDWICH_Lookback()); + /* "talib/_func.pxi":2433 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLSTICKSANDWICH_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSTICKSANDWICH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSTICKSANDWICH", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2433, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2434 + * lookback = begidx + lib.TA_CDLSTICKSANDWICH_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSTICKSANDWICH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSTICKSANDWICH", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSTICKSANDWICH(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2435 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLSTICKSANDWICH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSTICKSANDWICH", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSTICKSANDWICH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2436 + * retCode = lib.TA_CDLSTICKSANDWICH( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLSTICKSANDWICH", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2408 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSTICKSANDWICH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTICKSANDWICH(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -19260,6 +27704,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_158CDLSTICKSANDWICH(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_func.pxi":2440 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTAKURI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTAKURI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_161CDLTAKURI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -19380,52 +27831,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_160CDLTAKURI(CYTHON_UNUSED PyObject *_ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2457 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2457, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2458 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2459 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2460 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2461 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2461, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2462 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTAKURI_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2462, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2463 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLTAKURI_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2464 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTAKURI_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTAKURI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLTAKURI_Lookback()); + /* "talib/_func.pxi":2465 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTAKURI_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLTAKURI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTAKURI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2465, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2466 + * lookback = begidx + lib.TA_CDLTAKURI_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTAKURI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLTAKURI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLTAKURI(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2467 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTAKURI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTAKURI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLTAKURI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2468 + * retCode = lib.TA_CDLTAKURI( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTAKURI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2440 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTAKURI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTAKURI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -19443,6 +27985,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_160CDLTAKURI(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_func.pxi":2472 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTASUKIGAP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTASUKIGAP(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_163CDLTASUKIGAP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -19563,52 +28112,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_162CDLTASUKIGAP(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2489 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2489, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2490 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2491 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2492 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2493 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2493, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2494 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTASUKIGAP_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2494, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2495 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLTASUKIGAP_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2496 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTASUKIGAP_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTASUKIGAP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLTASUKIGAP_Lookback()); + /* "talib/_func.pxi":2497 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTASUKIGAP_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLTASUKIGAP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTASUKIGAP", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2498 + * lookback = begidx + lib.TA_CDLTASUKIGAP_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTASUKIGAP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLTASUKIGAP", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLTASUKIGAP(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2499 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTASUKIGAP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTASUKIGAP", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLTASUKIGAP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2500 + * retCode = lib.TA_CDLTASUKIGAP( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTASUKIGAP", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2472 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTASUKIGAP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTASUKIGAP(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -19626,6 +28266,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_162CDLTASUKIGAP(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":2504 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTHRUSTING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTHRUSTING(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_165CDLTHRUSTING(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -19746,52 +28393,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_164CDLTHRUSTING(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2521 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2522 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2522, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2523 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2524 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2524, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2525 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2525, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2526 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTHRUSTING_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2526, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2527 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLTHRUSTING_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2528 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTHRUSTING_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTHRUSTING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLTHRUSTING_Lookback()); + /* "talib/_func.pxi":2529 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTHRUSTING_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLTHRUSTING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTHRUSTING", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2529, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2530 + * lookback = begidx + lib.TA_CDLTHRUSTING_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTHRUSTING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLTHRUSTING", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLTHRUSTING(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2531 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTHRUSTING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTHRUSTING", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLTHRUSTING, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2532 + * retCode = lib.TA_CDLTHRUSTING( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTHRUSTING", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2504 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTHRUSTING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTHRUSTING(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -19809,6 +28547,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_164CDLTHRUSTING(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":2536 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTRISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTRISTAR(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_167CDLTRISTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -19929,52 +28674,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_166CDLTRISTAR(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2553 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2553, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2554 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2554, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2555 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2556 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2557 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2557, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2558 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTRISTAR_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2558, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2559 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLTRISTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2560 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTRISTAR_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTRISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLTRISTAR_Lookback()); + /* "talib/_func.pxi":2561 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLTRISTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLTRISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTRISTAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2561, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2562 + * lookback = begidx + lib.TA_CDLTRISTAR_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTRISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLTRISTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLTRISTAR(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2563 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLTRISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTRISTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLTRISTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2563, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2564 + * retCode = lib.TA_CDLTRISTAR( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLTRISTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2536 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTRISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTRISTAR(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -19992,6 +28828,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_166CDLTRISTAR(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_func.pxi":2568 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLUNIQUE3RIVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUNIQUE3RIVER(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_169CDLUNIQUE3RIVER(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -20112,52 +28955,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_168CDLUNIQUE3RIVER(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2585 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2586 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2587 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2588 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2589 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2589, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2590 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLUNIQUE3RIVER_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2590, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2591 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLUNIQUE3RIVER_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2592 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLUNIQUE3RIVER_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLUNIQUE3RIVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLUNIQUE3RIVER_Lookback()); + /* "talib/_func.pxi":2593 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLUNIQUE3RIVER_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLUNIQUE3RIVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLUNIQUE3RIVER", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2594 + * lookback = begidx + lib.TA_CDLUNIQUE3RIVER_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLUNIQUE3RIVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLUNIQUE3RIVER", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLUNIQUE3RIVER(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2595 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLUNIQUE3RIVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLUNIQUE3RIVER", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLUNIQUE3RIVER, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2596 + * retCode = lib.TA_CDLUNIQUE3RIVER( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLUNIQUE3RIVER", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2568 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLUNIQUE3RIVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUNIQUE3RIVER(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -20175,6 +29109,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_168CDLUNIQUE3RIVER(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":2600 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLUPSIDEGAP2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUPSIDEGAP2CROWS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_171CDLUPSIDEGAP2CROWS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -20295,52 +29236,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_170CDLUPSIDEGAP2CROWS(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2617 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2617, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2618 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2618, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2619 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2620 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2621 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2621, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2622 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLUPSIDEGAP2CROWS_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2622, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2623 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLUPSIDEGAP2CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2624 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLUPSIDEGAP2CROWS_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLUPSIDEGAP2CROWS_Lookback()); + /* "talib/_func.pxi":2625 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLUPSIDEGAP2CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLUPSIDEGAP2CROWS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2626 + * lookback = begidx + lib.TA_CDLUPSIDEGAP2CROWS_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLUPSIDEGAP2CROWS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLUPSIDEGAP2CROWS(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2627 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLUPSIDEGAP2CROWS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLUPSIDEGAP2CROWS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2628 + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLUPSIDEGAP2CROWS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2600 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLUPSIDEGAP2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUPSIDEGAP2CROWS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -20358,6 +29390,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_170CDLUPSIDEGAP2CROWS(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_func.pxi":2632 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLXSIDEGAP3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLXSIDEGAP3METHODS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_173CDLXSIDEGAP3METHODS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -20478,52 +29517,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_172CDLXSIDEGAP3METHODS(CYTHON_UNUSED P __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2649 + * int outnbelement + * np.ndarray outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * high = check_array(high) + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2650 + * np.ndarray outinteger + * open = check_array(open) + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2651 + * open = check_array(open) + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2652 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2653 + * low = check_array(low) + * close = check_array(close) + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2653, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2654 + * close = check_array(close) + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLXSIDEGAP3METHODS_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_open->data), ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2654, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2655 + * length = check_length4(open, high, low, close) + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CDLXSIDEGAP3METHODS_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2656 + * begidx = check_begidx4(length, (open.data), (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLXSIDEGAP3METHODS_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLXSIDEGAP3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CDLXSIDEGAP3METHODS_Lookback()); + /* "talib/_func.pxi":2657 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CDLXSIDEGAP3METHODS_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLXSIDEGAP3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLXSIDEGAP3METHODS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2658 + * lookback = begidx + lib.TA_CDLXSIDEGAP3METHODS_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLXSIDEGAP3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLXSIDEGAP3METHODS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLXSIDEGAP3METHODS(0, __pyx_v_endidx, (((double *)__pyx_v_open->data) + __pyx_v_begidx), (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2659 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_CDLXSIDEGAP3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLXSIDEGAP3METHODS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLXSIDEGAP3METHODS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2660 + * retCode = lib.TA_CDLXSIDEGAP3METHODS( 0 , endidx , (open.data)+begidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_CDLXSIDEGAP3METHODS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":2632 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLXSIDEGAP3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLXSIDEGAP3METHODS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -20541,6 +29671,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_172CDLXSIDEGAP3METHODS(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_func.pxi":2664 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CEIL( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ CEIL(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_175CEIL(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -20584,36 +29721,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_174CEIL(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("CEIL", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":2681 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2682 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":2683 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CEIL_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 2683, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":2684 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CEIL_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2685 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CEIL_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CEIL( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CEIL_Lookback()); + /* "talib/_func.pxi":2686 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CEIL_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CEIL( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CEIL", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2687 + * lookback = begidx + lib.TA_CEIL_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CEIL( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CEIL", retCode) + * return outreal + */ __pyx_v_retCode = TA_CEIL(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2688 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CEIL( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CEIL", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CEIL, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2689 + * retCode = lib.TA_CEIL( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CEIL", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2664 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CEIL( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ CEIL(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -20628,6 +29835,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_174CEIL(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":2693 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CMO( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CMO(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_177CMO(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -20726,36 +29940,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_176CMO(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("CMO", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":2712 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2712, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2713 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":2714 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CMO_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 2714, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":2715 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CMO_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2716 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CMO_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CMO( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CMO_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":2717 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CMO_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CMO( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CMO", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2718 + * lookback = begidx + lib.TA_CMO_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CMO( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CMO", retCode) + * return outreal + */ __pyx_v_retCode = TA_CMO(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2719 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CMO( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CMO", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CMO, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2720 + * retCode = lib.TA_CMO( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CMO", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2693 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CMO( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CMO(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -20770,6 +30054,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_176CMO(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":2724 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CORREL( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CORREL(real0, real1[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_179CORREL(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -20882,42 +30173,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_178CORREL(CYTHON_UNUSED PyObject *__py __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_func.pxi":2744 + * int outnbelement + * np.ndarray outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2744, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2745 + * np.ndarray outreal + * real0 = check_array(real0) + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2746 + * real0 = check_array(real0) + * real1 = check_array(real1) + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2746, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2747 + * real1 = check_array(real1) + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CORREL_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_real0->data), ((double *)__pyx_v_real1->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2747, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2748 + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_CORREL_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2749 + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CORREL_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CORREL( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_CORREL_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":2750 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_CORREL_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_CORREL( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CORREL", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2751 + * lookback = begidx + lib.TA_CORREL_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CORREL( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CORREL", retCode) + * return outreal + */ __pyx_v_retCode = TA_CORREL(0, __pyx_v_endidx, (((double *)__pyx_v_real0->data) + __pyx_v_begidx), (((double *)__pyx_v_real1->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2752 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_CORREL( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CORREL", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CORREL, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2753 + * retCode = lib.TA_CORREL( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_CORREL", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2724 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CORREL( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CORREL(real0, real1[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -20933,6 +30301,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_178CORREL(CYTHON_UNUSED PyObject *__py return __pyx_r; } +/* "talib/_func.pxi":2757 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def COS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COS(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_181COS(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -20976,36 +30351,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_180COS(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("COS", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":2774 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2775 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":2776 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_COS_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 2776, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":2777 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_COS_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2778 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_COS_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_COS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_COS_Lookback()); + /* "talib/_func.pxi":2779 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_COS_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_COS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_COS", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2780 + * lookback = begidx + lib.TA_COS_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_COS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_COS", retCode) + * return outreal + */ __pyx_v_retCode = TA_COS(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2781 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_COS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_COS", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_COS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2782 + * retCode = lib.TA_COS( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_COS", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2757 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def COS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COS(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21020,6 +30465,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_180COS(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":2786 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def COSH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COSH(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_183COSH(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -21063,36 +30515,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_182COSH(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("COSH", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":2803 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2804 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":2805 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_COSH_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 2805, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":2806 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_COSH_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2807 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_COSH_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_COSH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_COSH_Lookback()); + /* "talib/_func.pxi":2808 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_COSH_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_COSH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_COSH", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2809 + * lookback = begidx + lib.TA_COSH_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_COSH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_COSH", retCode) + * return outreal + */ __pyx_v_retCode = TA_COSH(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2810 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_COSH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_COSH", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_COSH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2811 + * retCode = lib.TA_COSH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_COSH", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2786 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def COSH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COSH(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21107,6 +30629,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_182COSH(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":2815 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DEMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_185DEMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -21205,36 +30734,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_184DEMA(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("DEMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":2834 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2835 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":2836 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DEMA_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 2836, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":2837 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_DEMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2838 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DEMA_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_DEMA_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":2839 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DEMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_DEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DEMA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2839, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2840 + * lookback = begidx + lib.TA_DEMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_DEMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_DEMA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2841 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DEMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_DEMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2841, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2842 + * retCode = lib.TA_DEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DEMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2815 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DEMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21249,6 +30848,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_184DEMA(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":2846 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DIV( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ DIV(real0, real1) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_187DIV(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -21343,42 +30949,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_186DIV(CYTHON_UNUSED PyObject *__pyx_s __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_func.pxi":2864 + * int outnbelement + * np.ndarray outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2865 + * np.ndarray outreal + * real0 = check_array(real0) + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2865, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2866 + * real0 = check_array(real0) + * real1 = check_array(real1) + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2866, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2867 + * real1 = check_array(real1) + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DIV_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_real0->data), ((double *)__pyx_v_real1->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2867, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2868 + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_DIV_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2869 + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DIV_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DIV( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_DIV_Lookback()); + /* "talib/_func.pxi":2870 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DIV_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_DIV( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DIV", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2871 + * lookback = begidx + lib.TA_DIV_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DIV( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_DIV", retCode) + * return outreal + */ __pyx_v_retCode = TA_DIV(0, __pyx_v_endidx, (((double *)__pyx_v_real0->data) + __pyx_v_begidx), (((double *)__pyx_v_real1->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2872 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DIV( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DIV", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_DIV, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2873 + * retCode = lib.TA_DIV( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DIV", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2846 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DIV( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ DIV(real0, real1) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21394,6 +31077,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_186DIV(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":2877 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DX(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_189DX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -21519,47 +31209,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_188DX(CYTHON_UNUSED PyObject *__pyx_se __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":2896 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2897 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2898 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2899 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 2899, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":2900 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DX_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 2900, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":2901 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_DX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2902 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DX_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_DX_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":2903 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_DX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_DX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2903, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2904 + * lookback = begidx + lib.TA_DX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_DX", retCode) + * return outreal + */ __pyx_v_retCode = TA_DX(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2905 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_DX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DX", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_DX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2906 + * retCode = lib.TA_DX( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_DX", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2877 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DX(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21576,6 +31350,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_188DX(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":2910 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def EMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ EMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_191EMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -21674,36 +31455,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_190EMA(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("EMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":2929 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2929, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2930 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":2931 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_EMA_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 2931, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":2932 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_EMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2933 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_EMA_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_EMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_EMA_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":2934 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_EMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_EMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_EMA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2935 + * lookback = begidx + lib.TA_EMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_EMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_EMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_EMA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2936 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_EMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_EMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_EMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2936, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2937 + * retCode = lib.TA_EMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_EMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2910 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def EMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ EMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21718,6 +31569,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_190EMA(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":2941 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def EXP( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ EXP(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_193EXP(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -21761,36 +31619,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_192EXP(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("EXP", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":2958 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2958, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2959 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":2960 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_EXP_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 2960, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":2961 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_EXP_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2962 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_EXP_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_EXP( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_EXP_Lookback()); + /* "talib/_func.pxi":2963 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_EXP_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_EXP( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_EXP", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2964 + * lookback = begidx + lib.TA_EXP_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_EXP( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_EXP", retCode) + * return outreal + */ __pyx_v_retCode = TA_EXP(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2965 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_EXP( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_EXP", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_EXP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2966 + * retCode = lib.TA_EXP( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_EXP", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2941 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def EXP( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ EXP(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21805,6 +31733,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_192EXP(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":2970 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def FLOOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ FLOOR(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_195FLOOR(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -21848,36 +31783,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_194FLOOR(CYTHON_UNUSED PyObject *__pyx __Pyx_RefNannySetupContext("FLOOR", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":2987 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":2988 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":2989 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_FLOOR_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 2989, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":2990 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_FLOOR_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":2991 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_FLOOR_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_FLOOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_FLOOR_Lookback()); + /* "talib/_func.pxi":2992 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_FLOOR_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_FLOOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_FLOOR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2993 + * lookback = begidx + lib.TA_FLOOR_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_FLOOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_FLOOR", retCode) + * return outreal + */ __pyx_v_retCode = TA_FLOOR(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":2994 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_FLOOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_FLOOR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_FLOOR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2994, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":2995 + * retCode = lib.TA_FLOOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_FLOOR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2970 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def FLOOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ FLOOR(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21892,6 +31897,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_194FLOOR(CYTHON_UNUSED PyObject *__pyx return __pyx_r; } +/* "talib/_func.pxi":2999 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_DCPERIOD( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPERIOD(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_197HT_DCPERIOD(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -21935,36 +31947,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_196HT_DCPERIOD(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("HT_DCPERIOD", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3016 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3016, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3017 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3018 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_DCPERIOD_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3018, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3019 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_HT_DCPERIOD_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3020 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_DCPERIOD_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_DCPERIOD( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_HT_DCPERIOD_Lookback()); + /* "talib/_func.pxi":3021 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_DCPERIOD_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_DCPERIOD( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_DCPERIOD", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3022 + * lookback = begidx + lib.TA_HT_DCPERIOD_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_DCPERIOD( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_DCPERIOD", retCode) + * return outreal + */ __pyx_v_retCode = TA_HT_DCPERIOD(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3023 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_DCPERIOD( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_DCPERIOD", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_DCPERIOD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3023, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3024 + * retCode = lib.TA_HT_DCPERIOD( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_DCPERIOD", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":2999 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_DCPERIOD( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPERIOD(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -21979,6 +32061,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_196HT_DCPERIOD(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":3028 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_DCPHASE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPHASE(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_199HT_DCPHASE(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -22022,36 +32111,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_198HT_DCPHASE(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("HT_DCPHASE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3045 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3045, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3046 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3047 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_DCPHASE_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3047, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3048 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_HT_DCPHASE_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3049 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_DCPHASE_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_DCPHASE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_HT_DCPHASE_Lookback()); + /* "talib/_func.pxi":3050 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_DCPHASE_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_DCPHASE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_DCPHASE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3050, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3051 + * lookback = begidx + lib.TA_HT_DCPHASE_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_DCPHASE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_DCPHASE", retCode) + * return outreal + */ __pyx_v_retCode = TA_HT_DCPHASE(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3052 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_DCPHASE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_DCPHASE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_DCPHASE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3052, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3053 + * retCode = lib.TA_HT_DCPHASE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_DCPHASE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3028 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_DCPHASE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPHASE(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -22066,6 +32225,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_198HT_DCPHASE(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_func.pxi":3057 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_PHASOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_PHASOR(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_201HT_PHASOR(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -22110,36 +32276,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_200HT_PHASOR(CYTHON_UNUSED PyObject *_ __Pyx_RefNannySetupContext("HT_PHASOR", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3076 + * np.ndarray outinphase + * np.ndarray outquadrature + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3077 + * np.ndarray outquadrature + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3078 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_PHASOR_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3078, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3079 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_HT_PHASOR_Lookback( ) + * outinphase = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3080 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_PHASOR_Lookback( ) # <<<<<<<<<<<<<< + * outinphase = make_double_array(length, lookback) + * outquadrature = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_HT_PHASOR_Lookback()); + /* "talib/_func.pxi":3081 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_PHASOR_Lookback( ) + * outinphase = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outquadrature = make_double_array(length, lookback) + * retCode = lib.TA_HT_PHASOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinphase.data)+lookback , (outquadrature.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3081, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinphase = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3082 + * lookback = begidx + lib.TA_HT_PHASOR_Lookback( ) + * outinphase = make_double_array(length, lookback) + * outquadrature = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_PHASOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinphase.data)+lookback , (outquadrature.data)+lookback ) + * _ta_check_success("TA_HT_PHASOR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3082, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outquadrature = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3083 + * outinphase = make_double_array(length, lookback) + * outquadrature = make_double_array(length, lookback) + * retCode = lib.TA_HT_PHASOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinphase.data)+lookback , (outquadrature.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_PHASOR", retCode) + * return outinphase , outquadrature + */ __pyx_v_retCode = TA_HT_PHASOR(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outinphase->data) + __pyx_v_lookback), (((double *)__pyx_v_outquadrature->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3084 + * outquadrature = make_double_array(length, lookback) + * retCode = lib.TA_HT_PHASOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinphase.data)+lookback , (outquadrature.data)+lookback ) + * _ta_check_success("TA_HT_PHASOR", retCode) # <<<<<<<<<<<<<< + * return outinphase , outquadrature + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_PHASOR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3085 + * retCode = lib.TA_HT_PHASOR( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinphase.data)+lookback , (outquadrature.data)+lookback ) + * _ta_check_success("TA_HT_PHASOR", retCode) + * return outinphase , outquadrature # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -22153,6 +32389,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_200HT_PHASOR(CYTHON_UNUSED PyObject *_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":3057 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_PHASOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_PHASOR(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -22168,6 +32411,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_200HT_PHASOR(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_func.pxi":3089 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_SINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_SINE(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_203HT_SINE(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -22212,36 +32462,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_202HT_SINE(CYTHON_UNUSED PyObject *__p __Pyx_RefNannySetupContext("HT_SINE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3108 + * np.ndarray outsine + * np.ndarray outleadsine + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3109 + * np.ndarray outleadsine + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3110 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_SINE_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3110, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3111 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_HT_SINE_Lookback( ) + * outsine = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3112 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_SINE_Lookback( ) # <<<<<<<<<<<<<< + * outsine = make_double_array(length, lookback) + * outleadsine = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_HT_SINE_Lookback()); + /* "talib/_func.pxi":3113 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_SINE_Lookback( ) + * outsine = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outleadsine = make_double_array(length, lookback) + * retCode = lib.TA_HT_SINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outsine.data)+lookback , (outleadsine.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outsine = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3114 + * lookback = begidx + lib.TA_HT_SINE_Lookback( ) + * outsine = make_double_array(length, lookback) + * outleadsine = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_SINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outsine.data)+lookback , (outleadsine.data)+lookback ) + * _ta_check_success("TA_HT_SINE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outleadsine = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3115 + * outsine = make_double_array(length, lookback) + * outleadsine = make_double_array(length, lookback) + * retCode = lib.TA_HT_SINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outsine.data)+lookback , (outleadsine.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_SINE", retCode) + * return outsine , outleadsine + */ __pyx_v_retCode = TA_HT_SINE(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outsine->data) + __pyx_v_lookback), (((double *)__pyx_v_outleadsine->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3116 + * outleadsine = make_double_array(length, lookback) + * retCode = lib.TA_HT_SINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outsine.data)+lookback , (outleadsine.data)+lookback ) + * _ta_check_success("TA_HT_SINE", retCode) # <<<<<<<<<<<<<< + * return outsine , outleadsine + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_SINE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3117 + * retCode = lib.TA_HT_SINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outsine.data)+lookback , (outleadsine.data)+lookback ) + * _ta_check_success("TA_HT_SINE", retCode) + * return outsine , outleadsine # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -22255,6 +32575,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_202HT_SINE(CYTHON_UNUSED PyObject *__p __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":3089 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_SINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_SINE(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -22270,6 +32597,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_202HT_SINE(CYTHON_UNUSED PyObject *__p return __pyx_r; } +/* "talib/_func.pxi":3121 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_TRENDLINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDLINE(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_205HT_TRENDLINE(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -22313,36 +32647,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_204HT_TRENDLINE(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("HT_TRENDLINE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3138 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3138, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3139 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3140 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_TRENDLINE_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3140, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3141 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_HT_TRENDLINE_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3142 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_TRENDLINE_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_TRENDLINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_HT_TRENDLINE_Lookback()); + /* "talib/_func.pxi":3143 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_TRENDLINE_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_TRENDLINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_TRENDLINE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3144 + * lookback = begidx + lib.TA_HT_TRENDLINE_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_TRENDLINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_TRENDLINE", retCode) + * return outreal + */ __pyx_v_retCode = TA_HT_TRENDLINE(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3145 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_HT_TRENDLINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_TRENDLINE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_TRENDLINE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3146 + * retCode = lib.TA_HT_TRENDLINE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_HT_TRENDLINE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3121 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_TRENDLINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDLINE(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -22357,6 +32761,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_204HT_TRENDLINE(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":3150 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_TRENDMODE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDMODE(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_207HT_TRENDMODE(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -22400,36 +32811,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_206HT_TRENDMODE(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("HT_TRENDMODE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3167 + * int outnbelement + * np.ndarray outinteger + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3168 + * np.ndarray outinteger + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3169 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_TRENDMODE_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3169, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3170 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_HT_TRENDMODE_Lookback( ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3171 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_TRENDMODE_Lookback( ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_HT_TRENDMODE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_HT_TRENDMODE_Lookback()); + /* "talib/_func.pxi":3172 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_HT_TRENDMODE_Lookback( ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_TRENDMODE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_HT_TRENDMODE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3173 + * lookback = begidx + lib.TA_HT_TRENDMODE_Lookback( ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_HT_TRENDMODE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_TRENDMODE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_HT_TRENDMODE(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3174 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_HT_TRENDMODE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_HT_TRENDMODE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_TRENDMODE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3174, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3175 + * retCode = lib.TA_HT_TRENDMODE( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_HT_TRENDMODE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":3150 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_TRENDMODE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDMODE(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -22444,6 +32925,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_206HT_TRENDMODE(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":3179 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def KAMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ KAMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_209KAMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -22542,36 +33030,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_208KAMA(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("KAMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3198 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3198, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3199 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3200 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_KAMA_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3200, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3201 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_KAMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3202 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_KAMA_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_KAMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_KAMA_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3203 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_KAMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_KAMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_KAMA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3204 + * lookback = begidx + lib.TA_KAMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_KAMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_KAMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_KAMA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3205 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_KAMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_KAMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_KAMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3206 + * retCode = lib.TA_KAMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_KAMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3179 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def KAMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ KAMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -22586,6 +33144,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_208KAMA(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":3210 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_211LINEARREG(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -22684,36 +33249,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_210LINEARREG(CYTHON_UNUSED PyObject *_ __Pyx_RefNannySetupContext("LINEARREG", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3229 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3230 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3231 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3231, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3232 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_LINEARREG_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3233 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_LINEARREG_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3234 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_LINEARREG( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3235 + * lookback = begidx + lib.TA_LINEARREG_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LINEARREG", retCode) + * return outreal + */ __pyx_v_retCode = TA_LINEARREG(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3236 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LINEARREG, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3237 + * retCode = lib.TA_LINEARREG( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3210 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -22728,6 +33363,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_210LINEARREG(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_func.pxi":3241 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_ANGLE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_ANGLE(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_213LINEARREG_ANGLE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -22826,36 +33468,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_212LINEARREG_ANGLE(CYTHON_UNUSED PyObj __Pyx_RefNannySetupContext("LINEARREG_ANGLE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3260 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3260, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3261 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3262 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_ANGLE_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3262, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3263 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_LINEARREG_ANGLE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3264 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_ANGLE_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_ANGLE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_LINEARREG_ANGLE_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3265 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_ANGLE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_LINEARREG_ANGLE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_ANGLE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3266 + * lookback = begidx + lib.TA_LINEARREG_ANGLE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_ANGLE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LINEARREG_ANGLE", retCode) + * return outreal + */ __pyx_v_retCode = TA_LINEARREG_ANGLE(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3267 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_ANGLE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_ANGLE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LINEARREG_ANGLE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3267, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3268 + * retCode = lib.TA_LINEARREG_ANGLE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_ANGLE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3241 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_ANGLE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_ANGLE(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -22870,6 +33582,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_212LINEARREG_ANGLE(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":3272 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_INTERCEPT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_INTERCEPT(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_215LINEARREG_INTERCEPT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -22968,36 +33687,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_214LINEARREG_INTERCEPT(CYTHON_UNUSED P __Pyx_RefNannySetupContext("LINEARREG_INTERCEPT", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3291 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3291, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3292 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3293 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_INTERCEPT_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3293, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3294 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_LINEARREG_INTERCEPT_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3295 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_INTERCEPT_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_INTERCEPT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_LINEARREG_INTERCEPT_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3296 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_INTERCEPT_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_LINEARREG_INTERCEPT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_INTERCEPT", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3296, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3297 + * lookback = begidx + lib.TA_LINEARREG_INTERCEPT_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_INTERCEPT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LINEARREG_INTERCEPT", retCode) + * return outreal + */ __pyx_v_retCode = TA_LINEARREG_INTERCEPT(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3298 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_INTERCEPT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_INTERCEPT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LINEARREG_INTERCEPT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3299 + * retCode = lib.TA_LINEARREG_INTERCEPT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_INTERCEPT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3272 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_INTERCEPT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_INTERCEPT(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -23012,6 +33801,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_214LINEARREG_INTERCEPT(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_func.pxi":3303 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_SLOPE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_SLOPE(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_217LINEARREG_SLOPE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -23110,36 +33906,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_216LINEARREG_SLOPE(CYTHON_UNUSED PyObj __Pyx_RefNannySetupContext("LINEARREG_SLOPE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3322 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3323 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3324 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_SLOPE_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3324, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3325 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_LINEARREG_SLOPE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3326 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_SLOPE_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_SLOPE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_LINEARREG_SLOPE_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3327 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LINEARREG_SLOPE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_LINEARREG_SLOPE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_SLOPE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3327, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3328 + * lookback = begidx + lib.TA_LINEARREG_SLOPE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_SLOPE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LINEARREG_SLOPE", retCode) + * return outreal + */ __pyx_v_retCode = TA_LINEARREG_SLOPE(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3329 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LINEARREG_SLOPE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_SLOPE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LINEARREG_SLOPE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3330 + * retCode = lib.TA_LINEARREG_SLOPE( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LINEARREG_SLOPE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3303 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_SLOPE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_SLOPE(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -23154,6 +34020,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_216LINEARREG_SLOPE(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_func.pxi":3334 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_219LN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -23197,36 +34070,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_218LN(CYTHON_UNUSED PyObject *__pyx_se __Pyx_RefNannySetupContext("LN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3351 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3352 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3353 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LN_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3353, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3354 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_LN_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3355 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LN_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_LN_Lookback()); + /* "talib/_func.pxi":3356 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LN_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_LN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3356, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3357 + * lookback = begidx + lib.TA_LN_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LN", retCode) + * return outreal + */ __pyx_v_retCode = TA_LN(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3358 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3359 + * retCode = lib.TA_LN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3334 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -23241,6 +34184,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_218LN(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":3363 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LOG10( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LOG10(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_221LOG10(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -23284,36 +34234,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_220LOG10(CYTHON_UNUSED PyObject *__pyx __Pyx_RefNannySetupContext("LOG10", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3380 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3381 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3382 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LOG10_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3382, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3383 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_LOG10_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3384 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LOG10_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LOG10( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_LOG10_Lookback()); + /* "talib/_func.pxi":3385 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_LOG10_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_LOG10( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LOG10", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3386 + * lookback = begidx + lib.TA_LOG10_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LOG10( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LOG10", retCode) + * return outreal + */ __pyx_v_retCode = TA_LOG10(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3387 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_LOG10( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LOG10", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LOG10, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3388 + * retCode = lib.TA_LOG10( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_LOG10", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3363 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LOG10( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LOG10(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -23328,6 +34348,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_220LOG10(CYTHON_UNUSED PyObject *__pyx return __pyx_r; } +/* "talib/_func.pxi":3392 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MA( np.ndarray real not None , int timeperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MA(real[, timeperiod=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_223MA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -23442,36 +34469,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_222MA(CYTHON_UNUSED PyObject *__pyx_se __Pyx_RefNannySetupContext("MA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3412 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3412, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3413 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3414 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MA_Lookback( timeperiod , matype ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3414, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3415 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MA_Lookback( timeperiod , matype ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3416 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MA_Lookback( timeperiod , matype ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MA( 0 , endidx , (real.data)+begidx , timeperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MA_Lookback(__pyx_v_timeperiod, __pyx_v_matype)); + /* "talib/_func.pxi":3417 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MA_Lookback( timeperiod , matype ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MA( 0 , endidx , (real.data)+begidx , timeperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3418 + * lookback = begidx + lib.TA_MA_Lookback( timeperiod , matype ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MA( 0 , endidx , (real.data)+begidx , timeperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MA", retCode) + * return outreal + */ __pyx_v_retCode = TA_MA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3419 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MA( 0 , endidx , (real.data)+begidx , timeperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3420 + * retCode = lib.TA_MA( 0 , endidx , (real.data)+begidx , timeperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3392 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MA( np.ndarray real not None , int timeperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MA(real[, timeperiod=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -23486,6 +34583,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_222MA(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":3424 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACD( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACD(real[, fastperiod=?, slowperiod=?, signalperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_225MACD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -23618,41 +34722,118 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_224MACD(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("MACD", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3449 + * np.ndarray outmacdsignal + * np.ndarray outmacdhist + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3450 + * np.ndarray outmacdhist + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3451 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACD_Lookback( fastperiod , slowperiod , signalperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3451, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3452 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MACD_Lookback( fastperiod , slowperiod , signalperiod ) + * outmacd = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3453 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACD_Lookback( fastperiod , slowperiod , signalperiod ) # <<<<<<<<<<<<<< + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MACD_Lookback(__pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_signalperiod)); + /* "talib/_func.pxi":3454 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACD_Lookback( fastperiod , slowperiod , signalperiod ) + * outmacd = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3455 + * lookback = begidx + lib.TA_MACD_Lookback( fastperiod , slowperiod , signalperiod ) + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACD( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3455, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacdsignal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3456 + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MACD( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACD", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3456, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacdhist = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3457 + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACD( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MACD", retCode) + * return outmacd , outmacdsignal , outmacdhist + */ __pyx_v_retCode = TA_MACD(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_signalperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outmacd->data) + __pyx_v_lookback), (((double *)__pyx_v_outmacdsignal->data) + __pyx_v_lookback), (((double *)__pyx_v_outmacdhist->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3458 + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACD( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACD", retCode) # <<<<<<<<<<<<<< + * return outmacd , outmacdsignal , outmacdhist + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MACD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3459 + * retCode = lib.TA_MACD( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACD", retCode) + * return outmacd , outmacdsignal , outmacdhist # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -23669,6 +34850,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_224MACD(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":3424 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACD( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACD(real[, fastperiod=?, slowperiod=?, signalperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -23685,6 +34873,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_224MACD(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":3463 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACDEXT( np.ndarray real not None , int fastperiod=-2**31 , int fastmatype=0 , int slowperiod=-2**31 , int slowmatype=0 , int signalperiod=-2**31 , int signalmatype=0 ): # <<<<<<<<<<<<<< + * """ MACDEXT(real[, fastperiod=?, fastmatype=?, slowperiod=?, slowmatype=?, signalperiod=?, signalmatype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_227MACDEXT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -23865,41 +35060,118 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_226MACDEXT(CYTHON_UNUSED PyObject *__p __Pyx_RefNannySetupContext("MACDEXT", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3491 + * np.ndarray outmacdsignal + * np.ndarray outmacdhist + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3492 + * np.ndarray outmacdhist + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3493 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACDEXT_Lookback( fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3493, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3494 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MACDEXT_Lookback( fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype ) + * outmacd = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3495 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACDEXT_Lookback( fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype ) # <<<<<<<<<<<<<< + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MACDEXT_Lookback(__pyx_v_fastperiod, __pyx_v_fastmatype, __pyx_v_slowperiod, __pyx_v_slowmatype, __pyx_v_signalperiod, __pyx_v_signalmatype)); + /* "talib/_func.pxi":3496 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACDEXT_Lookback( fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype ) + * outmacd = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3497 + * lookback = begidx + lib.TA_MACDEXT_Lookback( fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype ) + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACDEXT( 0 , endidx , (real.data)+begidx , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacdsignal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3498 + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MACDEXT( 0 , endidx , (real.data)+begidx , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACDEXT", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacdhist = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3499 + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACDEXT( 0 , endidx , (real.data)+begidx , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MACDEXT", retCode) + * return outmacd , outmacdsignal , outmacdhist + */ __pyx_v_retCode = TA_MACDEXT(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_fastperiod, __pyx_v_fastmatype, __pyx_v_slowperiod, __pyx_v_slowmatype, __pyx_v_signalperiod, __pyx_v_signalmatype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outmacd->data) + __pyx_v_lookback), (((double *)__pyx_v_outmacdsignal->data) + __pyx_v_lookback), (((double *)__pyx_v_outmacdhist->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3500 + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACDEXT( 0 , endidx , (real.data)+begidx , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACDEXT", retCode) # <<<<<<<<<<<<<< + * return outmacd , outmacdsignal , outmacdhist + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MACDEXT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3501 + * retCode = lib.TA_MACDEXT( 0 , endidx , (real.data)+begidx , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACDEXT", retCode) + * return outmacd , outmacdsignal , outmacdhist # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -23916,6 +35188,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_226MACDEXT(CYTHON_UNUSED PyObject *__p __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":3463 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACDEXT( np.ndarray real not None , int fastperiod=-2**31 , int fastmatype=0 , int slowperiod=-2**31 , int slowmatype=0 , int signalperiod=-2**31 , int signalmatype=0 ): # <<<<<<<<<<<<<< + * """ MACDEXT(real[, fastperiod=?, fastmatype=?, slowperiod=?, slowmatype=?, signalperiod=?, signalmatype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -23932,6 +35211,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_226MACDEXT(CYTHON_UNUSED PyObject *__p return __pyx_r; } +/* "talib/_func.pxi":3505 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACDFIX( np.ndarray real not None , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACDFIX(real[, signalperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_229MACDFIX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -24032,41 +35318,118 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_228MACDFIX(CYTHON_UNUSED PyObject *__p __Pyx_RefNannySetupContext("MACDFIX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3528 + * np.ndarray outmacdsignal + * np.ndarray outmacdhist + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3528, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3529 + * np.ndarray outmacdhist + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3530 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACDFIX_Lookback( signalperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3530, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3531 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MACDFIX_Lookback( signalperiod ) + * outmacd = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3532 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACDFIX_Lookback( signalperiod ) # <<<<<<<<<<<<<< + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MACDFIX_Lookback(__pyx_v_signalperiod)); + /* "talib/_func.pxi":3533 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MACDFIX_Lookback( signalperiod ) + * outmacd = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3534 + * lookback = begidx + lib.TA_MACDFIX_Lookback( signalperiod ) + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACDFIX( 0 , endidx , (real.data)+begidx , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3534, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacdsignal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3535 + * outmacd = make_double_array(length, lookback) + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MACDFIX( 0 , endidx , (real.data)+begidx , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACDFIX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3535, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmacdhist = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3536 + * outmacdsignal = make_double_array(length, lookback) + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACDFIX( 0 , endidx , (real.data)+begidx , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MACDFIX", retCode) + * return outmacd , outmacdsignal , outmacdhist + */ __pyx_v_retCode = TA_MACDFIX(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_signalperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outmacd->data) + __pyx_v_lookback), (((double *)__pyx_v_outmacdsignal->data) + __pyx_v_lookback), (((double *)__pyx_v_outmacdhist->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3537 + * outmacdhist = make_double_array(length, lookback) + * retCode = lib.TA_MACDFIX( 0 , endidx , (real.data)+begidx , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACDFIX", retCode) # <<<<<<<<<<<<<< + * return outmacd , outmacdsignal , outmacdhist + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MACDFIX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3538 + * retCode = lib.TA_MACDFIX( 0 , endidx , (real.data)+begidx , signalperiod , &outbegidx , &outnbelement , (outmacd.data)+lookback , (outmacdsignal.data)+lookback , (outmacdhist.data)+lookback ) + * _ta_check_success("TA_MACDFIX", retCode) + * return outmacd , outmacdsignal , outmacdhist # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -24083,6 +35446,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_228MACDFIX(CYTHON_UNUSED PyObject *__p __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":3505 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACDFIX( np.ndarray real not None , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACDFIX(real[, signalperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -24099,6 +35469,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_228MACDFIX(CYTHON_UNUSED PyObject *__p return __pyx_r; } +/* "talib/_func.pxi":3542 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAMA( np.ndarray real not None , double fastlimit=-4e37 , double slowlimit=-4e37 ): # <<<<<<<<<<<<<< + * """ MAMA(real[, fastlimit=?, slowlimit=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_231MAMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -24214,36 +35591,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_230MAMA(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("MAMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3564 + * np.ndarray outmama + * np.ndarray outfama + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3565 + * np.ndarray outfama + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3566 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAMA_Lookback( fastlimit , slowlimit ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3566, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3567 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MAMA_Lookback( fastlimit , slowlimit ) + * outmama = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3568 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAMA_Lookback( fastlimit , slowlimit ) # <<<<<<<<<<<<<< + * outmama = make_double_array(length, lookback) + * outfama = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MAMA_Lookback(__pyx_v_fastlimit, __pyx_v_slowlimit)); + /* "talib/_func.pxi":3569 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAMA_Lookback( fastlimit , slowlimit ) + * outmama = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outfama = make_double_array(length, lookback) + * retCode = lib.TA_MAMA( 0 , endidx , (real.data)+begidx , fastlimit , slowlimit , &outbegidx , &outnbelement , (outmama.data)+lookback , (outfama.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmama = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3570 + * lookback = begidx + lib.TA_MAMA_Lookback( fastlimit , slowlimit ) + * outmama = make_double_array(length, lookback) + * outfama = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MAMA( 0 , endidx , (real.data)+begidx , fastlimit , slowlimit , &outbegidx , &outnbelement , (outmama.data)+lookback , (outfama.data)+lookback ) + * _ta_check_success("TA_MAMA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outfama = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3571 + * outmama = make_double_array(length, lookback) + * outfama = make_double_array(length, lookback) + * retCode = lib.TA_MAMA( 0 , endidx , (real.data)+begidx , fastlimit , slowlimit , &outbegidx , &outnbelement , (outmama.data)+lookback , (outfama.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MAMA", retCode) + * return outmama , outfama + */ __pyx_v_retCode = TA_MAMA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_fastlimit, __pyx_v_slowlimit, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outmama->data) + __pyx_v_lookback), (((double *)__pyx_v_outfama->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3572 + * outfama = make_double_array(length, lookback) + * retCode = lib.TA_MAMA( 0 , endidx , (real.data)+begidx , fastlimit , slowlimit , &outbegidx , &outnbelement , (outmama.data)+lookback , (outfama.data)+lookback ) + * _ta_check_success("TA_MAMA", retCode) # <<<<<<<<<<<<<< + * return outmama , outfama + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MAMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3573 + * retCode = lib.TA_MAMA( 0 , endidx , (real.data)+begidx , fastlimit , slowlimit , &outbegidx , &outnbelement , (outmama.data)+lookback , (outfama.data)+lookback ) + * _ta_check_success("TA_MAMA", retCode) + * return outmama , outfama # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -24257,6 +35704,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_230MAMA(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":3542 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAMA( np.ndarray real not None , double fastlimit=-4e37 , double slowlimit=-4e37 ): # <<<<<<<<<<<<<< + * """ MAMA(real[, fastlimit=?, slowlimit=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -24272,6 +35726,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_230MAMA(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":3577 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAVP( np.ndarray real not None , np.ndarray periods not None , int minperiod=-2**31 , int maxperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MAVP(real, periods[, minperiod=?, maxperiod=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_233MAVP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -24416,42 +35877,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_232MAVP(CYTHON_UNUSED PyObject *__pyx_ __Pyx_INCREF((PyObject *)__pyx_v_real); __Pyx_INCREF((PyObject *)__pyx_v_periods); + /* "talib/_func.pxi":3599 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * periods = check_array(periods) + * length = check_length2(real, periods) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3600 + * np.ndarray outreal + * real = check_array(real) + * periods = check_array(periods) # <<<<<<<<<<<<<< + * length = check_length2(real, periods) + * begidx = check_begidx2(length, (real.data), (periods.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_periods)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_periods, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3601 + * real = check_array(real) + * periods = check_array(periods) + * length = check_length2(real, periods) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (real.data), (periods.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real, __pyx_v_periods); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 3601, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":3602 + * periods = check_array(periods) + * length = check_length2(real, periods) + * begidx = check_begidx2(length, (real.data), (periods.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAVP_Lookback( minperiod , maxperiod , matype ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_real->data), ((double *)__pyx_v_periods->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 3602, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":3603 + * length = check_length2(real, periods) + * begidx = check_begidx2(length, (real.data), (periods.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MAVP_Lookback( minperiod , maxperiod , matype ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3604 + * begidx = check_begidx2(length, (real.data), (periods.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAVP_Lookback( minperiod , maxperiod , matype ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MAVP( 0 , endidx , (real.data)+begidx , (periods.data)+begidx , minperiod , maxperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MAVP_Lookback(__pyx_v_minperiod, __pyx_v_maxperiod, __pyx_v_matype)); + /* "talib/_func.pxi":3605 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAVP_Lookback( minperiod , maxperiod , matype ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MAVP( 0 , endidx , (real.data)+begidx , (periods.data)+begidx , minperiod , maxperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MAVP", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3606 + * lookback = begidx + lib.TA_MAVP_Lookback( minperiod , maxperiod , matype ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MAVP( 0 , endidx , (real.data)+begidx , (periods.data)+begidx , minperiod , maxperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MAVP", retCode) + * return outreal + */ __pyx_v_retCode = TA_MAVP(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (((double *)__pyx_v_periods->data) + __pyx_v_begidx), __pyx_v_minperiod, __pyx_v_maxperiod, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3607 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MAVP( 0 , endidx , (real.data)+begidx , (periods.data)+begidx , minperiod , maxperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MAVP", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MAVP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3608 + * retCode = lib.TA_MAVP( 0 , endidx , (real.data)+begidx , (periods.data)+begidx , minperiod , maxperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MAVP", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3577 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAVP( np.ndarray real not None , np.ndarray periods not None , int minperiod=-2**31 , int maxperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MAVP(real, periods[, minperiod=?, maxperiod=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -24467,6 +36005,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_232MAVP(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":3612 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_235MAX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -24565,36 +36110,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_234MAX(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("MAX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3631 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3632 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3633 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAX_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3633, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3634 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MAX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3635 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAX_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MAX_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3636 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MAX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3637 + * lookback = begidx + lib.TA_MAX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MAX", retCode) + * return outreal + */ __pyx_v_retCode = TA_MAX(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3638 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MAX", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MAX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3638, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3639 + * retCode = lib.TA_MAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MAX", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3612 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -24609,6 +36224,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_234MAX(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":3643 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAXINDEX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_237MAXINDEX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -24711,45 +36333,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_236MAXINDEX(CYTHON_UNUSED PyObject *__ __Pyx_RefNannySetupContext("MAXINDEX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3662 + * int outnbelement + * np.ndarray outinteger + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3663 + * np.ndarray outinteger + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3664 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAXINDEX_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3664, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3665 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MAXINDEX_Lookback( timeperiod ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3666 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAXINDEX_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_MAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MAXINDEX_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3667 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MAXINDEX_Lookback( timeperiod ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_MAXINDEX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3668 + * lookback = begidx + lib.TA_MAXINDEX_Lookback( timeperiod ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_MAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MAXINDEX", retCode) + * outinteger_data = outinteger.data + */ __pyx_v_retCode = TA_MAXINDEX(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3669 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_MAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_MAXINDEX", retCode) # <<<<<<<<<<<<<< + * outinteger_data = outinteger.data + * for i from lookback <= i < length: + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MAXINDEX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3670 + * retCode = lib.TA_MAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_MAXINDEX", retCode) + * outinteger_data = outinteger.data # <<<<<<<<<<<<<< + * for i from lookback <= i < length: + * outinteger_data[i] += begidx + */ __pyx_v_outinteger_data = ((int *)__pyx_v_outinteger->data); + /* "talib/_func.pxi":3671 + * _ta_check_success("TA_MAXINDEX", retCode) + * outinteger_data = outinteger.data + * for i from lookback <= i < length: # <<<<<<<<<<<<<< + * outinteger_data[i] += begidx + * return outinteger + */ __pyx_t_3 = __pyx_v_length; for (__pyx_v_i = __pyx_v_lookback; __pyx_v_i < __pyx_t_3; __pyx_v_i++) { + /* "talib/_func.pxi":3672 + * outinteger_data = outinteger.data + * for i from lookback <= i < length: + * outinteger_data[i] += begidx # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_4 = __pyx_v_i; (__pyx_v_outinteger_data[__pyx_t_4]) = ((__pyx_v_outinteger_data[__pyx_t_4]) + __pyx_v_begidx); } + /* "talib/_func.pxi":3673 + * for i from lookback <= i < length: + * outinteger_data[i] += begidx + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":3643 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAXINDEX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -24764,6 +36477,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_236MAXINDEX(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":3677 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MEDPRICE( np.ndarray high not None , np.ndarray low not None ): # <<<<<<<<<<<<<< + * """ MEDPRICE(high, low) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_239MEDPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -24858,42 +36578,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_238MEDPRICE(CYTHON_UNUSED PyObject *__ __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_func.pxi":3694 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3695 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3696 + * high = check_array(high) + * low = check_array(low) + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 3696, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":3697 + * low = check_array(low) + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MEDPRICE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 3697, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":3698 + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MEDPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3699 + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MEDPRICE_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MEDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MEDPRICE_Lookback()); + /* "talib/_func.pxi":3700 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MEDPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MEDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MEDPRICE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3701 + * lookback = begidx + lib.TA_MEDPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MEDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MEDPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_MEDPRICE(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3702 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MEDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MEDPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MEDPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3702, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3703 + * retCode = lib.TA_MEDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MEDPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3677 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MEDPRICE( np.ndarray high not None , np.ndarray low not None ): # <<<<<<<<<<<<<< + * """ MEDPRICE(high, low) + * + */ /* function exit code */ __pyx_L1_error:; @@ -24909,6 +36706,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_238MEDPRICE(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":3707 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MFI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MFI(high, low, close, volume[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_241MFI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -25047,52 +36851,143 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_240MFI(CYTHON_UNUSED PyObject *__pyx_s __Pyx_INCREF((PyObject *)__pyx_v_close); __Pyx_INCREF((PyObject *)__pyx_v_volume); + /* "talib/_func.pxi":3726 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3727 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * volume = check_array(volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3727, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3728 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3728, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3729 + * low = check_array(low) + * close = check_array(close) + * volume = check_array(volume) # <<<<<<<<<<<<<< + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_volume)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_volume, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3730 + * close = check_array(close) + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) # <<<<<<<<<<<<<< + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_high, __pyx_v_low, __pyx_v_close, __pyx_v_volume); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 3730, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":3731 + * volume = check_array(volume) + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MFI_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx4(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data), ((double *)__pyx_v_volume->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 3731, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":3732 + * length = check_length4(high, low, close, volume) + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MFI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3733 + * begidx = check_begidx4(length, (high.data), (low.data), (close.data), (volume.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MFI_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MFI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MFI_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3734 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MFI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MFI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MFI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3735 + * lookback = begidx + lib.TA_MFI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MFI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MFI", retCode) + * return outreal + */ __pyx_v_retCode = TA_MFI(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (((double *)__pyx_v_volume->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3736 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MFI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MFI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MFI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3737 + * retCode = lib.TA_MFI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , (volume.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MFI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3707 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MFI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MFI(high, low, close, volume[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -25110,6 +37005,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_240MFI(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":3741 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIDPOINT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPOINT(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_243MIDPOINT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -25208,36 +37110,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_242MIDPOINT(CYTHON_UNUSED PyObject *__ __Pyx_RefNannySetupContext("MIDPOINT", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3760 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3760, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3761 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3762 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIDPOINT_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3762, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3763 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MIDPOINT_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3764 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIDPOINT_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIDPOINT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MIDPOINT_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3765 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIDPOINT_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MIDPOINT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIDPOINT", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3765, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3766 + * lookback = begidx + lib.TA_MIDPOINT_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIDPOINT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MIDPOINT", retCode) + * return outreal + */ __pyx_v_retCode = TA_MIDPOINT(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3767 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIDPOINT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIDPOINT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MIDPOINT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3767, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3768 + * retCode = lib.TA_MIDPOINT( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIDPOINT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3741 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIDPOINT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPOINT(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -25252,6 +37224,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_242MIDPOINT(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":3772 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIDPRICE( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPRICE(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_245MIDPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -25364,42 +37343,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_244MIDPRICE(CYTHON_UNUSED PyObject *__ __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_func.pxi":3791 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3792 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3792, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3793 + * high = check_array(high) + * low = check_array(low) + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 3793, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":3794 + * low = check_array(low) + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIDPRICE_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 3794, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":3795 + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MIDPRICE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3796 + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIDPRICE_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MIDPRICE_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3797 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIDPRICE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MIDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIDPRICE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3797, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3798 + * lookback = begidx + lib.TA_MIDPRICE_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MIDPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_MIDPRICE(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3799 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIDPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MIDPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3800 + * retCode = lib.TA_MIDPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIDPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3772 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIDPRICE( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPRICE(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -25415,6 +37471,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_244MIDPRICE(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":3804 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIN( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIN(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_247MIN(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -25513,36 +37576,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_246MIN(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("MIN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3823 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3823, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3824 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3825 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIN_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3825, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3826 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MIN_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3827 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIN_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIN( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MIN_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3828 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MIN_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MIN( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3829 + * lookback = begidx + lib.TA_MIN_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIN( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MIN", retCode) + * return outreal + */ __pyx_v_retCode = TA_MIN(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3830 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MIN( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MIN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3830, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3831 + * retCode = lib.TA_MIN( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MIN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3804 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIN( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIN(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -25557,6 +37690,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_246MIN(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":3835 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MININDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MININDEX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_249MININDEX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -25659,45 +37799,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_248MININDEX(CYTHON_UNUSED PyObject *__ __Pyx_RefNannySetupContext("MININDEX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3854 + * int outnbelement + * np.ndarray outinteger + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3854, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3855 + * np.ndarray outinteger + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3856 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MININDEX_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3856, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3857 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MININDEX_Lookback( timeperiod ) + * outinteger = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3858 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MININDEX_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_MININDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MININDEX_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3859 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MININDEX_Lookback( timeperiod ) + * outinteger = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MININDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_MININDEX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outinteger = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3860 + * lookback = begidx + lib.TA_MININDEX_Lookback( timeperiod ) + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_MININDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MININDEX", retCode) + * outinteger_data = outinteger.data + */ __pyx_v_retCode = TA_MININDEX(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outinteger->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3861 + * outinteger = make_int_array(length, lookback) + * retCode = lib.TA_MININDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_MININDEX", retCode) # <<<<<<<<<<<<<< + * outinteger_data = outinteger.data + * for i from lookback <= i < length: + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MININDEX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3862 + * retCode = lib.TA_MININDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outinteger.data)+lookback ) + * _ta_check_success("TA_MININDEX", retCode) + * outinteger_data = outinteger.data # <<<<<<<<<<<<<< + * for i from lookback <= i < length: + * outinteger_data[i] += begidx + */ __pyx_v_outinteger_data = ((int *)__pyx_v_outinteger->data); + /* "talib/_func.pxi":3863 + * _ta_check_success("TA_MININDEX", retCode) + * outinteger_data = outinteger.data + * for i from lookback <= i < length: # <<<<<<<<<<<<<< + * outinteger_data[i] += begidx + * return outinteger + */ __pyx_t_3 = __pyx_v_length; for (__pyx_v_i = __pyx_v_lookback; __pyx_v_i < __pyx_t_3; __pyx_v_i++) { + /* "talib/_func.pxi":3864 + * outinteger_data = outinteger.data + * for i from lookback <= i < length: + * outinteger_data[i] += begidx # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_4 = __pyx_v_i; (__pyx_v_outinteger_data[__pyx_t_4]) = ((__pyx_v_outinteger_data[__pyx_t_4]) + __pyx_v_begidx); } + /* "talib/_func.pxi":3865 + * for i from lookback <= i < length: + * outinteger_data[i] += begidx + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outinteger)); __pyx_r = ((PyObject *)__pyx_v_outinteger); goto __pyx_L0; + /* "talib/_func.pxi":3835 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MININDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MININDEX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -25712,6 +37943,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_248MININDEX(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":3869 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINMAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_251MINMAX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -25811,36 +38049,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_250MINMAX(CYTHON_UNUSED PyObject *__py __Pyx_RefNannySetupContext("MINMAX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3890 + * np.ndarray outmin + * np.ndarray outmax + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3891 + * np.ndarray outmax + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3892 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINMAX_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3892, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3893 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MINMAX_Lookback( timeperiod ) + * outmin = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3894 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINMAX_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outmin = make_double_array(length, lookback) + * outmax = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MINMAX_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3895 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINMAX_Lookback( timeperiod ) + * outmin = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outmax = make_double_array(length, lookback) + * retCode = lib.TA_MINMAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outmin.data)+lookback , (outmax.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmin = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3896 + * lookback = begidx + lib.TA_MINMAX_Lookback( timeperiod ) + * outmin = make_double_array(length, lookback) + * outmax = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MINMAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outmin.data)+lookback , (outmax.data)+lookback ) + * _ta_check_success("TA_MINMAX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmax = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3897 + * outmin = make_double_array(length, lookback) + * outmax = make_double_array(length, lookback) + * retCode = lib.TA_MINMAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outmin.data)+lookback , (outmax.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MINMAX", retCode) + * return outmin , outmax + */ __pyx_v_retCode = TA_MINMAX(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outmin->data) + __pyx_v_lookback), (((double *)__pyx_v_outmax->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3898 + * outmax = make_double_array(length, lookback) + * retCode = lib.TA_MINMAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outmin.data)+lookback , (outmax.data)+lookback ) + * _ta_check_success("TA_MINMAX", retCode) # <<<<<<<<<<<<<< + * return outmin , outmax + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MINMAX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3899 + * retCode = lib.TA_MINMAX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outmin.data)+lookback , (outmax.data)+lookback ) + * _ta_check_success("TA_MINMAX", retCode) + * return outmin , outmax # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -25854,6 +38162,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_250MINMAX(CYTHON_UNUSED PyObject *__py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":3869 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINMAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -25869,6 +38184,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_250MINMAX(CYTHON_UNUSED PyObject *__py return __pyx_r; } +/* "talib/_func.pxi":3903 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINMAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAXINDEX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_253MINMAXINDEX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -25973,54 +38295,166 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_252MINMAXINDEX(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("MINMAXINDEX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":3924 + * np.ndarray outminidx + * np.ndarray outmaxidx + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3925 + * np.ndarray outmaxidx + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":3926 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINMAXINDEX_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 3926, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":3927 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MINMAXINDEX_Lookback( timeperiod ) + * outminidx = make_int_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3928 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINMAXINDEX_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outminidx = make_int_array(length, lookback) + * outmaxidx = make_int_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MINMAXINDEX_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3929 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINMAXINDEX_Lookback( timeperiod ) + * outminidx = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * outmaxidx = make_int_array(length, lookback) + * retCode = lib.TA_MINMAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outminidx.data)+lookback , (outmaxidx.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3929, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outminidx = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3930 + * lookback = begidx + lib.TA_MINMAXINDEX_Lookback( timeperiod ) + * outminidx = make_int_array(length, lookback) + * outmaxidx = make_int_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MINMAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outminidx.data)+lookback , (outmaxidx.data)+lookback ) + * _ta_check_success("TA_MINMAXINDEX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_int_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3930, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outmaxidx = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3931 + * outminidx = make_int_array(length, lookback) + * outmaxidx = make_int_array(length, lookback) + * retCode = lib.TA_MINMAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outminidx.data)+lookback , (outmaxidx.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MINMAXINDEX", retCode) + * outminidx_data = outminidx.data + */ __pyx_v_retCode = TA_MINMAXINDEX(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((int *)__pyx_v_outminidx->data) + __pyx_v_lookback), (((int *)__pyx_v_outmaxidx->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3932 + * outmaxidx = make_int_array(length, lookback) + * retCode = lib.TA_MINMAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outminidx.data)+lookback , (outmaxidx.data)+lookback ) + * _ta_check_success("TA_MINMAXINDEX", retCode) # <<<<<<<<<<<<<< + * outminidx_data = outminidx.data + * for i from lookback <= i < length: + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MINMAXINDEX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3933 + * retCode = lib.TA_MINMAXINDEX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outminidx.data)+lookback , (outmaxidx.data)+lookback ) + * _ta_check_success("TA_MINMAXINDEX", retCode) + * outminidx_data = outminidx.data # <<<<<<<<<<<<<< + * for i from lookback <= i < length: + * outminidx_data[i] += begidx + */ __pyx_v_outminidx_data = ((int *)__pyx_v_outminidx->data); + /* "talib/_func.pxi":3934 + * _ta_check_success("TA_MINMAXINDEX", retCode) + * outminidx_data = outminidx.data + * for i from lookback <= i < length: # <<<<<<<<<<<<<< + * outminidx_data[i] += begidx + * outmaxidx_data = outmaxidx.data + */ __pyx_t_3 = __pyx_v_length; for (__pyx_v_i = __pyx_v_lookback; __pyx_v_i < __pyx_t_3; __pyx_v_i++) { + /* "talib/_func.pxi":3935 + * outminidx_data = outminidx.data + * for i from lookback <= i < length: + * outminidx_data[i] += begidx # <<<<<<<<<<<<<< + * outmaxidx_data = outmaxidx.data + * for i from lookback <= i < length: + */ __pyx_t_4 = __pyx_v_i; (__pyx_v_outminidx_data[__pyx_t_4]) = ((__pyx_v_outminidx_data[__pyx_t_4]) + __pyx_v_begidx); } + /* "talib/_func.pxi":3936 + * for i from lookback <= i < length: + * outminidx_data[i] += begidx + * outmaxidx_data = outmaxidx.data # <<<<<<<<<<<<<< + * for i from lookback <= i < length: + * outmaxidx_data[i] += begidx + */ __pyx_v_outmaxidx_data = ((int *)__pyx_v_outmaxidx->data); + /* "talib/_func.pxi":3937 + * outminidx_data[i] += begidx + * outmaxidx_data = outmaxidx.data + * for i from lookback <= i < length: # <<<<<<<<<<<<<< + * outmaxidx_data[i] += begidx + * return outminidx , outmaxidx + */ __pyx_t_3 = __pyx_v_length; for (__pyx_v_i = __pyx_v_lookback; __pyx_v_i < __pyx_t_3; __pyx_v_i++) { + /* "talib/_func.pxi":3938 + * outmaxidx_data = outmaxidx.data + * for i from lookback <= i < length: + * outmaxidx_data[i] += begidx # <<<<<<<<<<<<<< + * return outminidx , outmaxidx + * + */ __pyx_t_4 = __pyx_v_i; (__pyx_v_outmaxidx_data[__pyx_t_4]) = ((__pyx_v_outmaxidx_data[__pyx_t_4]) + __pyx_v_begidx); } + /* "talib/_func.pxi":3939 + * for i from lookback <= i < length: + * outmaxidx_data[i] += begidx + * return outminidx , outmaxidx # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -26034,6 +38468,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_252MINMAXINDEX(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":3903 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINMAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAXINDEX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -26049,6 +38490,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_252MINMAXINDEX(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_func.pxi":3943 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DI(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_255MINUS_DI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -26174,47 +38622,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_254MINUS_DI(CYTHON_UNUSED PyObject *__ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":3962 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3963 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3964 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3965 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 3965, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":3966 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINUS_DI_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 3966, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":3967 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MINUS_DI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":3968 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINUS_DI_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MINUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MINUS_DI_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":3969 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINUS_DI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MINUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MINUS_DI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3970 + * lookback = begidx + lib.TA_MINUS_DI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MINUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MINUS_DI", retCode) + * return outreal + */ __pyx_v_retCode = TA_MINUS_DI(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":3971 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MINUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MINUS_DI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MINUS_DI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3971, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":3972 + * retCode = lib.TA_MINUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MINUS_DI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3943 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DI(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -26231,6 +38763,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_254MINUS_DI(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":3976 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DM(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_257MINUS_DM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -26343,42 +38882,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_256MINUS_DM(CYTHON_UNUSED PyObject *__ __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_func.pxi":3995 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3996 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":3997 + * high = check_array(high) + * low = check_array(low) + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 3997, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":3998 + * low = check_array(low) + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINUS_DM_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 3998, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":3999 + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MINUS_DM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4000 + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINUS_DM_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MINUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MINUS_DM_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4001 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MINUS_DM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MINUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MINUS_DM", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4001, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4002 + * lookback = begidx + lib.TA_MINUS_DM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MINUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MINUS_DM", retCode) + * return outreal + */ __pyx_v_retCode = TA_MINUS_DM(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4003 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MINUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MINUS_DM", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MINUS_DM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4003, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4004 + * retCode = lib.TA_MINUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MINUS_DM", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":3976 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DM(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -26394,6 +39010,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_256MINUS_DM(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":4008 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MOM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MOM(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_259MOM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -26492,36 +39115,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_258MOM(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("MOM", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4027 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4027, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4028 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4029 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MOM_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4029, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4030 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MOM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4031 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MOM_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MOM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MOM_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4032 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MOM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MOM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MOM", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4032, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4033 + * lookback = begidx + lib.TA_MOM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MOM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MOM", retCode) + * return outreal + */ __pyx_v_retCode = TA_MOM(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4034 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MOM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MOM", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MOM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4034, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4035 + * retCode = lib.TA_MOM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MOM", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4008 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MOM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MOM(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -26536,6 +39229,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_258MOM(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4039 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MULT( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ MULT(real0, real1) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_261MULT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -26630,42 +39330,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_260MULT(CYTHON_UNUSED PyObject *__pyx_ __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_func.pxi":4057 + * int outnbelement + * np.ndarray outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4057, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4058 + * np.ndarray outreal + * real0 = check_array(real0) + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4058, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4059 + * real0 = check_array(real0) + * real1 = check_array(real1) + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4059, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4060 + * real1 = check_array(real1) + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MULT_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_real0->data), ((double *)__pyx_v_real1->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4060, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4061 + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_MULT_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4062 + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MULT_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MULT( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_MULT_Lookback()); + /* "talib/_func.pxi":4063 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_MULT_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_MULT( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MULT", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4063, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4064 + * lookback = begidx + lib.TA_MULT_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MULT( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MULT", retCode) + * return outreal + */ __pyx_v_retCode = TA_MULT(0, __pyx_v_endidx, (((double *)__pyx_v_real0->data) + __pyx_v_begidx), (((double *)__pyx_v_real1->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4065 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_MULT( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MULT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MULT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4066 + * retCode = lib.TA_MULT( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_MULT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4039 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MULT( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ MULT(real0, real1) + * + */ /* function exit code */ __pyx_L1_error:; @@ -26681,6 +39458,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_260MULT(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":4070 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def NATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ NATR(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_263NATR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -26806,47 +39590,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_262NATR(CYTHON_UNUSED PyObject *__pyx_ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":4089 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4089, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4090 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4090, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4091 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4091, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4092 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4092, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4093 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_NATR_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4093, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4094 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_NATR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4095 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_NATR_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_NATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_NATR_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4096 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_NATR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_NATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_NATR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4096, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4097 + * lookback = begidx + lib.TA_NATR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_NATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_NATR", retCode) + * return outreal + */ __pyx_v_retCode = TA_NATR(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4098 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_NATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_NATR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_NATR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4098, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4099 + * retCode = lib.TA_NATR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_NATR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4070 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def NATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ NATR(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -26863,6 +39731,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_262NATR(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":4103 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def OBV( np.ndarray real not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ OBV(real, volume) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_265OBV(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -26957,42 +39832,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_264OBV(CYTHON_UNUSED PyObject *__pyx_s __Pyx_INCREF((PyObject *)__pyx_v_real); __Pyx_INCREF((PyObject *)__pyx_v_volume); + /* "talib/_func.pxi":4121 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * volume = check_array(volume) + * length = check_length2(real, volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4121, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4122 + * np.ndarray outreal + * real = check_array(real) + * volume = check_array(volume) # <<<<<<<<<<<<<< + * length = check_length2(real, volume) + * begidx = check_begidx2(length, (real.data), (volume.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_volume)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_volume, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4123 + * real = check_array(real) + * volume = check_array(volume) + * length = check_length2(real, volume) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (real.data), (volume.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real, __pyx_v_volume); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4123, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4124 + * volume = check_array(volume) + * length = check_length2(real, volume) + * begidx = check_begidx2(length, (real.data), (volume.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_OBV_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_real->data), ((double *)__pyx_v_volume->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4124, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4125 + * length = check_length2(real, volume) + * begidx = check_begidx2(length, (real.data), (volume.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_OBV_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4126 + * begidx = check_begidx2(length, (real.data), (volume.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_OBV_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_OBV( 0 , endidx , (real.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_OBV_Lookback()); + /* "talib/_func.pxi":4127 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_OBV_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_OBV( 0 , endidx , (real.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_OBV", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4128 + * lookback = begidx + lib.TA_OBV_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_OBV( 0 , endidx , (real.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_OBV", retCode) + * return outreal + */ __pyx_v_retCode = TA_OBV(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (((double *)__pyx_v_volume->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4129 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_OBV( 0 , endidx , (real.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_OBV", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_OBV, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4130 + * retCode = lib.TA_OBV( 0 , endidx , (real.data)+begidx , (volume.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_OBV", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4103 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def OBV( np.ndarray real not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ OBV(real, volume) + * + */ /* function exit code */ __pyx_L1_error:; @@ -27008,6 +39960,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_264OBV(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4134 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PLUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DI(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_267PLUS_DI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -27133,47 +40092,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_266PLUS_DI(CYTHON_UNUSED PyObject *__p __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":4153 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4154 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4155 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4155, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4156 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4156, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4157 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PLUS_DI_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4157, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4158 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_PLUS_DI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4159 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PLUS_DI_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PLUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_PLUS_DI_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4160 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PLUS_DI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_PLUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PLUS_DI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4161 + * lookback = begidx + lib.TA_PLUS_DI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PLUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_PLUS_DI", retCode) + * return outreal + */ __pyx_v_retCode = TA_PLUS_DI(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4162 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PLUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PLUS_DI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_PLUS_DI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4162, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4163 + * retCode = lib.TA_PLUS_DI( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PLUS_DI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4134 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PLUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DI(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -27190,6 +40233,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_266PLUS_DI(CYTHON_UNUSED PyObject *__p return __pyx_r; } +/* "talib/_func.pxi":4167 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PLUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DM(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_269PLUS_DM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -27302,42 +40352,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_268PLUS_DM(CYTHON_UNUSED PyObject *__p __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_func.pxi":4186 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4187 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4188 + * high = check_array(high) + * low = check_array(low) + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4188, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4189 + * low = check_array(low) + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PLUS_DM_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4189, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4190 + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_PLUS_DM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4191 + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PLUS_DM_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PLUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_PLUS_DM_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4192 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PLUS_DM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_PLUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PLUS_DM", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4192, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4193 + * lookback = begidx + lib.TA_PLUS_DM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PLUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_PLUS_DM", retCode) + * return outreal + */ __pyx_v_retCode = TA_PLUS_DM(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4194 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PLUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PLUS_DM", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_PLUS_DM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4194, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4195 + * retCode = lib.TA_PLUS_DM( 0 , endidx , (high.data)+begidx , (low.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PLUS_DM", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4167 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PLUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DM(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -27353,6 +40480,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_268PLUS_DM(CYTHON_UNUSED PyObject *__p return __pyx_r; } +/* "talib/_func.pxi":4199 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PPO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ PPO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_271PPO(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -27483,36 +40617,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_270PPO(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("PPO", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4220 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4220, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4221 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4222 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PPO_Lookback( fastperiod , slowperiod , matype ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4222, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4223 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_PPO_Lookback( fastperiod , slowperiod , matype ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4224 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PPO_Lookback( fastperiod , slowperiod , matype ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PPO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_PPO_Lookback(__pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_matype)); + /* "talib/_func.pxi":4225 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_PPO_Lookback( fastperiod , slowperiod , matype ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_PPO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PPO", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4226 + * lookback = begidx + lib.TA_PPO_Lookback( fastperiod , slowperiod , matype ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PPO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_PPO", retCode) + * return outreal + */ __pyx_v_retCode = TA_PPO(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4227 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_PPO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PPO", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_PPO, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4227, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4228 + * retCode = lib.TA_PPO( 0 , endidx , (real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_PPO", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4199 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PPO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ PPO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -27527,6 +40731,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_270PPO(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4232 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROC( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROC(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_273ROC(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -27625,36 +40836,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_272ROC(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("ROC", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4251 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4252 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4253 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROC_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4253, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4254 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ROC_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4255 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROC_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROC( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ROC_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4256 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROC_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ROC( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROC", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4257 + * lookback = begidx + lib.TA_ROC_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROC( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ROC", retCode) + * return outreal + */ __pyx_v_retCode = TA_ROC(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4258 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROC( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROC", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ROC, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4259 + * retCode = lib.TA_ROC( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROC", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4232 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROC( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROC(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -27669,6 +40950,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_272ROC(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4263 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCP( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCP(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_275ROCP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -27767,36 +41055,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_274ROCP(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("ROCP", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4282 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4283 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4284 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCP_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4284, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4285 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ROCP_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4286 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCP_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCP( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ROCP_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4287 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCP_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ROCP( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCP", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4287, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4288 + * lookback = begidx + lib.TA_ROCP_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCP( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ROCP", retCode) + * return outreal + */ __pyx_v_retCode = TA_ROCP(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4289 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCP( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCP", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ROCP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4289, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4290 + * retCode = lib.TA_ROCP( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCP", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4263 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCP( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCP(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -27811,6 +41169,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_274ROCP(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":4294 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCR( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_277ROCR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -27909,36 +41274,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_276ROCR(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("ROCR", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4313 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4314 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4315 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCR_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4315, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4316 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ROCR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4317 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCR_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCR( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ROCR_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4318 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ROCR( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4318, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4319 + * lookback = begidx + lib.TA_ROCR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCR( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ROCR", retCode) + * return outreal + */ __pyx_v_retCode = TA_ROCR(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4320 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCR( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ROCR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4321 + * retCode = lib.TA_ROCR( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4294 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCR( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -27953,6 +41388,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_276ROCR(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":4325 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCR100( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR100(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_279ROCR100(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -28051,36 +41493,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_278ROCR100(CYTHON_UNUSED PyObject *__p __Pyx_RefNannySetupContext("ROCR100", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4344 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4344, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4345 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4346 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCR100_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4346, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4347 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ROCR100_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4348 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCR100_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCR100( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ROCR100_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4349 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ROCR100_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ROCR100( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCR100", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4350 + * lookback = begidx + lib.TA_ROCR100_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCR100( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ROCR100", retCode) + * return outreal + */ __pyx_v_retCode = TA_ROCR100(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4351 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ROCR100( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCR100", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ROCR100, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4352 + * retCode = lib.TA_ROCR100( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ROCR100", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4325 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCR100( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR100(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -28095,6 +41607,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_278ROCR100(CYTHON_UNUSED PyObject *__p return __pyx_r; } +/* "talib/_func.pxi":4356 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def RSI( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ RSI(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_281RSI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -28193,36 +41712,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_280RSI(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("RSI", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4375 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4376 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4377 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_RSI_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4377, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4378 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_RSI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4379 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_RSI_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_RSI( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_RSI_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4380 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_RSI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_RSI( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_RSI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4381 + * lookback = begidx + lib.TA_RSI_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_RSI( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_RSI", retCode) + * return outreal + */ __pyx_v_retCode = TA_RSI(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4382 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_RSI( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_RSI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_RSI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4383 + * retCode = lib.TA_RSI( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_RSI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4356 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def RSI( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ RSI(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -28237,6 +41826,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_280RSI(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4387 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SAR( np.ndarray high not None , np.ndarray low not None , double acceleration=0.02 , double maximum=0.2 ): # <<<<<<<<<<<<<< + * """ SAR(high, low[, acceleration=?, maximum=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_283SAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -28365,42 +41961,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_282SAR(CYTHON_UNUSED PyObject *__pyx_s __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_func.pxi":4407 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4408 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4408, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4409 + * high = check_array(high) + * low = check_array(low) + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4409, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4410 + * low = check_array(low) + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SAR_Lookback( acceleration , maximum ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4410, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4411 + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_SAR_Lookback( acceleration , maximum ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4412 + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SAR_Lookback( acceleration , maximum ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SAR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , acceleration , maximum , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_SAR_Lookback(__pyx_v_acceleration, __pyx_v_maximum)); + /* "talib/_func.pxi":4413 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SAR_Lookback( acceleration , maximum ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_SAR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , acceleration , maximum , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4414 + * lookback = begidx + lib.TA_SAR_Lookback( acceleration , maximum ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SAR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , acceleration , maximum , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SAR", retCode) + * return outreal + */ __pyx_v_retCode = TA_SAR(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), __pyx_v_acceleration, __pyx_v_maximum, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4415 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SAR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , acceleration , maximum , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SAR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4416 + * retCode = lib.TA_SAR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , acceleration , maximum , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SAR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4387 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SAR( np.ndarray high not None , np.ndarray low not None , double acceleration=0.02 , double maximum=0.2 ): # <<<<<<<<<<<<<< + * """ SAR(high, low[, acceleration=?, maximum=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -28416,6 +42089,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_282SAR(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4420 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SAREXT( np.ndarray high not None , np.ndarray low not None , double startvalue=-4e37 , double offsetonreverse=-4e37 , double accelerationinitlong=-4e37 , double accelerationlong=-4e37 , double accelerationmaxlong=-4e37 , double accelerationinitshort=-4e37 , double accelerationshort=-4e37 , double accelerationmaxshort=-4e37 ): # <<<<<<<<<<<<<< + * """ SAREXT(high, low[, startvalue=?, offsetonreverse=?, accelerationinitlong=?, accelerationlong=?, accelerationmaxlong=?, accelerationinitshort=?, accelerationshort=?, accelerationmaxshort=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_285SAREXT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -28640,42 +42320,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_284SAREXT(CYTHON_UNUSED PyObject *__py __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_func.pxi":4446 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4447 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4448 + * high = check_array(high) + * low = check_array(low) + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4448, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4449 + * low = check_array(low) + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SAREXT_Lookback( startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4449, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4450 + * length = check_length2(high, low) + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_SAREXT_Lookback( startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4451 + * begidx = check_begidx2(length, (high.data), (low.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SAREXT_Lookback( startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SAREXT( 0 , endidx , (high.data)+begidx , (low.data)+begidx , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_SAREXT_Lookback(__pyx_v_startvalue, __pyx_v_offsetonreverse, __pyx_v_accelerationinitlong, __pyx_v_accelerationlong, __pyx_v_accelerationmaxlong, __pyx_v_accelerationinitshort, __pyx_v_accelerationshort, __pyx_v_accelerationmaxshort)); + /* "talib/_func.pxi":4452 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SAREXT_Lookback( startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_SAREXT( 0 , endidx , (high.data)+begidx , (low.data)+begidx , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SAREXT", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4452, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4453 + * lookback = begidx + lib.TA_SAREXT_Lookback( startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SAREXT( 0 , endidx , (high.data)+begidx , (low.data)+begidx , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SAREXT", retCode) + * return outreal + */ __pyx_v_retCode = TA_SAREXT(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), __pyx_v_startvalue, __pyx_v_offsetonreverse, __pyx_v_accelerationinitlong, __pyx_v_accelerationlong, __pyx_v_accelerationmaxlong, __pyx_v_accelerationinitshort, __pyx_v_accelerationshort, __pyx_v_accelerationmaxshort, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4454 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SAREXT( 0 , endidx , (high.data)+begidx , (low.data)+begidx , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SAREXT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SAREXT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4455 + * retCode = lib.TA_SAREXT( 0 , endidx , (high.data)+begidx , (low.data)+begidx , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SAREXT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4420 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SAREXT( np.ndarray high not None , np.ndarray low not None , double startvalue=-4e37 , double offsetonreverse=-4e37 , double accelerationinitlong=-4e37 , double accelerationlong=-4e37 , double accelerationmaxlong=-4e37 , double accelerationinitshort=-4e37 , double accelerationshort=-4e37 , double accelerationmaxshort=-4e37 ): # <<<<<<<<<<<<<< + * """ SAREXT(high, low[, startvalue=?, offsetonreverse=?, accelerationinitlong=?, accelerationlong=?, accelerationmaxlong=?, accelerationinitshort=?, accelerationshort=?, accelerationmaxshort=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -28691,6 +42448,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_284SAREXT(CYTHON_UNUSED PyObject *__py return __pyx_r; } +/* "talib/_func.pxi":4459 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SIN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_287SIN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -28734,36 +42498,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_286SIN(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("SIN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4476 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4477 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4478 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SIN_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4478, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4479 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_SIN_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4480 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SIN_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_SIN_Lookback()); + /* "talib/_func.pxi":4481 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SIN_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_SIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SIN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4482 + * lookback = begidx + lib.TA_SIN_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SIN", retCode) + * return outreal + */ __pyx_v_retCode = TA_SIN(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4483 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SIN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SIN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4484 + * retCode = lib.TA_SIN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SIN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4459 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SIN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -28778,6 +42612,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_286SIN(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4488 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SINH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SINH(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_289SINH(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -28821,36 +42662,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_288SINH(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("SINH", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4505 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4506 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4507 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SINH_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4507, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4508 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_SINH_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4509 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SINH_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SINH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_SINH_Lookback()); + /* "talib/_func.pxi":4510 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SINH_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_SINH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SINH", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4510, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4511 + * lookback = begidx + lib.TA_SINH_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SINH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SINH", retCode) + * return outreal + */ __pyx_v_retCode = TA_SINH(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4512 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SINH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SINH", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SINH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4512, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4513 + * retCode = lib.TA_SINH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SINH", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4488 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SINH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SINH(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -28865,6 +42776,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_288SINH(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":4517 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_291SMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -28963,36 +42881,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_290SMA(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("SMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4536 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4537 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4538 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SMA_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4538, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4539 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_SMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4540 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SMA_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_SMA_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4541 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_SMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SMA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4541, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4542 + * lookback = begidx + lib.TA_SMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_SMA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4543 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4543, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4544 + * retCode = lib.TA_SMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4517 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -29007,6 +42995,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_290SMA(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4548 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SQRT( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SQRT(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_293SQRT(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -29050,36 +43045,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_292SQRT(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("SQRT", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4565 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4566 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4567 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SQRT_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4567, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4568 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_SQRT_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4569 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SQRT_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SQRT( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_SQRT_Lookback()); + /* "talib/_func.pxi":4570 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SQRT_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_SQRT( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SQRT", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4571 + * lookback = begidx + lib.TA_SQRT_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SQRT( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SQRT", retCode) + * return outreal + */ __pyx_v_retCode = TA_SQRT(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4572 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SQRT( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SQRT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SQRT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4573 + * retCode = lib.TA_SQRT( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SQRT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4548 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SQRT( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SQRT(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -29094,6 +43159,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_292SQRT(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":4577 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STDDEV( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ STDDEV(real[, timeperiod=?, nbdev=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_295STDDEV(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -29208,36 +43280,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_294STDDEV(CYTHON_UNUSED PyObject *__py __Pyx_RefNannySetupContext("STDDEV", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4597 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4598 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4599 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STDDEV_Lookback( timeperiod , nbdev ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4599, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4600 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_STDDEV_Lookback( timeperiod , nbdev ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4601 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STDDEV_Lookback( timeperiod , nbdev ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_STDDEV( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_STDDEV_Lookback(__pyx_v_timeperiod, __pyx_v_nbdev)); + /* "talib/_func.pxi":4602 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STDDEV_Lookback( timeperiod , nbdev ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_STDDEV( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_STDDEV", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4602, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4603 + * lookback = begidx + lib.TA_STDDEV_Lookback( timeperiod , nbdev ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_STDDEV( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_STDDEV", retCode) + * return outreal + */ __pyx_v_retCode = TA_STDDEV(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, __pyx_v_nbdev, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4604 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_STDDEV( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_STDDEV", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_STDDEV, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4605 + * retCode = lib.TA_STDDEV( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_STDDEV", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4577 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STDDEV( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ STDDEV(real[, timeperiod=?, nbdev=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -29252,6 +43394,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_294STDDEV(CYTHON_UNUSED PyObject *__py return __pyx_r; } +/* "talib/_func.pxi":4609 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCH( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int slowk_period=-2**31 , int slowk_matype=0 , int slowd_period=-2**31 , int slowd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_297STOCH(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -29442,47 +43591,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_296STOCH(CYTHON_UNUSED PyObject *__pyx __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":4634 + * np.ndarray outslowk + * np.ndarray outslowd + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4634, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4635 + * np.ndarray outslowd + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4636 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4637 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4637, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4638 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCH_Lookback( fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4638, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4639 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_STOCH_Lookback( fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype ) + * outslowk = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4640 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCH_Lookback( fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype ) # <<<<<<<<<<<<<< + * outslowk = make_double_array(length, lookback) + * outslowd = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_STOCH_Lookback(__pyx_v_fastk_period, __pyx_v_slowk_period, __pyx_v_slowk_matype, __pyx_v_slowd_period, __pyx_v_slowd_matype)); + /* "talib/_func.pxi":4641 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCH_Lookback( fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype ) + * outslowk = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outslowd = make_double_array(length, lookback) + * retCode = lib.TA_STOCH( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , (outslowk.data)+lookback , (outslowd.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outslowk = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4642 + * lookback = begidx + lib.TA_STOCH_Lookback( fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype ) + * outslowk = make_double_array(length, lookback) + * outslowd = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_STOCH( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , (outslowk.data)+lookback , (outslowd.data)+lookback ) + * _ta_check_success("TA_STOCH", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4642, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outslowd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4643 + * outslowk = make_double_array(length, lookback) + * outslowd = make_double_array(length, lookback) + * retCode = lib.TA_STOCH( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , (outslowk.data)+lookback , (outslowd.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_STOCH", retCode) + * return outslowk , outslowd + */ __pyx_v_retCode = TA_STOCH(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_fastk_period, __pyx_v_slowk_period, __pyx_v_slowk_matype, __pyx_v_slowd_period, __pyx_v_slowd_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outslowk->data) + __pyx_v_lookback), (((double *)__pyx_v_outslowd->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4644 + * outslowd = make_double_array(length, lookback) + * retCode = lib.TA_STOCH( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , (outslowk.data)+lookback , (outslowd.data)+lookback ) + * _ta_check_success("TA_STOCH", retCode) # <<<<<<<<<<<<<< + * return outslowk , outslowd + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_STOCH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4644, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4645 + * retCode = lib.TA_STOCH( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , (outslowk.data)+lookback , (outslowd.data)+lookback ) + * _ta_check_success("TA_STOCH", retCode) + * return outslowk , outslowd # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4645, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -29496,6 +43729,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_296STOCH(CYTHON_UNUSED PyObject *__pyx __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":4609 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCH( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int slowk_period=-2**31 , int slowk_matype=0 , int slowd_period=-2**31 , int slowd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -29513,6 +43753,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_296STOCH(CYTHON_UNUSED PyObject *__pyx return __pyx_r; } +/* "talib/_func.pxi":4649 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCHF( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_299STOCHF(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -29671,47 +43918,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_298STOCHF(CYTHON_UNUSED PyObject *__py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":4672 + * np.ndarray outfastk + * np.ndarray outfastd + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4673 + * np.ndarray outfastd + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4674 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4675 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4675, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4676 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCHF_Lookback( fastk_period , fastd_period , fastd_matype ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4676, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4677 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_STOCHF_Lookback( fastk_period , fastd_period , fastd_matype ) + * outfastk = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4678 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCHF_Lookback( fastk_period , fastd_period , fastd_matype ) # <<<<<<<<<<<<<< + * outfastk = make_double_array(length, lookback) + * outfastd = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_STOCHF_Lookback(__pyx_v_fastk_period, __pyx_v_fastd_period, __pyx_v_fastd_matype)); + /* "talib/_func.pxi":4679 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCHF_Lookback( fastk_period , fastd_period , fastd_matype ) + * outfastk = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outfastd = make_double_array(length, lookback) + * retCode = lib.TA_STOCHF( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outfastk = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4680 + * lookback = begidx + lib.TA_STOCHF_Lookback( fastk_period , fastd_period , fastd_matype ) + * outfastk = make_double_array(length, lookback) + * outfastd = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_STOCHF( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) + * _ta_check_success("TA_STOCHF", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outfastd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4681 + * outfastk = make_double_array(length, lookback) + * outfastd = make_double_array(length, lookback) + * retCode = lib.TA_STOCHF( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_STOCHF", retCode) + * return outfastk , outfastd + */ __pyx_v_retCode = TA_STOCHF(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_fastk_period, __pyx_v_fastd_period, __pyx_v_fastd_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outfastk->data) + __pyx_v_lookback), (((double *)__pyx_v_outfastd->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4682 + * outfastd = make_double_array(length, lookback) + * retCode = lib.TA_STOCHF( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) + * _ta_check_success("TA_STOCHF", retCode) # <<<<<<<<<<<<<< + * return outfastk , outfastd + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_STOCHF, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4683 + * retCode = lib.TA_STOCHF( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) + * _ta_check_success("TA_STOCHF", retCode) + * return outfastk , outfastd # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -29725,6 +44056,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_298STOCHF(CYTHON_UNUSED PyObject *__py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":4649 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCHF( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -29742,6 +44080,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_298STOCHF(CYTHON_UNUSED PyObject *__py return __pyx_r; } +/* "talib/_func.pxi":4687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCHRSI( np.ndarray real not None , int timeperiod=-2**31 , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHRSI(real[, timeperiod=?, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_301STOCHRSI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -29889,36 +44234,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_300STOCHRSI(CYTHON_UNUSED PyObject *__ __Pyx_RefNannySetupContext("STOCHRSI", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4711 + * np.ndarray outfastk + * np.ndarray outfastd + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4711, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4712 + * np.ndarray outfastd + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4713 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCHRSI_Lookback( timeperiod , fastk_period , fastd_period , fastd_matype ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4713, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4714 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_STOCHRSI_Lookback( timeperiod , fastk_period , fastd_period , fastd_matype ) + * outfastk = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4715 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCHRSI_Lookback( timeperiod , fastk_period , fastd_period , fastd_matype ) # <<<<<<<<<<<<<< + * outfastk = make_double_array(length, lookback) + * outfastd = make_double_array(length, lookback) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_STOCHRSI_Lookback(__pyx_v_timeperiod, __pyx_v_fastk_period, __pyx_v_fastd_period, __pyx_v_fastd_matype)); + /* "talib/_func.pxi":4716 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_STOCHRSI_Lookback( timeperiod , fastk_period , fastd_period , fastd_matype ) + * outfastk = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * outfastd = make_double_array(length, lookback) + * retCode = lib.TA_STOCHRSI( 0 , endidx , (real.data)+begidx , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outfastk = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4717 + * lookback = begidx + lib.TA_STOCHRSI_Lookback( timeperiod , fastk_period , fastd_period , fastd_matype ) + * outfastk = make_double_array(length, lookback) + * outfastd = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_STOCHRSI( 0 , endidx , (real.data)+begidx , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) + * _ta_check_success("TA_STOCHRSI", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outfastd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4718 + * outfastk = make_double_array(length, lookback) + * outfastd = make_double_array(length, lookback) + * retCode = lib.TA_STOCHRSI( 0 , endidx , (real.data)+begidx , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_STOCHRSI", retCode) + * return outfastk , outfastd + */ __pyx_v_retCode = TA_STOCHRSI(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, __pyx_v_fastk_period, __pyx_v_fastd_period, __pyx_v_fastd_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outfastk->data) + __pyx_v_lookback), (((double *)__pyx_v_outfastd->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4719 + * outfastd = make_double_array(length, lookback) + * retCode = lib.TA_STOCHRSI( 0 , endidx , (real.data)+begidx , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) + * _ta_check_success("TA_STOCHRSI", retCode) # <<<<<<<<<<<<<< + * return outfastk , outfastd + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_STOCHRSI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4720 + * retCode = lib.TA_STOCHRSI( 0 , endidx , (real.data)+begidx , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , (outfastk.data)+lookback , (outfastd.data)+lookback ) + * _ta_check_success("TA_STOCHRSI", retCode) + * return outfastk , outfastd # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -29932,6 +44347,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_300STOCHRSI(CYTHON_UNUSED PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_func.pxi":4687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCHRSI( np.ndarray real not None , int timeperiod=-2**31 , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHRSI(real[, timeperiod=?, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -29947,6 +44369,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_300STOCHRSI(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":4724 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SUB( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ SUB(real0, real1) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_303SUB(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -30041,42 +44470,119 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_302SUB(CYTHON_UNUSED PyObject *__pyx_s __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_func.pxi":4742 + * int outnbelement + * np.ndarray outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4743 + * np.ndarray outreal + * real0 = check_array(real0) + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4743, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4744 + * real0 = check_array(real0) + * real1 = check_array(real1) + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4744, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4745 + * real1 = check_array(real1) + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SUB_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx2(__pyx_v_length, ((double *)__pyx_v_real0->data), ((double *)__pyx_v_real1->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4745, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4746 + * length = check_length2(real0, real1) + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_SUB_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4747 + * begidx = check_begidx2(length, (real0.data), (real1.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SUB_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SUB( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_SUB_Lookback()); + /* "talib/_func.pxi":4748 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SUB_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_SUB( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SUB", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4749 + * lookback = begidx + lib.TA_SUB_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SUB( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SUB", retCode) + * return outreal + */ __pyx_v_retCode = TA_SUB(0, __pyx_v_endidx, (((double *)__pyx_v_real0->data) + __pyx_v_begidx), (((double *)__pyx_v_real1->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4750 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SUB( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SUB", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SUB, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4751 + * retCode = lib.TA_SUB( 0 , endidx , (real0.data)+begidx , (real1.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SUB", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4724 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SUB( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ SUB(real0, real1) + * + */ /* function exit code */ __pyx_L1_error:; @@ -30092,6 +44598,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_302SUB(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4755 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SUM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SUM(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_305SUM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -30190,36 +44703,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_304SUM(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("SUM", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4774 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4775 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4776 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SUM_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4776, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4777 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_SUM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4778 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SUM_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SUM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_SUM_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4779 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_SUM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_SUM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SUM", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4780 + * lookback = begidx + lib.TA_SUM_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SUM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SUM", retCode) + * return outreal + */ __pyx_v_retCode = TA_SUM(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4781 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_SUM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SUM", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SUM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4782 + * retCode = lib.TA_SUM( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_SUM", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4755 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SUM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SUM(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -30234,6 +44817,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_304SUM(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4786 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def T3( np.ndarray real not None , int timeperiod=-2**31 , double vfactor=-4e37 ): # <<<<<<<<<<<<<< + * """ T3(real[, timeperiod=?, vfactor=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_307T3(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -30348,36 +44938,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_306T3(CYTHON_UNUSED PyObject *__pyx_se __Pyx_RefNannySetupContext("T3", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4806 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4807 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4808 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_T3_Lookback( timeperiod , vfactor ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4808, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4809 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_T3_Lookback( timeperiod , vfactor ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4810 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_T3_Lookback( timeperiod , vfactor ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_T3( 0 , endidx , (real.data)+begidx , timeperiod , vfactor , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_T3_Lookback(__pyx_v_timeperiod, __pyx_v_vfactor)); + /* "talib/_func.pxi":4811 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_T3_Lookback( timeperiod , vfactor ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_T3( 0 , endidx , (real.data)+begidx , timeperiod , vfactor , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_T3", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4812 + * lookback = begidx + lib.TA_T3_Lookback( timeperiod , vfactor ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_T3( 0 , endidx , (real.data)+begidx , timeperiod , vfactor , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_T3", retCode) + * return outreal + */ __pyx_v_retCode = TA_T3(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, __pyx_v_vfactor, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4813 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_T3( 0 , endidx , (real.data)+begidx , timeperiod , vfactor , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_T3", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_T3, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4814 + * retCode = lib.TA_T3( 0 , endidx , (real.data)+begidx , timeperiod , vfactor , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_T3", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4786 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def T3( np.ndarray real not None , int timeperiod=-2**31 , double vfactor=-4e37 ): # <<<<<<<<<<<<<< + * """ T3(real[, timeperiod=?, vfactor=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -30392,6 +45052,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_306T3(CYTHON_UNUSED PyObject *__pyx_se return __pyx_r; } +/* "talib/_func.pxi":4818 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TAN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_309TAN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -30435,36 +45102,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_308TAN(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("TAN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4835 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4835, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4836 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4837 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TAN_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4837, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4838 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_TAN_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4839 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TAN_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_TAN_Lookback()); + /* "talib/_func.pxi":4840 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TAN_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_TAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TAN", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4840, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4841 + * lookback = begidx + lib.TA_TAN_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TAN", retCode) + * return outreal + */ __pyx_v_retCode = TA_TAN(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4842 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TAN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TAN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4843 + * retCode = lib.TA_TAN( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TAN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4818 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TAN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -30479,6 +45216,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_308TAN(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":4847 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TANH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TANH(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_311TANH(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -30522,36 +45266,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_310TANH(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("TANH", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4864 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4865 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4866 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TANH_Lookback( ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4866, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4867 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_TANH_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4868 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TANH_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TANH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_TANH_Lookback()); + /* "talib/_func.pxi":4869 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TANH_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_TANH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TANH", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4870 + * lookback = begidx + lib.TA_TANH_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TANH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TANH", retCode) + * return outreal + */ __pyx_v_retCode = TA_TANH(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4871 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TANH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TANH", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TANH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4872 + * retCode = lib.TA_TANH( 0 , endidx , (real.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TANH", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4847 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TANH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TANH(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -30566,6 +45380,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_310TANH(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":4876 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TEMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_313TEMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -30664,36 +45485,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_312TEMA(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("TEMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4895 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4896 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4897 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TEMA_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4897, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4898 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_TEMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4899 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TEMA_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_TEMA_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4900 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TEMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_TEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TEMA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4900, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4901 + * lookback = begidx + lib.TA_TEMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TEMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_TEMA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4902 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TEMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TEMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4903 + * retCode = lib.TA_TEMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TEMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4876 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TEMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -30708,6 +45599,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_312TEMA(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":4907 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRANGE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TRANGE(high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_315TRANGE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -30815,47 +45713,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_314TRANGE(CYTHON_UNUSED PyObject *__py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":4924 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4925 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4925, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4926 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4926, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4927 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 4927, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":4928 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRANGE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 4928, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":4929 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_TRANGE_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4930 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRANGE_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRANGE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_TRANGE_Lookback()); + /* "talib/_func.pxi":4931 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRANGE_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_TRANGE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRANGE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4932 + * lookback = begidx + lib.TA_TRANGE_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRANGE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TRANGE", retCode) + * return outreal + */ __pyx_v_retCode = TA_TRANGE(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4933 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRANGE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRANGE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TRANGE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4934 + * retCode = lib.TA_TRANGE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRANGE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4907 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRANGE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TRANGE(high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -30872,6 +45854,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_314TRANGE(CYTHON_UNUSED PyObject *__py return __pyx_r; } +/* "talib/_func.pxi":4938 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRIMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_317TRIMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -30970,36 +45959,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_316TRIMA(CYTHON_UNUSED PyObject *__pyx __Pyx_RefNannySetupContext("TRIMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4957 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4958 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4959 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRIMA_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4959, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4960 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_TRIMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4961 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRIMA_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRIMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_TRIMA_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4962 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRIMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_TRIMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRIMA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4963 + * lookback = begidx + lib.TA_TRIMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRIMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TRIMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_TRIMA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4964 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRIMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRIMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TRIMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4965 + * retCode = lib.TA_TRIMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRIMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4938 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRIMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -31014,6 +46073,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_316TRIMA(CYTHON_UNUSED PyObject *__pyx return __pyx_r; } +/* "talib/_func.pxi":4969 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRIX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_319TRIX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -31112,36 +46178,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_318TRIX(CYTHON_UNUSED PyObject *__pyx_ __Pyx_RefNannySetupContext("TRIX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":4988 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":4989 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":4990 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRIX_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 4990, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":4991 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_TRIX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":4992 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRIX_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRIX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_TRIX_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":4993 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TRIX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_TRIX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRIX", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4994 + * lookback = begidx + lib.TA_TRIX_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRIX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TRIX", retCode) + * return outreal + */ __pyx_v_retCode = TA_TRIX(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":4995 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TRIX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRIX", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TRIX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":4996 + * retCode = lib.TA_TRIX( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TRIX", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":4969 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRIX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -31156,6 +46292,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_318TRIX(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } +/* "talib/_func.pxi":5000 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TSF( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TSF(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_321TSF(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -31254,36 +46397,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_320TSF(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("TSF", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":5019 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5019, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5020 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":5021 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TSF_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 5021, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":5022 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_TSF_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":5023 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TSF_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TSF( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_TSF_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":5024 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TSF_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_TSF( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TSF", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5024, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5025 + * lookback = begidx + lib.TA_TSF_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TSF( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TSF", retCode) + * return outreal + */ __pyx_v_retCode = TA_TSF(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":5026 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TSF( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TSF", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TSF, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5026, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5027 + * retCode = lib.TA_TSF( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TSF", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":5000 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TSF( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TSF(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -31298,6 +46511,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_320TSF(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":5031 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TYPPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TYPPRICE(high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_323TYPPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -31405,47 +46625,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_322TYPPRICE(CYTHON_UNUSED PyObject *__ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":5048 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5048, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5049 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5049, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5050 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5050, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5051 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 5051, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":5052 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TYPPRICE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 5052, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":5053 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_TYPPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":5054 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TYPPRICE_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TYPPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_TYPPRICE_Lookback()); + /* "talib/_func.pxi":5055 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_TYPPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_TYPPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TYPPRICE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5055, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5056 + * lookback = begidx + lib.TA_TYPPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TYPPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TYPPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_TYPPRICE(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":5057 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_TYPPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TYPPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TYPPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5057, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5058 + * retCode = lib.TA_TYPPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_TYPPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":5031 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TYPPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TYPPRICE(high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -31462,6 +46766,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_322TYPPRICE(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":5062 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ULTOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod1=-2**31 , int timeperiod2=-2**31 , int timeperiod3=-2**31 ): # <<<<<<<<<<<<<< + * """ ULTOSC(high, low, close[, timeperiod1=?, timeperiod2=?, timeperiod3=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_325ULTOSC(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -31619,47 +46930,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_324ULTOSC(CYTHON_UNUSED PyObject *__py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":5083 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5083, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5084 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5085 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5086 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 5086, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":5087 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ULTOSC_Lookback( timeperiod1 , timeperiod2 , timeperiod3 ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 5087, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":5088 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_ULTOSC_Lookback( timeperiod1 , timeperiod2 , timeperiod3 ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":5089 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ULTOSC_Lookback( timeperiod1 , timeperiod2 , timeperiod3 ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ULTOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_ULTOSC_Lookback(__pyx_v_timeperiod1, __pyx_v_timeperiod2, __pyx_v_timeperiod3)); + /* "talib/_func.pxi":5090 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_ULTOSC_Lookback( timeperiod1 , timeperiod2 , timeperiod3 ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_ULTOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ULTOSC", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5090, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5091 + * lookback = begidx + lib.TA_ULTOSC_Lookback( timeperiod1 , timeperiod2 , timeperiod3 ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ULTOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ULTOSC", retCode) + * return outreal + */ __pyx_v_retCode = TA_ULTOSC(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod1, __pyx_v_timeperiod2, __pyx_v_timeperiod3, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":5092 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_ULTOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ULTOSC", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ULTOSC, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5092, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5093 + * retCode = lib.TA_ULTOSC( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_ULTOSC", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":5062 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ULTOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod1=-2**31 , int timeperiod2=-2**31 , int timeperiod3=-2**31 ): # <<<<<<<<<<<<<< + * """ ULTOSC(high, low, close[, timeperiod1=?, timeperiod2=?, timeperiod3=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -31676,6 +47071,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_324ULTOSC(CYTHON_UNUSED PyObject *__py return __pyx_r; } +/* "talib/_func.pxi":5097 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def VAR( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ VAR(real[, timeperiod=?, nbdev=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_327VAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -31790,36 +47192,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_326VAR(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("VAR", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":5117 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5118 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":5119 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_VAR_Lookback( timeperiod , nbdev ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 5119, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":5120 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_VAR_Lookback( timeperiod , nbdev ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":5121 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_VAR_Lookback( timeperiod , nbdev ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_VAR( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_VAR_Lookback(__pyx_v_timeperiod, __pyx_v_nbdev)); + /* "talib/_func.pxi":5122 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_VAR_Lookback( timeperiod , nbdev ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_VAR( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_VAR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5123 + * lookback = begidx + lib.TA_VAR_Lookback( timeperiod , nbdev ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_VAR( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_VAR", retCode) + * return outreal + */ __pyx_v_retCode = TA_VAR(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, __pyx_v_nbdev, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":5124 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_VAR( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_VAR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_VAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5125 + * retCode = lib.TA_VAR( 0 , endidx , (real.data)+begidx , timeperiod , nbdev , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_VAR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":5097 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def VAR( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ VAR(real[, timeperiod=?, nbdev=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -31834,6 +47306,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_326VAR(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_func.pxi":5129 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WCLPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ WCLPRICE(high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_329WCLPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -31941,47 +47420,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_328WCLPRICE(CYTHON_UNUSED PyObject *__ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":5146 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5147 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5148 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5149 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 5149, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":5150 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WCLPRICE_Lookback( ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 5150, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":5151 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_WCLPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":5152 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WCLPRICE_Lookback( ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WCLPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_WCLPRICE_Lookback()); + /* "talib/_func.pxi":5153 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WCLPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_WCLPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WCLPRICE", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5154 + * lookback = begidx + lib.TA_WCLPRICE_Lookback( ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WCLPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_WCLPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_WCLPRICE(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":5155 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WCLPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WCLPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_WCLPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5155, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5156 + * retCode = lib.TA_WCLPRICE( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WCLPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":5129 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WCLPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ WCLPRICE(high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -31998,6 +47561,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_328WCLPRICE(CYTHON_UNUSED PyObject *__ return __pyx_r; } +/* "talib/_func.pxi":5160 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WILLR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WILLR(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_331WILLR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -32123,47 +47693,131 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_330WILLR(CYTHON_UNUSED PyObject *__pyx __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_func.pxi":5179 + * int outnbelement + * np.ndarray outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * low = check_array(low) + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5180 + * np.ndarray outreal + * high = check_array(high) + * low = check_array(low) # <<<<<<<<<<<<<< + * close = check_array(close) + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5181 + * high = check_array(high) + * low = check_array(low) + * close = check_array(close) # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5182 + * low = check_array(low) + * close = check_array(close) + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(2, 5182, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_func.pxi":5183 + * close = check_array(close) + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WILLR_Lookback( timeperiod ) + */ __pyx_t_3 = __pyx_f_5talib_7_ta_lib_check_begidx3(__pyx_v_length, ((double *)__pyx_v_high->data), ((double *)__pyx_v_low->data), ((double *)__pyx_v_close->data)); if (unlikely(__pyx_t_3 == ((npy_int)-1))) __PYX_ERR(2, 5183, __pyx_L1_error) __pyx_v_begidx = __pyx_t_3; + /* "talib/_func.pxi":5184 + * length = check_length3(high, low, close) + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_WILLR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":5185 + * begidx = check_begidx3(length, (high.data), (low.data), (close.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WILLR_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WILLR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_WILLR_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":5186 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WILLR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_WILLR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WILLR", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5187 + * lookback = begidx + lib.TA_WILLR_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WILLR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_WILLR", retCode) + * return outreal + */ __pyx_v_retCode = TA_WILLR(0, __pyx_v_endidx, (((double *)__pyx_v_high->data) + __pyx_v_begidx), (((double *)__pyx_v_low->data) + __pyx_v_begidx), (((double *)__pyx_v_close->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":5188 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WILLR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WILLR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_WILLR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5189 + * retCode = lib.TA_WILLR( 0 , endidx , (high.data)+begidx , (low.data)+begidx , (close.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WILLR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":5160 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WILLR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WILLR(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -32180,6 +47834,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_330WILLR(CYTHON_UNUSED PyObject *__pyx return __pyx_r; } +/* "talib/_func.pxi":5193 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_333WMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -32278,36 +47939,106 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_332WMA(CYTHON_UNUSED PyObject *__pyx_s __Pyx_RefNannySetupContext("WMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_func.pxi":5212 + * int outnbelement + * np.ndarray outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5212, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_func.pxi":5213 + * np.ndarray outreal + * real = check_array(real) + * length = real.shape[0] # <<<<<<<<<<<<<< + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_func.pxi":5214 + * real = check_array(real) + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) # <<<<<<<<<<<<<< + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WMA_Lookback( timeperiod ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_begidx1(__pyx_v_length, ((double *)__pyx_v_real->data)); if (unlikely(__pyx_t_2 == ((npy_int)-1))) __PYX_ERR(2, 5214, __pyx_L1_error) __pyx_v_begidx = __pyx_t_2; + /* "talib/_func.pxi":5215 + * length = real.shape[0] + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 # <<<<<<<<<<<<<< + * lookback = begidx + lib.TA_WMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + */ __pyx_v_endidx = ((((int)__pyx_v_length) - __pyx_v_begidx) - 1); + /* "talib/_func.pxi":5216 + * begidx = check_begidx1(length, (real.data)) + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WMA_Lookback( timeperiod ) # <<<<<<<<<<<<<< + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + */ __pyx_v_lookback = (__pyx_v_begidx + TA_WMA_Lookback(__pyx_v_timeperiod)); + /* "talib/_func.pxi":5217 + * endidx = length - begidx - 1 + * lookback = begidx + lib.TA_WMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) # <<<<<<<<<<<<<< + * retCode = lib.TA_WMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WMA", retCode) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_make_double_array(__pyx_v_length, __pyx_v_lookback)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5217, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_outreal = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5218 + * lookback = begidx + lib.TA_WMA_Lookback( timeperiod ) + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_WMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_WMA(0, __pyx_v_endidx, (((double *)__pyx_v_real->data) + __pyx_v_begidx), __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (((double *)__pyx_v_outreal->data) + __pyx_v_lookback)); + /* "talib/_func.pxi":5219 + * outreal = make_double_array(length, lookback) + * retCode = lib.TA_WMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_WMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_func.pxi":5220 + * retCode = lib.TA_WMA( 0 , endidx , (real.data)+begidx , timeperiod , &outbegidx , &outnbelement , (outreal.data)+lookback ) + * _ta_check_success("TA_WMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * __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"] + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_outreal)); __pyx_r = ((PyObject *)__pyx_v_outreal); goto __pyx_L0; + /* "talib/_func.pxi":5193 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -32322,6 +48053,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_332WMA(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } +/* "talib/_abstract.pxi":56 + * if sys.version >= '3': + * + * def str2bytes(s): # <<<<<<<<<<<<<< + * return bytes(s, 'ascii') + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_335str2bytes(PyObject *__pyx_self, PyObject *__pyx_v_s); /*proto*/ @@ -32347,6 +48085,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_334str2bytes(CYTHON_UNUSED PyObject *_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("str2bytes", 0); + /* "talib/_abstract.pxi":57 + * + * def str2bytes(s): + * return bytes(s, 'ascii') # <<<<<<<<<<<<<< + * + * def bytes2str(b): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -32363,6 +48108,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_334str2bytes(CYTHON_UNUSED PyObject *_ __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":56 + * if sys.version >= '3': + * + * def str2bytes(s): # <<<<<<<<<<<<<< + * return bytes(s, 'ascii') + * + */ /* function exit code */ __pyx_L1_error:; @@ -32376,6 +48128,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_334str2bytes(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_abstract.pxi":59 + * return bytes(s, 'ascii') + * + * def bytes2str(b): # <<<<<<<<<<<<<< + * return b.decode('ascii') + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_337bytes2str(PyObject *__pyx_self, PyObject *__pyx_v_b); /*proto*/ @@ -32402,6 +48161,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_336bytes2str(CYTHON_UNUSED PyObject *_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("bytes2str", 0); + /* "talib/_abstract.pxi":60 + * + * def bytes2str(b): + * return b.decode('ascii') # <<<<<<<<<<<<<< + * + * else: + */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -32424,6 +48190,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_336bytes2str(CYTHON_UNUSED PyObject *_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":59 + * return bytes(s, 'ascii') + * + * def bytes2str(b): # <<<<<<<<<<<<<< + * return b.decode('ascii') + * + */ /* function exit code */ __pyx_L1_error:; @@ -32438,6 +48211,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_336bytes2str(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_abstract.pxi":64 + * else: + * + * def str2bytes(s): # <<<<<<<<<<<<<< + * return s + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_339str2bytes(PyObject *__pyx_self, PyObject *__pyx_v_s); /*proto*/ @@ -32458,11 +48238,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_338str2bytes(CYTHON_UNUSED PyObject *_ __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("str2bytes", 0); + /* "talib/_abstract.pxi":65 + * + * def str2bytes(s): + * return s # <<<<<<<<<<<<<< + * + * def bytes2str(b): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_s); __pyx_r = __pyx_v_s; goto __pyx_L0; + /* "talib/_abstract.pxi":64 + * else: + * + * def str2bytes(s): # <<<<<<<<<<<<<< + * return s + * + */ /* function exit code */ __pyx_L0:; @@ -32471,6 +48265,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_338str2bytes(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_abstract.pxi":67 + * return s + * + * def bytes2str(b): # <<<<<<<<<<<<<< + * return b + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_341bytes2str(PyObject *__pyx_self, PyObject *__pyx_v_b); /*proto*/ @@ -32491,11 +48292,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_340bytes2str(CYTHON_UNUSED PyObject *_ __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bytes2str", 0); + /* "talib/_abstract.pxi":68 + * + * def bytes2str(b): + * return b # <<<<<<<<<<<<<< + * + * class Function(object): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_b); __pyx_r = __pyx_v_b; goto __pyx_L0; + /* "talib/_abstract.pxi":67 + * return s + * + * def bytes2str(b): # <<<<<<<<<<<<<< + * return b + * + */ /* function exit code */ __pyx_L0:; @@ -32504,6 +48319,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_340bytes2str(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_abstract.pxi":99 + * """ + * + * def __init__(self, function_name, func_object, *args, **kwargs): # <<<<<<<<<<<<<< + * # make sure the function_name is valid and define all of our variables + * self.__name = function_name.upper() + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -32613,6 +48435,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__init__", 0); + /* "talib/_abstract.pxi":101 + * def __init__(self, function_name, func_object, *args, **kwargs): + * # make sure the function_name is valid and define all of our variables + * self.__name = function_name.upper() # <<<<<<<<<<<<<< + * self.__namestr = self.__name + * self.__name = str2bytes(self.__name) + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_function_name, __pyx_n_s_upper); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -32633,11 +48462,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__name, __pyx_t_1) < 0) __PYX_ERR(1, 101, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":102 + * # make sure the function_name is valid and define all of our variables + * self.__name = function_name.upper() + * self.__namestr = self.__name # <<<<<<<<<<<<<< + * self.__name = str2bytes(self.__name) + * self.__info = None + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__name); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 102, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__namestr, __pyx_t_1) < 0) __PYX_ERR(1, 102, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":103 + * self.__name = function_name.upper() + * self.__namestr = self.__name + * self.__name = str2bytes(self.__name) # <<<<<<<<<<<<<< + * self.__info = None + * self.__input_arrays = {} + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_str2bytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__name); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 103, __pyx_L1_error) @@ -32661,13 +48504,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__name, __pyx_t_1) < 0) __PYX_ERR(1, 103, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":104 + * self.__namestr = self.__name + * self.__name = str2bytes(self.__name) + * self.__info = None # <<<<<<<<<<<<<< + * self.__input_arrays = {} + * + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__info, Py_None) < 0) __PYX_ERR(1, 104, __pyx_L1_error) + /* "talib/_abstract.pxi":105 + * self.__name = str2bytes(self.__name) + * self.__info = None + * self.__input_arrays = {} # <<<<<<<<<<<<<< + * + * # dictionaries of function args. keys are input/opt_input/output parameter names + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays, __pyx_t_1) < 0) __PYX_ERR(1, 105, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":108 + * + * # dictionaries of function args. keys are input/opt_input/output parameter names + * self.__input_names = OrderedDict() # <<<<<<<<<<<<<< + * self.__opt_inputs = OrderedDict() + * self.__outputs = OrderedDict() + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -32688,6 +48552,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names, __pyx_t_1) < 0) __PYX_ERR(1, 108, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":109 + * # dictionaries of function args. keys are input/opt_input/output parameter names + * self.__input_names = OrderedDict() + * self.__opt_inputs = OrderedDict() # <<<<<<<<<<<<<< + * self.__outputs = OrderedDict() + * self.__outputs_valid = False + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -32708,6 +48579,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs, __pyx_t_1) < 0) __PYX_ERR(1, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":110 + * self.__input_names = OrderedDict() + * self.__opt_inputs = OrderedDict() + * self.__outputs = OrderedDict() # <<<<<<<<<<<<<< + * self.__outputs_valid = False + * + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -32728,8 +48606,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs, __pyx_t_1) < 0) __PYX_ERR(1, 110, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":111 + * self.__opt_inputs = OrderedDict() + * self.__outputs = OrderedDict() + * self.__outputs_valid = False # <<<<<<<<<<<<<< + * + * # finish initializing: query the TALIB abstract interface and set arguments + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs_valid, Py_False) < 0) __PYX_ERR(1, 111, __pyx_L1_error) + /* "talib/_abstract.pxi":114 + * + * # finish initializing: query the TALIB abstract interface and set arguments + * self.__initialize_function_info() # <<<<<<<<<<<<<< + * self.set_function_args(*args, **kwargs) + * self.func_object = func_object + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__initialize_function_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -32749,6 +48641,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":115 + * # finish initializing: query the TALIB abstract interface and set arguments + * self.__initialize_function_info() + * self.set_function_args(*args, **kwargs) # <<<<<<<<<<<<<< + * self.func_object = func_object + * + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_set_function_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 115, __pyx_L1_error) @@ -32759,8 +48658,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":116 + * self.__initialize_function_info() + * self.set_function_args(*args, **kwargs) + * self.func_object = func_object # <<<<<<<<<<<<<< + * + * def __initialize_function_info(self): + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_func_object, __pyx_v_func_object) < 0) __PYX_ERR(1, 116, __pyx_L1_error) + /* "talib/_abstract.pxi":99 + * """ + * + * def __init__(self, function_name, func_object, *args, **kwargs): # <<<<<<<<<<<<<< + * # make sure the function_name is valid and define all of our variables + * self.__name = function_name.upper() + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -32778,6 +48691,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_abstract.pxi":118 + * self.func_object = func_object + * + * def __initialize_function_info(self): # <<<<<<<<<<<<<< + * # function info + * self.__info = _ta_getFuncInfo(self.__name) + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_3__initialize_function_info(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -32817,6 +48737,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__initialize_function_info", 0); + /* "talib/_abstract.pxi":120 + * def __initialize_function_info(self): + * # function info + * self.__info = _ta_getFuncInfo(self.__name) # <<<<<<<<<<<<<< + * + * # inputs (price series names) + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ta_getFuncInfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__name); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 120, __pyx_L1_error) @@ -32840,6 +48767,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__info, __pyx_t_1) < 0) __PYX_ERR(1, 120, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":123 + * + * # inputs (price series names) + * for i in xrange(self.__info.pop('num_inputs')): # <<<<<<<<<<<<<< + * info = _ta_getInputParameterInfo(self.__name, i) + * input_name = info['name'] + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 123, __pyx_L1_error) @@ -32906,6 +48840,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":124 + * # inputs (price series names) + * for i in xrange(self.__info.pop('num_inputs')): + * info = _ta_getInputParameterInfo(self.__name, i) # <<<<<<<<<<<<<< + * input_name = info['name'] + * if info['price_series'] is None: + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ta_getInputParameterInfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__name); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 124, __pyx_L1_error) @@ -32960,11 +48901,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_XDECREF_SET(__pyx_v_info, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":125 + * for i in xrange(self.__info.pop('num_inputs')): + * info = _ta_getInputParameterInfo(self.__name, i) + * input_name = info['name'] # <<<<<<<<<<<<<< + * if info['price_series'] is None: + * info['price_series'] = __INPUT_PRICE_SERIES_DEFAULTS[input_name] + */ __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_info, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 125, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_input_name, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":126 + * info = _ta_getInputParameterInfo(self.__name, i) + * input_name = info['name'] + * if info['price_series'] is None: # <<<<<<<<<<<<<< + * info['price_series'] = __INPUT_PRICE_SERIES_DEFAULTS[input_name] + * self.__input_names[input_name] = info + */ __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_info, __pyx_n_s_price_series); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 126, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_10 = (__pyx_t_3 == Py_None); @@ -32972,6 +48927,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __pyx_t_11 = (__pyx_t_10 != 0); if (__pyx_t_11) { + /* "talib/_abstract.pxi":127 + * input_name = info['name'] + * if info['price_series'] is None: + * info['price_series'] = __INPUT_PRICE_SERIES_DEFAULTS[input_name] # <<<<<<<<<<<<<< + * self.__input_names[input_name] = info + * self.__info['input_names'] = self.input_names + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_INPUT_PRICE_SERIES_DEFAULTS); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_input_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 127, __pyx_L1_error) @@ -32980,16 +48942,44 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( if (unlikely(PyObject_SetItem(__pyx_v_info, __pyx_n_s_price_series, __pyx_t_2) < 0)) __PYX_ERR(1, 127, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - + /* "talib/_abstract.pxi":126 + * info = _ta_getInputParameterInfo(self.__name, i) + * input_name = info['name'] + * if info['price_series'] is None: # <<<<<<<<<<<<<< + * info['price_series'] = __INPUT_PRICE_SERIES_DEFAULTS[input_name] + * self.__input_names[input_name] = info + */ + } + + /* "talib/_abstract.pxi":128 + * if info['price_series'] is None: + * info['price_series'] = __INPUT_PRICE_SERIES_DEFAULTS[input_name] + * self.__input_names[input_name] = info # <<<<<<<<<<<<<< + * self.__info['input_names'] = self.input_names + * + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely(PyObject_SetItem(__pyx_t_2, __pyx_v_input_name, __pyx_v_info) < 0)) __PYX_ERR(1, 128, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":123 + * + * # inputs (price series names) + * for i in xrange(self.__info.pop('num_inputs')): # <<<<<<<<<<<<<< + * info = _ta_getInputParameterInfo(self.__name, i) + * input_name = info['name'] + */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":129 + * info['price_series'] = __INPUT_PRICE_SERIES_DEFAULTS[input_name] + * self.__input_names[input_name] = info + * self.__info['input_names'] = self.input_names # <<<<<<<<<<<<<< + * + * # optional inputs (function parameters) + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 129, __pyx_L1_error) @@ -32998,6 +48988,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":132 + * + * # optional inputs (function parameters) + * for i in xrange(self.__info.pop('num_opt_inputs')): # <<<<<<<<<<<<<< + * info = _ta_getOptInputParameterInfo(self.__name, i) + * param_name = info['name'] + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 132, __pyx_L1_error) @@ -33064,6 +49061,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":133 + * # optional inputs (function parameters) + * for i in xrange(self.__info.pop('num_opt_inputs')): + * info = _ta_getOptInputParameterInfo(self.__name, i) # <<<<<<<<<<<<<< + * param_name = info['name'] + * self.__opt_inputs[param_name] = info + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ta_getOptInputParameterInfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__name); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 133, __pyx_L1_error) @@ -33118,19 +49122,47 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_XDECREF_SET(__pyx_v_info, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":134 + * for i in xrange(self.__info.pop('num_opt_inputs')): + * info = _ta_getOptInputParameterInfo(self.__name, i) + * param_name = info['name'] # <<<<<<<<<<<<<< + * self.__opt_inputs[param_name] = info + * self.__info['parameters'] = self.parameters + */ __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_info, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_param_name, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":135 + * info = _ta_getOptInputParameterInfo(self.__name, i) + * param_name = info['name'] + * self.__opt_inputs[param_name] = info # <<<<<<<<<<<<<< + * self.__info['parameters'] = self.parameters + * + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (unlikely(PyObject_SetItem(__pyx_t_3, __pyx_v_param_name, __pyx_v_info) < 0)) __PYX_ERR(1, 135, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":132 + * + * # optional inputs (function parameters) + * for i in xrange(self.__info.pop('num_opt_inputs')): # <<<<<<<<<<<<<< + * info = _ta_getOptInputParameterInfo(self.__name, i) + * param_name = info['name'] + */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":136 + * param_name = info['name'] + * self.__opt_inputs[param_name] = info + * self.__info['parameters'] = self.parameters # <<<<<<<<<<<<<< + * + * # outputs + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_parameters); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 136, __pyx_L1_error) @@ -33139,6 +49171,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":139 + * + * # outputs + * self.__info['output_flags'] = OrderedDict() # <<<<<<<<<<<<<< + * for i in xrange(self.__info.pop('num_outputs')): + * info = _ta_getOutputParameterInfo(self.__name, i) + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = NULL; @@ -33162,6 +49201,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":140 + * # outputs + * self.__info['output_flags'] = OrderedDict() + * for i in xrange(self.__info.pop('num_outputs')): # <<<<<<<<<<<<<< + * info = _ta_getOutputParameterInfo(self.__name, i) + * output_name = info['name'] + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 140, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 140, __pyx_L1_error) @@ -33228,6 +49274,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":141 + * self.__info['output_flags'] = OrderedDict() + * for i in xrange(self.__info.pop('num_outputs')): + * info = _ta_getOutputParameterInfo(self.__name, i) # <<<<<<<<<<<<<< + * output_name = info['name'] + * self.__info['output_flags'][output_name] = info['flags'] + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ta_getOutputParameterInfo); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 141, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__name); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 141, __pyx_L1_error) @@ -33282,11 +49335,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_XDECREF_SET(__pyx_v_info, __pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":142 + * for i in xrange(self.__info.pop('num_outputs')): + * info = _ta_getOutputParameterInfo(self.__name, i) + * output_name = info['name'] # <<<<<<<<<<<<<< + * self.__info['output_flags'][output_name] = info['flags'] + * self.__outputs[output_name] = None + */ __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_info, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 142, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_output_name, __pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":143 + * info = _ta_getOutputParameterInfo(self.__name, i) + * output_name = info['name'] + * self.__info['output_flags'][output_name] = info['flags'] # <<<<<<<<<<<<<< + * self.__outputs[output_name] = None + * self.__info['output_names'] = self.output_names + */ __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_info, __pyx_n_s_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 143, __pyx_L1_error) @@ -33298,14 +49365,35 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":144 + * output_name = info['name'] + * self.__info['output_flags'][output_name] = info['flags'] + * self.__outputs[output_name] = None # <<<<<<<<<<<<<< + * self.__info['output_names'] = self.output_names + * + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 144, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely(PyObject_SetItem(__pyx_t_2, __pyx_v_output_name, Py_None) < 0)) __PYX_ERR(1, 144, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":140 + * # outputs + * self.__info['output_flags'] = OrderedDict() + * for i in xrange(self.__info.pop('num_outputs')): # <<<<<<<<<<<<<< + * info = _ta_getOutputParameterInfo(self.__name, i) + * output_name = info['name'] + */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":145 + * self.__info['output_flags'][output_name] = info['flags'] + * self.__outputs[output_name] = None + * self.__info['output_names'] = self.output_names # <<<<<<<<<<<<<< + * + * @property + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 145, __pyx_L1_error) @@ -33314,6 +49402,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":118 + * self.func_object = func_object + * + * def __initialize_function_info(self): # <<<<<<<<<<<<<< + * # function info + * self.__info = _ta_getFuncInfo(self.__name) + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -33338,6 +49433,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__initialize_function_info( return __pyx_r; } +/* "talib/_abstract.pxi":148 + * + * @property + * def info(self): # <<<<<<<<<<<<<< + * """ + * Returns a copy of the function's info dict. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_5info(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -33365,6 +49467,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_4info(CYTHON_UNUSED PyObject int __pyx_clineno = 0; __Pyx_RefNannySetupContext("info", 0); + /* "talib/_abstract.pxi":152 + * Returns a copy of the function's info dict. + * """ + * return self.__info.copy() # <<<<<<<<<<<<<< + * + * @property + */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 152, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -33390,6 +49499,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_4info(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":148 + * + * @property + * def info(self): # <<<<<<<<<<<<<< + * """ + * Returns a copy of the function's info dict. + */ /* function exit code */ __pyx_L1_error:; @@ -33404,6 +49520,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_4info(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_abstract.pxi":155 + * + * @property + * def function_flags(self): # <<<<<<<<<<<<<< + * """ + * Returns any function flags defined for this indicator function. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_7function_flags(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -33430,6 +49553,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_6function_flags(CYTHON_UNUSE int __pyx_clineno = 0; __Pyx_RefNannySetupContext("function_flags", 0); + /* "talib/_abstract.pxi":159 + * Returns any function flags defined for this indicator function. + * """ + * return self.__info['function_flags'] # <<<<<<<<<<<<<< + * + * @property + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -33440,6 +49570,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_6function_flags(CYTHON_UNUSE __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":155 + * + * @property + * def function_flags(self): # <<<<<<<<<<<<<< + * """ + * Returns any function flags defined for this indicator function. + */ /* function exit code */ __pyx_L1_error:; @@ -33453,6 +49590,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_6function_flags(CYTHON_UNUSE return __pyx_r; } +/* "talib/_abstract.pxi":162 + * + * @property + * def output_flags(self): # <<<<<<<<<<<<<< + * """ + * Returns the flags for each output for this indicator function. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_9output_flags(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -33480,6 +49624,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_8output_flags(CYTHON_UNUSED int __pyx_clineno = 0; __Pyx_RefNannySetupContext("output_flags", 0); + /* "talib/_abstract.pxi":166 + * Returns the flags for each output for this indicator function. + * """ + * return self.__info['output_flags'].copy() # <<<<<<<<<<<<<< + * + * def get_input_names(self): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -33508,6 +49659,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_8output_flags(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":162 + * + * @property + * def output_flags(self): # <<<<<<<<<<<<<< + * """ + * Returns the flags for each output for this indicator function. + */ /* function exit code */ __pyx_L1_error:; @@ -33522,6 +49680,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_8output_flags(CYTHON_UNUSED return __pyx_r; } +/* "talib/_abstract.pxi":168 + * return self.__info['output_flags'].copy() + * + * def get_input_names(self): # <<<<<<<<<<<<<< + * """ + * Returns the dict of input price series names that specifies which + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_11get_input_names(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -33553,6 +49718,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_10get_input_names(CYTHON_UNU int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_input_names", 0); + /* "talib/_abstract.pxi":173 + * of the ndarrays in input_arrays will be used to calculate the function. + * """ + * ret = OrderedDict() # <<<<<<<<<<<<<< + * for input_name in self.__input_names: + * ret[input_name] = self.__input_names[input_name]['price_series'] + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 173, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -33573,6 +49745,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_10get_input_names(CYTHON_UNU __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":174 + * """ + * ret = OrderedDict() + * for input_name in self.__input_names: # <<<<<<<<<<<<<< + * ret[input_name] = self.__input_names[input_name]['price_series'] + * return ret + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 174, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { @@ -33618,6 +49797,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_10get_input_names(CYTHON_UNU __Pyx_XDECREF_SET(__pyx_v_input_name, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":175 + * ret = OrderedDict() + * for input_name in self.__input_names: + * ret[input_name] = self.__input_names[input_name]['price_series'] # <<<<<<<<<<<<<< + * return ret + * + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_input_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 175, __pyx_L1_error) @@ -33629,14 +49815,35 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_10get_input_names(CYTHON_UNU if (unlikely(PyObject_SetItem(__pyx_v_ret, __pyx_v_input_name, __pyx_t_1) < 0)) __PYX_ERR(1, 175, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":174 + * """ + * ret = OrderedDict() + * for input_name in self.__input_names: # <<<<<<<<<<<<<< + * ret[input_name] = self.__input_names[input_name]['price_series'] + * return ret + */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":176 + * for input_name in self.__input_names: + * ret[input_name] = self.__input_names[input_name]['price_series'] + * return ret # <<<<<<<<<<<<<< + * + * def set_input_names(self, input_names): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; + /* "talib/_abstract.pxi":168 + * return self.__info['output_flags'].copy() + * + * def get_input_names(self): # <<<<<<<<<<<<<< + * """ + * Returns the dict of input price series names that specifies which + */ /* function exit code */ __pyx_L1_error:; @@ -33653,6 +49860,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_10get_input_names(CYTHON_UNU return __pyx_r; } +/* "talib/_abstract.pxi":178 + * return ret + * + * def set_input_names(self, input_names): # <<<<<<<<<<<<<< + * """ + * Sets the input price series names to use. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_13set_input_names(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -33738,6 +49952,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_12set_input_names(CYTHON_UNU int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_input_names", 0); + /* "talib/_abstract.pxi":182 + * Sets the input price series names to use. + * """ + * for input_name, price_series in input_names.items(): # <<<<<<<<<<<<<< + * self.__input_names[input_name]['price_series'] = price_series + * self.__info['input_names'][input_name] = price_series + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_names, __pyx_n_s_items); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 182, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -33846,6 +50067,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_12set_input_names(CYTHON_UNU __Pyx_XDECREF_SET(__pyx_v_price_series, __pyx_t_6); __pyx_t_6 = 0; + /* "talib/_abstract.pxi":183 + * """ + * for input_name, price_series in input_names.items(): + * self.__input_names[input_name]['price_series'] = price_series # <<<<<<<<<<<<<< + * self.__info['input_names'][input_name] = price_series + * self.__outputs_valid = False + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_input_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 183, __pyx_L1_error) @@ -33854,6 +50082,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_12set_input_names(CYTHON_UNU if (unlikely(PyObject_SetItem(__pyx_t_6, __pyx_n_s_price_series, __pyx_v_price_series) < 0)) __PYX_ERR(1, 183, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + /* "talib/_abstract.pxi":184 + * for input_name, price_series in input_names.items(): + * self.__input_names[input_name]['price_series'] = price_series + * self.__info['input_names'][input_name] = price_series # <<<<<<<<<<<<<< + * self.__outputs_valid = False + * + */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_s_input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 184, __pyx_L1_error) @@ -33862,11 +50097,32 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_12set_input_names(CYTHON_UNU if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_input_name, __pyx_v_price_series) < 0)) __PYX_ERR(1, 184, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":182 + * Sets the input price series names to use. + * """ + * for input_name, price_series in input_names.items(): # <<<<<<<<<<<<<< + * self.__input_names[input_name]['price_series'] = price_series + * self.__info['input_names'][input_name] = price_series + */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":185 + * self.__input_names[input_name]['price_series'] = price_series + * self.__info['input_names'][input_name] = price_series + * self.__outputs_valid = False # <<<<<<<<<<<<<< + * + * input_names = property(get_input_names, set_input_names) + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs_valid, Py_False) < 0) __PYX_ERR(1, 185, __pyx_L1_error) + /* "talib/_abstract.pxi":178 + * return ret + * + * def set_input_names(self, input_names): # <<<<<<<<<<<<<< + * """ + * Sets the input price series names to use. + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -33887,6 +50143,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_12set_input_names(CYTHON_UNU return __pyx_r; } +/* "talib/_abstract.pxi":189 + * input_names = property(get_input_names, set_input_names) + * + * def get_input_arrays(self): # <<<<<<<<<<<<<< + * """ + * Returns a copy of the dict of input arrays in use. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_15get_input_arrays(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -33917,6 +50180,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_14get_input_arrays(CYTHON_UN int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_input_arrays", 0); + /* "talib/_abstract.pxi":193 + * Returns a copy of the dict of input arrays in use. + * """ + * if __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * return self.__input_arrays.clone() + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = (__pyx_t_2 != Py_None); @@ -33928,6 +50198,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_14get_input_arrays(CYTHON_UN goto __pyx_L4_bool_binop_done; } + /* "talib/_abstract.pxi":194 + * """ + * if __POLARS_DATAFRAME is not None \ + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): # <<<<<<<<<<<<<< + * return self.__input_arrays.clone() + * else: + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 194, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 194, __pyx_L1_error) @@ -33939,8 +50216,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_14get_input_arrays(CYTHON_UN __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; + /* "talib/_abstract.pxi":193 + * Returns a copy of the dict of input arrays in use. + * """ + * if __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * return self.__input_arrays.clone() + */ if (__pyx_t_1) { + /* "talib/_abstract.pxi":195 + * if __POLARS_DATAFRAME is not None \ + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * return self.__input_arrays.clone() # <<<<<<<<<<<<<< + * else: + * return self.__input_arrays.copy() + */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -33966,8 +50257,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_14get_input_arrays(CYTHON_UN __pyx_t_5 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":193 + * Returns a copy of the dict of input arrays in use. + * """ + * if __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * return self.__input_arrays.clone() + */ } + /* "talib/_abstract.pxi":197 + * return self.__input_arrays.clone() + * else: + * return self.__input_arrays.copy() # <<<<<<<<<<<<<< + * + * def set_input_arrays(self, input_arrays): + */ /*else*/ { __Pyx_XDECREF(__pyx_r); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 197, __pyx_L1_error) @@ -33995,6 +50300,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_14get_input_arrays(CYTHON_UN goto __pyx_L0; } + /* "talib/_abstract.pxi":189 + * input_names = property(get_input_names, set_input_names) + * + * def get_input_arrays(self): # <<<<<<<<<<<<<< + * """ + * Returns a copy of the dict of input arrays in use. + */ /* function exit code */ __pyx_L1_error:; @@ -34009,6 +50321,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_14get_input_arrays(CYTHON_UN return __pyx_r; } +/* "talib/_abstract.pxi":199 + * return self.__input_arrays.copy() + * + * def set_input_arrays(self, input_arrays): # <<<<<<<<<<<<<< + * """ + * Sets the dict of input_arrays to use. Returns True/False for + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_17set_input_arrays(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -34096,6 +50415,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_input_arrays", 0); + /* "talib/_abstract.pxi":224 + * return False + * """ + * if isinstance(input_arrays, __INPUT_ARRAYS_TYPES): # <<<<<<<<<<<<<< + * missing_keys = [] + * for key in self.__input_price_series_names(): + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INPUT_ARRAYS_TYPES); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_input_arrays, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 224, __pyx_L1_error) @@ -34103,11 +50429,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { + /* "talib/_abstract.pxi":225 + * """ + * if isinstance(input_arrays, __INPUT_ARRAYS_TYPES): + * missing_keys = [] # <<<<<<<<<<<<<< + * for key in self.__input_price_series_names(): + * if __POLARS_DATAFRAME is not None \ + */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_missing_keys = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":226 + * if isinstance(input_arrays, __INPUT_ARRAYS_TYPES): + * missing_keys = [] + * for key in self.__input_price_series_names(): # <<<<<<<<<<<<<< + * if __POLARS_DATAFRAME is not None \ + * and isinstance(input_arrays, __POLARS_DATAFRAME): + */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_price_series_na); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; @@ -34168,6 +50508,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":227 + * missing_keys = [] + * for key in self.__input_price_series_names(): + * if __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(input_arrays, __POLARS_DATAFRAME): + * missing = key not in input_arrays.columns + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 227, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); @@ -34179,6 +50526,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN goto __pyx_L7_bool_binop_done; } + /* "talib/_abstract.pxi":228 + * for key in self.__input_price_series_names(): + * if __POLARS_DATAFRAME is not None \ + * and isinstance(input_arrays, __POLARS_DATAFRAME): # <<<<<<<<<<<<<< + * missing = key not in input_arrays.columns + * else: + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyObject_IsInstance(__pyx_v_input_arrays, __pyx_t_1); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 228, __pyx_L1_error) @@ -34187,8 +50541,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN __pyx_t_3 = __pyx_t_2; __pyx_L7_bool_binop_done:; + /* "talib/_abstract.pxi":227 + * missing_keys = [] + * for key in self.__input_price_series_names(): + * if __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(input_arrays, __POLARS_DATAFRAME): + * missing = key not in input_arrays.columns + */ if (__pyx_t_3) { + /* "talib/_abstract.pxi":229 + * if __POLARS_DATAFRAME is not None \ + * and isinstance(input_arrays, __POLARS_DATAFRAME): + * missing = key not in input_arrays.columns # <<<<<<<<<<<<<< + * else: + * missing = key not in input_arrays + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_arrays, __pyx_n_s_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(1, 229, __pyx_L1_error) @@ -34198,9 +50566,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN __Pyx_XDECREF_SET(__pyx_v_missing, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":227 + * missing_keys = [] + * for key in self.__input_price_series_names(): + * if __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(input_arrays, __POLARS_DATAFRAME): + * missing = key not in input_arrays.columns + */ goto __pyx_L6; } + /* "talib/_abstract.pxi":231 + * missing = key not in input_arrays.columns + * else: + * missing = key not in input_arrays # <<<<<<<<<<<<<< + * if missing: + * missing_keys.append(key) + */ /*else*/ { __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_v_input_arrays, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(1, 231, __pyx_L1_error) __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 231, __pyx_L1_error) @@ -34210,33 +50592,110 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN } __pyx_L6:; + /* "talib/_abstract.pxi":232 + * else: + * missing = key not in input_arrays + * if missing: # <<<<<<<<<<<<<< + * missing_keys.append(key) + * if len(missing_keys) == 0: + */ __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_missing); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(1, 232, __pyx_L1_error) if (__pyx_t_3) { + /* "talib/_abstract.pxi":233 + * missing = key not in input_arrays + * if missing: + * missing_keys.append(key) # <<<<<<<<<<<<<< + * if len(missing_keys) == 0: + * self.__input_arrays = input_arrays + */ __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_missing_keys, __pyx_v_key); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 233, __pyx_L1_error) + /* "talib/_abstract.pxi":232 + * else: + * missing = key not in input_arrays + * if missing: # <<<<<<<<<<<<<< + * missing_keys.append(key) + * if len(missing_keys) == 0: + */ } + /* "talib/_abstract.pxi":226 + * if isinstance(input_arrays, __INPUT_ARRAYS_TYPES): + * missing_keys = [] + * for key in self.__input_price_series_names(): # <<<<<<<<<<<<<< + * if __POLARS_DATAFRAME is not None \ + * and isinstance(input_arrays, __POLARS_DATAFRAME): + */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":234 + * if missing: + * missing_keys.append(key) + * if len(missing_keys) == 0: # <<<<<<<<<<<<<< + * self.__input_arrays = input_arrays + * self.__outputs_valid = False + */ __pyx_t_6 = PyList_GET_SIZE(__pyx_v_missing_keys); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(1, 234, __pyx_L1_error) __pyx_t_3 = ((__pyx_t_6 == 0) != 0); if (likely(__pyx_t_3)) { + /* "talib/_abstract.pxi":235 + * missing_keys.append(key) + * if len(missing_keys) == 0: + * self.__input_arrays = input_arrays # <<<<<<<<<<<<<< + * self.__outputs_valid = False + * return True + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays, __pyx_v_input_arrays) < 0) __PYX_ERR(1, 235, __pyx_L1_error) + /* "talib/_abstract.pxi":236 + * if len(missing_keys) == 0: + * self.__input_arrays = input_arrays + * self.__outputs_valid = False # <<<<<<<<<<<<<< + * return True + * else: + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs_valid, Py_False) < 0) __PYX_ERR(1, 236, __pyx_L1_error) + /* "talib/_abstract.pxi":237 + * self.__input_arrays = input_arrays + * self.__outputs_valid = False + * return True # <<<<<<<<<<<<<< + * else: + * raise Exception('input_arrays parameter missing required data '\ + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_True); __pyx_r = Py_True; goto __pyx_L0; - } - + /* "talib/_abstract.pxi":234 + * if missing: + * missing_keys.append(key) + * if len(missing_keys) == 0: # <<<<<<<<<<<<<< + * self.__input_arrays = input_arrays + * self.__outputs_valid = False + */ + } + + /* "talib/_abstract.pxi":239 + * return True + * else: + * raise Exception('input_arrays parameter missing required data '\ # <<<<<<<<<<<<<< + * 'key%s: %s' % ('s' if len(missing_keys) > 1 \ + * else '', + */ /*else*/ { + /* "talib/_abstract.pxi":240 + * else: + * raise Exception('input_arrays parameter missing required data '\ + * 'key%s: %s' % ('s' if len(missing_keys) > 1 \ # <<<<<<<<<<<<<< + * else '', + * ', '.join(missing_keys))) + */ __pyx_t_6 = PyList_GET_SIZE(__pyx_v_missing_keys); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(1, 240, __pyx_L1_error) if (((__pyx_t_6 > 1) != 0)) { __Pyx_INCREF(__pyx_n_s_s); @@ -34246,9 +50705,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN __pyx_t_4 = __pyx_kp_s__5; } + /* "talib/_abstract.pxi":242 + * 'key%s: %s' % ('s' if len(missing_keys) > 1 \ + * else '', + * ', '.join(missing_keys))) # <<<<<<<<<<<<<< + * return False + * + */ __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__6, __pyx_v_missing_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); + /* "talib/_abstract.pxi":240 + * else: + * raise Exception('input_arrays parameter missing required data '\ + * 'key%s: %s' % ('s' if len(missing_keys) > 1 \ # <<<<<<<<<<<<<< + * else '', + * ', '.join(missing_keys))) + */ __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); @@ -34261,6 +50734,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":239 + * return True + * else: + * raise Exception('input_arrays parameter missing required data '\ # <<<<<<<<<<<<<< + * 'key%s: %s' % ('s' if len(missing_keys) > 1 \ + * else '', + */ __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -34269,13 +50749,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN __PYX_ERR(1, 239, __pyx_L1_error) } + /* "talib/_abstract.pxi":224 + * return False + * """ + * if isinstance(input_arrays, __INPUT_ARRAYS_TYPES): # <<<<<<<<<<<<<< + * missing_keys = [] + * for key in self.__input_price_series_names(): + */ } + /* "talib/_abstract.pxi":243 + * else '', + * ', '.join(missing_keys))) + * return False # <<<<<<<<<<<<<< + * + * input_arrays = property(get_input_arrays, set_input_arrays) + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; goto __pyx_L0; + /* "talib/_abstract.pxi":199 + * return self.__input_arrays.copy() + * + * def set_input_arrays(self, input_arrays): # <<<<<<<<<<<<<< + * """ + * Sets the dict of input_arrays to use. Returns True/False for + */ /* function exit code */ __pyx_L1_error:; @@ -34293,6 +50794,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(CYTHON_UN return __pyx_r; } +/* "talib/_abstract.pxi":247 + * input_arrays = property(get_input_arrays, set_input_arrays) + * + * def get_parameters(self): # <<<<<<<<<<<<<< + * """ + * Returns the function's optional parameters and their default values. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_19get_parameters(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -34325,6 +50833,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_18get_parameters(CYTHON_UNUS int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_parameters", 0); + /* "talib/_abstract.pxi":251 + * Returns the function's optional parameters and their default values. + * """ + * ret = OrderedDict() # <<<<<<<<<<<<<< + * for opt_input in self.__opt_inputs: + * ret[opt_input] = self.__get_opt_input_value(opt_input) + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -34345,6 +50860,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_18get_parameters(CYTHON_UNUS __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":252 + * """ + * ret = OrderedDict() + * for opt_input in self.__opt_inputs: # <<<<<<<<<<<<<< + * ret[opt_input] = self.__get_opt_input_value(opt_input) + * return ret + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { @@ -34390,6 +50912,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_18get_parameters(CYTHON_UNUS __Pyx_XDECREF_SET(__pyx_v_opt_input, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":253 + * ret = OrderedDict() + * for opt_input in self.__opt_inputs: + * ret[opt_input] = self.__get_opt_input_value(opt_input) # <<<<<<<<<<<<<< + * return ret + * + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__get_opt_input_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = NULL; @@ -34410,14 +50939,35 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_18get_parameters(CYTHON_UNUS if (unlikely(PyObject_SetItem(__pyx_v_ret, __pyx_v_opt_input, __pyx_t_1) < 0)) __PYX_ERR(1, 253, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":252 + * """ + * ret = OrderedDict() + * for opt_input in self.__opt_inputs: # <<<<<<<<<<<<<< + * ret[opt_input] = self.__get_opt_input_value(opt_input) + * return ret + */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":254 + * for opt_input in self.__opt_inputs: + * ret[opt_input] = self.__get_opt_input_value(opt_input) + * return ret # <<<<<<<<<<<<<< + * + * def set_parameters(self, parameters=None, **kwargs): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; + /* "talib/_abstract.pxi":247 + * input_arrays = property(get_input_arrays, set_input_arrays) + * + * def get_parameters(self): # <<<<<<<<<<<<<< + * """ + * Returns the function's optional parameters and their default values. + */ /* function exit code */ __pyx_L1_error:; @@ -34435,6 +50985,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_18get_parameters(CYTHON_UNUS return __pyx_r; } +/* "talib/_abstract.pxi":256 + * return ret + * + * def set_parameters(self, parameters=None, **kwargs): # <<<<<<<<<<<<<< + * """ + * Sets the function parameter values. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_21set_parameters(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -34532,6 +51089,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYTHON_UNUS __Pyx_RefNannySetupContext("set_parameters", 0); __Pyx_INCREF(__pyx_v_parameters); + /* "talib/_abstract.pxi":260 + * Sets the function parameter values. + * """ + * parameters = parameters or {} # <<<<<<<<<<<<<< + * parameters.update(kwargs) + * for param, value in parameters.items(): + */ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_parameters); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 260, __pyx_L1_error) if (!__pyx_t_2) { } else { @@ -34548,6 +51112,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYTHON_UNUS __Pyx_DECREF_SET(__pyx_v_parameters, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":261 + * """ + * parameters = parameters or {} + * parameters.update(kwargs) # <<<<<<<<<<<<<< + * for param, value in parameters.items(): + * if self.__check_opt_input_value(param, value): + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_parameters, __pyx_n_s_update); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 261, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; @@ -34567,6 +51138,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYTHON_UNUS __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":262 + * parameters = parameters or {} + * parameters.update(kwargs) + * for param, value in parameters.items(): # <<<<<<<<<<<<<< + * if self.__check_opt_input_value(param, value): + * self.__opt_inputs[param]['value'] = value + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_parameters, __pyx_n_s_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; @@ -34675,6 +51253,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYTHON_UNUS __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_7); __pyx_t_7 = 0; + /* "talib/_abstract.pxi":263 + * parameters.update(kwargs) + * for param, value in parameters.items(): + * if self.__check_opt_input_value(param, value): # <<<<<<<<<<<<<< + * self.__opt_inputs[param]['value'] = value + * self.__outputs_valid = False + */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__check_opt_input_value); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 263, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = NULL; @@ -34726,6 +51311,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYTHON_UNUS __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { + /* "talib/_abstract.pxi":264 + * for param, value in parameters.items(): + * if self.__check_opt_input_value(param, value): + * self.__opt_inputs[param]['value'] = value # <<<<<<<<<<<<<< + * self.__outputs_valid = False + * self.__info['parameters'] = self.parameters + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 264, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_param); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 264, __pyx_L1_error) @@ -34734,13 +51326,41 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYTHON_UNUS if (unlikely(PyObject_SetItem(__pyx_t_7, __pyx_n_s_value, __pyx_v_value) < 0)) __PYX_ERR(1, 264, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - + /* "talib/_abstract.pxi":263 + * parameters.update(kwargs) + * for param, value in parameters.items(): + * if self.__check_opt_input_value(param, value): # <<<<<<<<<<<<<< + * self.__opt_inputs[param]['value'] = value + * self.__outputs_valid = False + */ + } + + /* "talib/_abstract.pxi":262 + * parameters = parameters or {} + * parameters.update(kwargs) + * for param, value in parameters.items(): # <<<<<<<<<<<<<< + * if self.__check_opt_input_value(param, value): + * self.__opt_inputs[param]['value'] = value + */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":265 + * if self.__check_opt_input_value(param, value): + * self.__opt_inputs[param]['value'] = value + * self.__outputs_valid = False # <<<<<<<<<<<<<< + * self.__info['parameters'] = self.parameters + * + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs_valid, Py_False) < 0) __PYX_ERR(1, 265, __pyx_L1_error) + /* "talib/_abstract.pxi":266 + * self.__opt_inputs[param]['value'] = value + * self.__outputs_valid = False + * self.__info['parameters'] = self.parameters # <<<<<<<<<<<<<< + * + * parameters = property(get_parameters, set_parameters) + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_parameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 266, __pyx_L1_error) @@ -34749,6 +51369,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYTHON_UNUS __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":256 + * return ret + * + * def set_parameters(self, parameters=None, **kwargs): # <<<<<<<<<<<<<< + * """ + * Sets the function parameter values. + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -34770,6 +51397,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYTHON_UNUS return __pyx_r; } +/* "talib/_abstract.pxi":270 + * parameters = property(get_parameters, set_parameters) + * + * def set_function_args(self, *args, **kwargs): # <<<<<<<<<<<<<< + * """ + * optional args:[input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs] + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_23set_function_args(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -34873,8 +51507,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_function_args", 0); + /* "talib/_abstract.pxi":274 + * optional args:[input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs] + * """ + * update_info = False # <<<<<<<<<<<<<< + * + * for key in kwargs: + */ __pyx_v_update_info = 0; + /* "talib/_abstract.pxi":276 + * update_info = False + * + * for key in kwargs: # <<<<<<<<<<<<<< + * if key in self.__opt_inputs: + * value = kwargs[key] + */ __pyx_t_2 = 0; __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_kwargs, 1, ((PyObject *)NULL), (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); @@ -34889,6 +51537,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":277 + * + * for key in kwargs: + * if key in self.__opt_inputs: # <<<<<<<<<<<<<< + * value = kwargs[key] + * if self.__check_opt_input_value(key, value): + */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 277, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_t_5, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(1, 277, __pyx_L1_error) @@ -34896,11 +51551,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __pyx_t_8 = (__pyx_t_7 != 0); if (__pyx_t_8) { + /* "talib/_abstract.pxi":278 + * for key in kwargs: + * if key in self.__opt_inputs: + * value = kwargs[key] # <<<<<<<<<<<<<< + * if self.__check_opt_input_value(key, value): + * self.__opt_inputs[key]['value'] = kwargs[key] + */ __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_kwargs, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 278, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":279 + * if key in self.__opt_inputs: + * value = kwargs[key] + * if self.__check_opt_input_value(key, value): # <<<<<<<<<<<<<< + * self.__opt_inputs[key]['value'] = kwargs[key] + * update_info = True + */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__check_opt_input_value); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = NULL; @@ -34952,6 +51621,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_8) { + /* "talib/_abstract.pxi":280 + * value = kwargs[key] + * if self.__check_opt_input_value(key, value): + * self.__opt_inputs[key]['value'] = kwargs[key] # <<<<<<<<<<<<<< + * update_info = True + * elif key in self.__input_names: + */ __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_kwargs, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 280, __pyx_L1_error) @@ -34963,13 +51639,41 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":281 + * if self.__check_opt_input_value(key, value): + * self.__opt_inputs[key]['value'] = kwargs[key] + * update_info = True # <<<<<<<<<<<<<< + * elif key in self.__input_names: + * self.__input_names[key]['price_series'] = kwargs[key] + */ __pyx_v_update_info = 1; - } - + /* "talib/_abstract.pxi":279 + * if key in self.__opt_inputs: + * value = kwargs[key] + * if self.__check_opt_input_value(key, value): # <<<<<<<<<<<<<< + * self.__opt_inputs[key]['value'] = kwargs[key] + * update_info = True + */ + } + + /* "talib/_abstract.pxi":277 + * + * for key in kwargs: + * if key in self.__opt_inputs: # <<<<<<<<<<<<<< + * value = kwargs[key] + * if self.__check_opt_input_value(key, value): + */ goto __pyx_L5; } + /* "talib/_abstract.pxi":282 + * self.__opt_inputs[key]['value'] = kwargs[key] + * update_info = True + * elif key in self.__input_names: # <<<<<<<<<<<<<< + * self.__input_names[key]['price_series'] = kwargs[key] + * self.__info['input_names'][key] = kwargs[key] + */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_t_5, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(1, 282, __pyx_L1_error) @@ -34977,6 +51681,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __pyx_t_7 = (__pyx_t_8 != 0); if (__pyx_t_7) { + /* "talib/_abstract.pxi":283 + * update_info = True + * elif key in self.__input_names: + * self.__input_names[key]['price_series'] = kwargs[key] # <<<<<<<<<<<<<< + * self.__info['input_names'][key] = kwargs[key] + * + */ __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_kwargs, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 283, __pyx_L1_error) @@ -34988,6 +51699,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":284 + * elif key in self.__input_names: + * self.__input_names[key]['price_series'] = kwargs[key] + * self.__info['input_names'][key] = kwargs[key] # <<<<<<<<<<<<<< + * + * if args: + */ __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_kwargs, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 284, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 284, __pyx_L1_error) @@ -34999,17 +51717,45 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":282 + * self.__opt_inputs[key]['value'] = kwargs[key] + * update_info = True + * elif key in self.__input_names: # <<<<<<<<<<<<<< + * self.__input_names[key]['price_series'] = kwargs[key] + * self.__info['input_names'][key] = kwargs[key] + */ } __pyx_L5:; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":286 + * self.__info['input_names'][key] = kwargs[key] + * + * if args: # <<<<<<<<<<<<<< + * skip_first = 0 + * if self.set_input_arrays(args[0]): + */ __pyx_t_7 = (PyTuple_GET_SIZE(__pyx_v_args) != 0); if (__pyx_t_7) { + /* "talib/_abstract.pxi":287 + * + * if args: + * skip_first = 0 # <<<<<<<<<<<<<< + * if self.set_input_arrays(args[0]): + * skip_first = 1 + */ __Pyx_INCREF(__pyx_int_0); __pyx_v_skip_first = __pyx_int_0; + /* "talib/_abstract.pxi":288 + * if args: + * skip_first = 0 + * if self.set_input_arrays(args[0]): # <<<<<<<<<<<<<< + * skip_first = 1 + * if len(args) > skip_first: + */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_set_input_arrays); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 288, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_11 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 288, __pyx_L1_error) @@ -35034,11 +51780,32 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_7) { + /* "talib/_abstract.pxi":289 + * skip_first = 0 + * if self.set_input_arrays(args[0]): + * skip_first = 1 # <<<<<<<<<<<<<< + * if len(args) > skip_first: + * for i, param_name in enumerate(self.__opt_inputs): + */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_skip_first, __pyx_int_1); - } - + /* "talib/_abstract.pxi":288 + * if args: + * skip_first = 0 + * if self.set_input_arrays(args[0]): # <<<<<<<<<<<<<< + * skip_first = 1 + * if len(args) > skip_first: + */ + } + + /* "talib/_abstract.pxi":290 + * if self.set_input_arrays(args[0]): + * skip_first = 1 + * if len(args) > skip_first: # <<<<<<<<<<<<<< + * for i, param_name in enumerate(self.__opt_inputs): + * i += skip_first + */ __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 290, __pyx_L1_error) __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -35048,6 +51815,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { + /* "talib/_abstract.pxi":291 + * skip_first = 1 + * if len(args) > skip_first: + * for i, param_name in enumerate(self.__opt_inputs): # <<<<<<<<<<<<<< + * i += skip_first + * if i < len(args): + */ __Pyx_INCREF(__pyx_int_0); __pyx_t_5 = __pyx_int_0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 291, __pyx_L1_error) @@ -35102,11 +51876,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __pyx_t_5 = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":292 + * if len(args) > skip_first: + * for i, param_name in enumerate(self.__opt_inputs): + * i += skip_first # <<<<<<<<<<<<<< + * if i < len(args): + * value = args[i] + */ __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_i, __pyx_v_skip_first); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":293 + * for i, param_name in enumerate(self.__opt_inputs): + * i += skip_first + * if i < len(args): # <<<<<<<<<<<<<< + * value = args[i] + * if self.__check_opt_input_value(param_name, value): + */ __pyx_t_2 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 293, __pyx_L1_error) __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -35116,11 +51904,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_7) { + /* "talib/_abstract.pxi":294 + * i += skip_first + * if i < len(args): + * value = args[i] # <<<<<<<<<<<<<< + * if self.__check_opt_input_value(param_name, value): + * self.__opt_inputs[param_name]['value'] = value + */ __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_args, __pyx_v_i); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_9); __pyx_t_9 = 0; + /* "talib/_abstract.pxi":295 + * if i < len(args): + * value = args[i] + * if self.__check_opt_input_value(param_name, value): # <<<<<<<<<<<<<< + * self.__opt_inputs[param_name]['value'] = value + * update_info = True + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__check_opt_input_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 295, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = NULL; @@ -35172,6 +51974,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_7) { + /* "talib/_abstract.pxi":296 + * value = args[i] + * if self.__check_opt_input_value(param_name, value): + * self.__opt_inputs[param_name]['value'] = value # <<<<<<<<<<<<<< + * update_info = True + * + */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 296, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_9, __pyx_v_param_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 296, __pyx_L1_error) @@ -35180,20 +51989,69 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_value, __pyx_v_value) < 0)) __PYX_ERR(1, 296, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":297 + * if self.__check_opt_input_value(param_name, value): + * self.__opt_inputs[param_name]['value'] = value + * update_info = True # <<<<<<<<<<<<<< + * + * if args or kwargs: + */ __pyx_v_update_info = 1; + /* "talib/_abstract.pxi":295 + * if i < len(args): + * value = args[i] + * if self.__check_opt_input_value(param_name, value): # <<<<<<<<<<<<<< + * self.__opt_inputs[param_name]['value'] = value + * update_info = True + */ } + /* "talib/_abstract.pxi":293 + * for i, param_name in enumerate(self.__opt_inputs): + * i += skip_first + * if i < len(args): # <<<<<<<<<<<<<< + * value = args[i] + * if self.__check_opt_input_value(param_name, value): + */ } + /* "talib/_abstract.pxi":291 + * skip_first = 1 + * if len(args) > skip_first: + * for i, param_name in enumerate(self.__opt_inputs): # <<<<<<<<<<<<<< + * i += skip_first + * if i < len(args): + */ } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - + /* "talib/_abstract.pxi":290 + * if self.set_input_arrays(args[0]): + * skip_first = 1 + * if len(args) > skip_first: # <<<<<<<<<<<<<< + * for i, param_name in enumerate(self.__opt_inputs): + * i += skip_first + */ + } + + /* "talib/_abstract.pxi":286 + * self.__info['input_names'][key] = kwargs[key] + * + * if args: # <<<<<<<<<<<<<< + * skip_first = 0 + * if self.set_input_arrays(args[0]): + */ } + /* "talib/_abstract.pxi":299 + * update_info = True + * + * if args or kwargs: # <<<<<<<<<<<<<< + * if update_info: + * self.__info['parameters'] = self.parameters + */ __pyx_t_8 = (PyTuple_GET_SIZE(__pyx_v_args) != 0); if (!__pyx_t_8) { } else { @@ -35205,9 +52063,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __pyx_L15_bool_binop_done:; if (__pyx_t_7) { + /* "talib/_abstract.pxi":300 + * + * if args or kwargs: + * if update_info: # <<<<<<<<<<<<<< + * self.__info['parameters'] = self.parameters + * self.__outputs_valid = False + */ __pyx_t_7 = (__pyx_v_update_info != 0); if (__pyx_t_7) { + /* "talib/_abstract.pxi":301 + * if args or kwargs: + * if update_info: + * self.__info['parameters'] = self.parameters # <<<<<<<<<<<<<< + * self.__outputs_valid = False + * + */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_parameters); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 301, __pyx_L1_error) @@ -35216,12 +52088,40 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - + /* "talib/_abstract.pxi":300 + * + * if args or kwargs: + * if update_info: # <<<<<<<<<<<<<< + * self.__info['parameters'] = self.parameters + * self.__outputs_valid = False + */ + } + + /* "talib/_abstract.pxi":302 + * if update_info: + * self.__info['parameters'] = self.parameters + * self.__outputs_valid = False # <<<<<<<<<<<<<< + * + * @property + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs_valid, Py_False) < 0) __PYX_ERR(1, 302, __pyx_L1_error) + /* "talib/_abstract.pxi":299 + * update_info = True + * + * if args or kwargs: # <<<<<<<<<<<<<< + * if update_info: + * self.__info['parameters'] = self.parameters + */ } + /* "talib/_abstract.pxi":270 + * parameters = property(get_parameters, set_parameters) + * + * def set_function_args(self, *args, **kwargs): # <<<<<<<<<<<<<< + * """ + * optional args:[input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs] + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -35246,6 +52146,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(CYTHON_U return __pyx_r; } +/* "talib/_abstract.pxi":305 + * + * @property + * def lookback(self): # <<<<<<<<<<<<<< + * """ + * Returns the lookback window size for the function with the parameter + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_25lookback(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -35288,12 +52195,26 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UNUSED PyO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("lookback", 0); + /* "talib/_abstract.pxi":311 + * """ + * cdef lib.TA_ParamHolder *holder + * holder = __ta_paramHolderAlloc(self.__name) # <<<<<<<<<<<<<< + * for i, opt_input in enumerate(self.__opt_inputs): + * value = self.__get_opt_input_value(opt_input) + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__name); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_AsWritableString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(1, 311, __pyx_L1_error) __pyx_v_holder = __pyx_f_5talib_7_ta_lib___ta_paramHolderAlloc(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":312 + * cdef lib.TA_ParamHolder *holder + * holder = __ta_paramHolderAlloc(self.__name) + * for i, opt_input in enumerate(self.__opt_inputs): # <<<<<<<<<<<<<< + * value = self.__get_opt_input_value(opt_input) + * type_ = self.__opt_inputs[opt_input]['type'] + */ __Pyx_INCREF(__pyx_int_0); __pyx_t_1 = __pyx_int_0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 312, __pyx_L1_error) @@ -35348,6 +52269,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UNUSED PyO __pyx_t_1 = __pyx_t_3; __pyx_t_3 = 0; + /* "talib/_abstract.pxi":313 + * holder = __ta_paramHolderAlloc(self.__name) + * for i, opt_input in enumerate(self.__opt_inputs): + * value = self.__get_opt_input_value(opt_input) # <<<<<<<<<<<<<< + * type_ = self.__opt_inputs[opt_input]['type'] + * if type_ == lib.TA_OptInput_RealRange or type_ == lib.TA_OptInput_RealList: + */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__get_opt_input_value); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = NULL; @@ -35368,6 +52296,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":314 + * for i, opt_input in enumerate(self.__opt_inputs): + * value = self.__get_opt_input_value(opt_input) + * type_ = self.__opt_inputs[opt_input]['type'] # <<<<<<<<<<<<<< + * if type_ == lib.TA_OptInput_RealRange or type_ == lib.TA_OptInput_RealList: + * __ta_setOptInputParamReal(holder, i, value) + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_opt_input); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 314, __pyx_L1_error) @@ -35379,6 +52314,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_type_, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":315 + * value = self.__get_opt_input_value(opt_input) + * type_ = self.__opt_inputs[opt_input]['type'] + * if type_ == lib.TA_OptInput_RealRange or type_ == lib.TA_OptInput_RealList: # <<<<<<<<<<<<<< + * __ta_setOptInputParamReal(holder, i, value) + * elif type_ == lib.TA_OptInput_IntegerRange or type_ == lib.TA_OptInput_IntegerList: + */ __pyx_t_3 = __Pyx_PyInt_From_TA_OptInputParameterType(TA_OptInput_RealRange); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = PyObject_RichCompare(__pyx_v_type_, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 315, __pyx_L1_error) @@ -35400,13 +52342,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UNUSED PyO __pyx_L6_bool_binop_done:; if (__pyx_t_9) { + /* "talib/_abstract.pxi":316 + * type_ = self.__opt_inputs[opt_input]['type'] + * if type_ == lib.TA_OptInput_RealRange or type_ == lib.TA_OptInput_RealList: + * __ta_setOptInputParamReal(holder, i, value) # <<<<<<<<<<<<<< + * elif type_ == lib.TA_OptInput_IntegerRange or type_ == lib.TA_OptInput_IntegerList: + * __ta_setOptInputParamInteger(holder, i, value) + */ __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_i); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 316, __pyx_L1_error) __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 316, __pyx_L1_error) (void)(__pyx_f_5talib_7_ta_lib___ta_setOptInputParamReal(__pyx_v_holder, __pyx_t_11, __pyx_t_12)); + /* "talib/_abstract.pxi":315 + * value = self.__get_opt_input_value(opt_input) + * type_ = self.__opt_inputs[opt_input]['type'] + * if type_ == lib.TA_OptInput_RealRange or type_ == lib.TA_OptInput_RealList: # <<<<<<<<<<<<<< + * __ta_setOptInputParamReal(holder, i, value) + * elif type_ == lib.TA_OptInput_IntegerRange or type_ == lib.TA_OptInput_IntegerList: + */ goto __pyx_L5; } + /* "talib/_abstract.pxi":317 + * if type_ == lib.TA_OptInput_RealRange or type_ == lib.TA_OptInput_RealList: + * __ta_setOptInputParamReal(holder, i, value) + * elif type_ == lib.TA_OptInput_IntegerRange or type_ == lib.TA_OptInput_IntegerList: # <<<<<<<<<<<<<< + * __ta_setOptInputParamInteger(holder, i, value) + * + */ __pyx_t_3 = __Pyx_PyInt_From_TA_OptInputParameterType(TA_OptInput_IntegerRange); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = PyObject_RichCompare(__pyx_v_type_, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 317, __pyx_L1_error) @@ -35428,21 +52391,63 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UNUSED PyO __pyx_L8_bool_binop_done:; if (__pyx_t_9) { + /* "talib/_abstract.pxi":318 + * __ta_setOptInputParamReal(holder, i, value) + * elif type_ == lib.TA_OptInput_IntegerRange or type_ == lib.TA_OptInput_IntegerList: + * __ta_setOptInputParamInteger(holder, i, value) # <<<<<<<<<<<<<< + * + * lookback = __ta_getLookback(holder) + */ __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_v_i); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 318, __pyx_L1_error) __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 318, __pyx_L1_error) (void)(__pyx_f_5talib_7_ta_lib___ta_setOptInputParamInteger(__pyx_v_holder, __pyx_t_12, __pyx_t_11)); + /* "talib/_abstract.pxi":317 + * if type_ == lib.TA_OptInput_RealRange or type_ == lib.TA_OptInput_RealList: + * __ta_setOptInputParamReal(holder, i, value) + * elif type_ == lib.TA_OptInput_IntegerRange or type_ == lib.TA_OptInput_IntegerList: # <<<<<<<<<<<<<< + * __ta_setOptInputParamInteger(holder, i, value) + * + */ } __pyx_L5:; + /* "talib/_abstract.pxi":312 + * cdef lib.TA_ParamHolder *holder + * holder = __ta_paramHolderAlloc(self.__name) + * for i, opt_input in enumerate(self.__opt_inputs): # <<<<<<<<<<<<<< + * value = self.__get_opt_input_value(opt_input) + * type_ = self.__opt_inputs[opt_input]['type'] + */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":320 + * __ta_setOptInputParamInteger(holder, i, value) + * + * lookback = __ta_getLookback(holder) # <<<<<<<<<<<<<< + * __ta_paramHolderFree(holder) + * return lookback + */ __pyx_v_lookback = __pyx_f_5talib_7_ta_lib___ta_getLookback(__pyx_v_holder); + /* "talib/_abstract.pxi":321 + * + * lookback = __ta_getLookback(holder) + * __ta_paramHolderFree(holder) # <<<<<<<<<<<<<< + * return lookback + * + */ (void)(__pyx_f_5talib_7_ta_lib___ta_paramHolderFree(__pyx_v_holder)); + /* "talib/_abstract.pxi":322 + * lookback = __ta_getLookback(holder) + * __ta_paramHolderFree(holder) + * return lookback # <<<<<<<<<<<<<< + * + * @property + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_lookback); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -35450,6 +52455,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UNUSED PyO __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":305 + * + * @property + * def lookback(self): # <<<<<<<<<<<<<< + * """ + * Returns the lookback window size for the function with the parameter + */ /* function exit code */ __pyx_L1_error:; @@ -35470,6 +52482,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_abstract.pxi":325 + * + * @property + * def output_names(self): # <<<<<<<<<<<<<< + * """ + * Returns a list of the output names returned by this function. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_27output_names(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -35500,6 +52519,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_26output_names(CYTHON_UNUSED int __pyx_clineno = 0; __Pyx_RefNannySetupContext("output_names", 0); + /* "talib/_abstract.pxi":329 + * Returns a list of the output names returned by this function. + * """ + * ret = self.__outputs.keys() # <<<<<<<<<<<<<< + * if not isinstance(ret, list): + * ret = list(ret) + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 329, __pyx_L1_error) @@ -35523,22 +52549,57 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_26output_names(CYTHON_UNUSED __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":330 + * """ + * ret = self.__outputs.keys() + * if not isinstance(ret, list): # <<<<<<<<<<<<<< + * ret = list(ret) + * return ret + */ __pyx_t_4 = PyList_Check(__pyx_v_ret); __pyx_t_5 = ((!(__pyx_t_4 != 0)) != 0); if (__pyx_t_5) { + /* "talib/_abstract.pxi":331 + * ret = self.__outputs.keys() + * if not isinstance(ret, list): + * ret = list(ret) # <<<<<<<<<<<<<< + * return ret + * + */ __pyx_t_1 = PySequence_List(__pyx_v_ret); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 331, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_ret, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":330 + * """ + * ret = self.__outputs.keys() + * if not isinstance(ret, list): # <<<<<<<<<<<<<< + * ret = list(ret) + * return ret + */ } + /* "talib/_abstract.pxi":332 + * if not isinstance(ret, list): + * ret = list(ret) + * return ret # <<<<<<<<<<<<<< + * + * @property + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; + /* "talib/_abstract.pxi":325 + * + * @property + * def output_names(self): # <<<<<<<<<<<<<< + * """ + * Returns a list of the output names returned by this function. + */ /* function exit code */ __pyx_L1_error:; @@ -35554,6 +52615,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_26output_names(CYTHON_UNUSED return __pyx_r; } +/* "talib/_abstract.pxi":335 + * + * @property + * def outputs(self): # <<<<<<<<<<<<<< + * """ + * Returns the TA function values for the currently set input_arrays and + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_29outputs(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -35588,6 +52656,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb int __pyx_clineno = 0; __Pyx_RefNannySetupContext("outputs", 0); + /* "talib/_abstract.pxi":341 + * or a list of ndarrays for more than one output. + * """ + * if not self.__outputs_valid: # <<<<<<<<<<<<<< + * self.__call_function() + * ret = self.__outputs.values() + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs_valid); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 341, __pyx_L1_error) @@ -35595,6 +52670,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb __pyx_t_3 = ((!__pyx_t_2) != 0); if (__pyx_t_3) { + /* "talib/_abstract.pxi":342 + * """ + * if not self.__outputs_valid: + * self.__call_function() # <<<<<<<<<<<<<< + * ret = self.__outputs.values() + * if not isinstance(ret, list): + */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__call_function); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 342, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; @@ -35614,8 +52696,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":341 + * or a list of ndarrays for more than one output. + * """ + * if not self.__outputs_valid: # <<<<<<<<<<<<<< + * self.__call_function() + * ret = self.__outputs.values() + */ } + /* "talib/_abstract.pxi":343 + * if not self.__outputs_valid: + * self.__call_function() + * ret = self.__outputs.values() # <<<<<<<<<<<<<< + * if not isinstance(ret, list): + * ret = list(ret) + */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 343, __pyx_L1_error) @@ -35639,17 +52735,45 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":344 + * self.__call_function() + * ret = self.__outputs.values() + * if not isinstance(ret, list): # <<<<<<<<<<<<<< + * ret = list(ret) + * if __PANDAS_DATAFRAME is not None and \ + */ __pyx_t_3 = PyList_Check(__pyx_v_ret); __pyx_t_2 = ((!(__pyx_t_3 != 0)) != 0); if (__pyx_t_2) { + /* "talib/_abstract.pxi":345 + * ret = self.__outputs.values() + * if not isinstance(ret, list): + * ret = list(ret) # <<<<<<<<<<<<<< + * if __PANDAS_DATAFRAME is not None and \ + * isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + */ __pyx_t_1 = PySequence_List(__pyx_v_ret); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_ret, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":344 + * self.__call_function() + * ret = self.__outputs.values() + * if not isinstance(ret, list): # <<<<<<<<<<<<<< + * ret = list(ret) + * if __PANDAS_DATAFRAME is not None and \ + */ } + /* "talib/_abstract.pxi":346 + * if not isinstance(ret, list): + * ret = list(ret) + * if __PANDAS_DATAFRAME is not None and \ # <<<<<<<<<<<<<< + * isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * index = self.__input_arrays.index + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PANDAS_DATAFRAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = (__pyx_t_1 != Py_None); @@ -35661,6 +52785,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb goto __pyx_L6_bool_binop_done; } + /* "talib/_abstract.pxi":347 + * ret = list(ret) + * if __PANDAS_DATAFRAME is not None and \ + * isinstance(self.__input_arrays, __PANDAS_DATAFRAME): # <<<<<<<<<<<<<< + * index = self.__input_arrays.index + * if len(ret) == 1: + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_PANDAS_DATAFRAME); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 347, __pyx_L1_error) @@ -35672,8 +52803,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb __pyx_t_2 = __pyx_t_3; __pyx_L6_bool_binop_done:; + /* "talib/_abstract.pxi":346 + * if not isinstance(ret, list): + * ret = list(ret) + * if __PANDAS_DATAFRAME is not None and \ # <<<<<<<<<<<<<< + * isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * index = self.__input_arrays.index + */ if (__pyx_t_2) { + /* "talib/_abstract.pxi":348 + * if __PANDAS_DATAFRAME is not None and \ + * isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * index = self.__input_arrays.index # <<<<<<<<<<<<<< + * if len(ret) == 1: + * return __PANDAS_SERIES(ret[0], index=index) + */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 348, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 348, __pyx_L1_error) @@ -35682,10 +52827,24 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb __pyx_v_index = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":349 + * isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * index = self.__input_arrays.index + * if len(ret) == 1: # <<<<<<<<<<<<<< + * return __PANDAS_SERIES(ret[0], index=index) + * else: + */ __pyx_t_7 = PyObject_Length(__pyx_v_ret); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(1, 349, __pyx_L1_error) __pyx_t_2 = ((__pyx_t_7 == 1) != 0); if (__pyx_t_2) { + /* "talib/_abstract.pxi":350 + * index = self.__input_arrays.index + * if len(ret) == 1: + * return __PANDAS_SERIES(ret[0], index=index) # <<<<<<<<<<<<<< + * else: + * return __PANDAS_DATAFRAME(numpy.column_stack(ret), + */ __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PANDAS_SERIES); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -35708,8 +52867,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb __pyx_t_8 = 0; goto __pyx_L0; - } - + /* "talib/_abstract.pxi":349 + * isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * index = self.__input_arrays.index + * if len(ret) == 1: # <<<<<<<<<<<<<< + * return __PANDAS_SERIES(ret[0], index=index) + * else: + */ + } + + /* "talib/_abstract.pxi":352 + * return __PANDAS_SERIES(ret[0], index=index) + * else: + * return __PANDAS_DATAFRAME(numpy.column_stack(ret), # <<<<<<<<<<<<<< + * index=index, + * columns=self.output_names) + */ /*else*/ { __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_PANDAS_DATAFRAME); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 352, __pyx_L1_error) @@ -35740,15 +52913,36 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":353 + * else: + * return __PANDAS_DATAFRAME(numpy.column_stack(ret), + * index=index, # <<<<<<<<<<<<<< + * columns=self.output_names) + * elif __POLARS_DATAFRAME is not None and \ + */ __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 353, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_index, __pyx_v_index) < 0) __PYX_ERR(1, 353, __pyx_L1_error) + /* "talib/_abstract.pxi":354 + * return __PANDAS_DATAFRAME(numpy.column_stack(ret), + * index=index, + * columns=self.output_names) # <<<<<<<<<<<<<< + * elif __POLARS_DATAFRAME is not None and \ + * isinstance(self.__input_arrays, __POLARS_DATAFRAME): + */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_names); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 354, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_columns, __pyx_t_4) < 0) __PYX_ERR(1, 353, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":352 + * return __PANDAS_SERIES(ret[0], index=index) + * else: + * return __PANDAS_DATAFRAME(numpy.column_stack(ret), # <<<<<<<<<<<<<< + * index=index, + * columns=self.output_names) + */ __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; @@ -35759,8 +52953,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb goto __pyx_L0; } + /* "talib/_abstract.pxi":346 + * if not isinstance(ret, list): + * ret = list(ret) + * if __PANDAS_DATAFRAME is not None and \ # <<<<<<<<<<<<<< + * isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * index = self.__input_arrays.index + */ } + /* "talib/_abstract.pxi":355 + * index=index, + * columns=self.output_names) + * elif __POLARS_DATAFRAME is not None and \ # <<<<<<<<<<<<<< + * isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * if len(ret) == 1: + */ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = (__pyx_t_4 != Py_None); @@ -35772,6 +52980,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb goto __pyx_L9_bool_binop_done; } + /* "talib/_abstract.pxi":356 + * columns=self.output_names) + * elif __POLARS_DATAFRAME is not None and \ + * isinstance(self.__input_arrays, __POLARS_DATAFRAME): # <<<<<<<<<<<<<< + * if len(ret) == 1: + * return __POLARS_SERIES(ret[0]) + */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 356, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 356, __pyx_L1_error) @@ -35783,12 +52998,33 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb __pyx_t_2 = __pyx_t_3; __pyx_L9_bool_binop_done:; + /* "talib/_abstract.pxi":355 + * index=index, + * columns=self.output_names) + * elif __POLARS_DATAFRAME is not None and \ # <<<<<<<<<<<<<< + * isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * if len(ret) == 1: + */ if (__pyx_t_2) { + /* "talib/_abstract.pxi":357 + * elif __POLARS_DATAFRAME is not None and \ + * isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * if len(ret) == 1: # <<<<<<<<<<<<<< + * return __POLARS_SERIES(ret[0]) + * else: + */ __pyx_t_7 = PyObject_Length(__pyx_v_ret); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(1, 357, __pyx_L1_error) __pyx_t_2 = ((__pyx_t_7 == 1) != 0); if (__pyx_t_2) { + /* "talib/_abstract.pxi":358 + * isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * if len(ret) == 1: + * return __POLARS_SERIES(ret[0]) # <<<<<<<<<<<<<< + * else: + * return __POLARS_DATAFRAME(numpy.column_stack(ret), + */ __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_POLARS_SERIES); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); @@ -35814,8 +53050,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb __pyx_t_5 = 0; goto __pyx_L0; - } - + /* "talib/_abstract.pxi":357 + * elif __POLARS_DATAFRAME is not None and \ + * isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * if len(ret) == 1: # <<<<<<<<<<<<<< + * return __POLARS_SERIES(ret[0]) + * else: + */ + } + + /* "talib/_abstract.pxi":360 + * return __POLARS_SERIES(ret[0]) + * else: + * return __POLARS_DATAFRAME(numpy.column_stack(ret), # <<<<<<<<<<<<<< + * columns=self.output_names) + * else: + */ /*else*/ { __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 360, __pyx_L1_error) @@ -35846,6 +53096,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":361 + * else: + * return __POLARS_DATAFRAME(numpy.column_stack(ret), + * columns=self.output_names) # <<<<<<<<<<<<<< + * else: + * return ret[0] if len(ret) == 1 else ret + */ __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 361, __pyx_L1_error) @@ -35853,6 +53110,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_columns, __pyx_t_1) < 0) __PYX_ERR(1, 361, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":360 + * return __POLARS_SERIES(ret[0]) + * else: + * return __POLARS_DATAFRAME(numpy.column_stack(ret), # <<<<<<<<<<<<<< + * columns=self.output_names) + * else: + */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; @@ -35863,8 +53127,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb goto __pyx_L0; } + /* "talib/_abstract.pxi":355 + * index=index, + * columns=self.output_names) + * elif __POLARS_DATAFRAME is not None and \ # <<<<<<<<<<<<<< + * isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * if len(ret) == 1: + */ } + /* "talib/_abstract.pxi":363 + * columns=self.output_names) + * else: + * return ret[0] if len(ret) == 1 else ret # <<<<<<<<<<<<<< + * + * def run(self, input_arrays=None): + */ /*else*/ { __Pyx_XDECREF(__pyx_r); __pyx_t_7 = PyObject_Length(__pyx_v_ret); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(1, 363, __pyx_L1_error) @@ -35882,6 +53160,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb goto __pyx_L0; } + /* "talib/_abstract.pxi":335 + * + * @property + * def outputs(self): # <<<<<<<<<<<<<< + * """ + * Returns the TA function values for the currently set input_arrays and + */ /* function exit code */ __pyx_L1_error:; @@ -35899,6 +53184,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_abstract.pxi":365 + * return ret[0] if len(ret) == 1 else ret + * + * def run(self, input_arrays=None): # <<<<<<<<<<<<<< + * """ + * run([input_arrays=None]) + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_31run(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -35982,9 +53274,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_30run(CYTHON_UNUSED PyObject int __pyx_clineno = 0; __Pyx_RefNannySetupContext("run", 0); + /* "talib/_abstract.pxi":372 + * the input_arrays dict. + * """ + * if input_arrays: # <<<<<<<<<<<<<< + * self.set_input_arrays(input_arrays) + * self.__call_function() + */ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_input_arrays); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 372, __pyx_L1_error) if (__pyx_t_1) { + /* "talib/_abstract.pxi":373 + * """ + * if input_arrays: + * self.set_input_arrays(input_arrays) # <<<<<<<<<<<<<< + * self.__call_function() + * return self.outputs + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_set_input_arrays); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; @@ -36004,8 +53310,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_30run(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":372 + * the input_arrays dict. + * """ + * if input_arrays: # <<<<<<<<<<<<<< + * self.set_input_arrays(input_arrays) + * self.__call_function() + */ } + /* "talib/_abstract.pxi":374 + * if input_arrays: + * self.set_input_arrays(input_arrays) + * self.__call_function() # <<<<<<<<<<<<<< + * return self.outputs + * + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__call_function); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; @@ -36025,6 +53345,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_30run(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":375 + * self.set_input_arrays(input_arrays) + * self.__call_function() + * return self.outputs # <<<<<<<<<<<<<< + * + * def __call__(self, *args, **kwargs): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_outputs); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -36032,6 +53359,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_30run(CYTHON_UNUSED PyObject __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":365 + * return ret[0] if len(ret) == 1 else ret + * + * def run(self, input_arrays=None): # <<<<<<<<<<<<<< + * """ + * run([input_arrays=None]) + */ /* function exit code */ __pyx_L1_error:; @@ -36046,6 +53380,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_30run(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_abstract.pxi":377 + * return self.outputs + * + * def __call__(self, *args, **kwargs): # <<<<<<<<<<<<<< + * """ + * func_instance([input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs]) + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_33__call__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -36162,9 +53503,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_RefNannySetupContext("__call__", 0); __Pyx_INCREF(__pyx_v_args); + /* "talib/_abstract.pxi":385 + * """ + * # do not cache ta-func parameters passed to __call__ + * opt_input_values = [(param_name, self.__opt_inputs[param_name]['value']) # <<<<<<<<<<<<<< + * for param_name in self.__opt_inputs.keys()] + * price_series_name_values = [(n, self.__input_names[n]['price_series']) + */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); + /* "talib/_abstract.pxi":386 + * # do not cache ta-func parameters passed to __call__ + * opt_input_values = [(param_name, self.__opt_inputs[param_name]['value']) + * for param_name in self.__opt_inputs.keys()] # <<<<<<<<<<<<<< + * price_series_name_values = [(n, self.__input_names[n]['price_series']) + * for n in self.__input_names] + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 386, __pyx_L1_error) @@ -36228,6 +53583,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_param_name, __pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":385 + * """ + * # do not cache ta-func parameters passed to __call__ + * opt_input_values = [(param_name, self.__opt_inputs[param_name]['value']) # <<<<<<<<<<<<<< + * for param_name in self.__opt_inputs.keys()] + * price_series_name_values = [(n, self.__input_names[n]['price_series']) + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_param_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 385, __pyx_L1_error) @@ -36247,14 +53609,35 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(1, 385, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":386 + * # do not cache ta-func parameters passed to __call__ + * opt_input_values = [(param_name, self.__opt_inputs[param_name]['value']) + * for param_name in self.__opt_inputs.keys()] # <<<<<<<<<<<<<< + * price_series_name_values = [(n, self.__input_names[n]['price_series']) + * for n in self.__input_names] + */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_opt_input_values = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":387 + * opt_input_values = [(param_name, self.__opt_inputs[param_name]['value']) + * for param_name in self.__opt_inputs.keys()] + * price_series_name_values = [(n, self.__input_names[n]['price_series']) # <<<<<<<<<<<<<< + * for n in self.__input_names] + * + */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); + /* "talib/_abstract.pxi":388 + * for param_name in self.__opt_inputs.keys()] + * price_series_name_values = [(n, self.__input_names[n]['price_series']) + * for n in self.__input_names] # <<<<<<<<<<<<<< + * + * # allow calling with same signature as talib.func module functions + */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) { @@ -36300,6 +53683,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_n, __pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":387 + * opt_input_values = [(param_name, self.__opt_inputs[param_name]['value']) + * for param_name in self.__opt_inputs.keys()] + * price_series_name_values = [(n, self.__input_names[n]['price_series']) # <<<<<<<<<<<<<< + * for n in self.__input_names] + * + */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 387, __pyx_L1_error) @@ -36319,21 +53709,49 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 387, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":388 + * for param_name in self.__opt_inputs.keys()] + * price_series_name_values = [(n, self.__input_names[n]['price_series']) + * for n in self.__input_names] # <<<<<<<<<<<<<< + * + * # allow calling with same signature as talib.func module functions + */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_price_series_name_values = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":391 + * + * # allow calling with same signature as talib.func module functions + * args = list(args) # <<<<<<<<<<<<<< + * input_arrays = {} + * input_price_series_names = self.__input_price_series_names() + */ __pyx_t_1 = PySequence_List(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_args, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":392 + * # allow calling with same signature as talib.func module functions + * args = list(args) + * input_arrays = {} # <<<<<<<<<<<<<< + * input_price_series_names = self.__input_price_series_names() + * if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES): + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_input_arrays = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":393 + * args = list(args) + * input_arrays = {} + * input_price_series_names = self.__input_price_series_names() # <<<<<<<<<<<<<< + * if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES): + * for i, arg in enumerate(args): + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_price_series_na); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = NULL; @@ -36354,6 +53772,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_v_input_price_series_names = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":394 + * input_arrays = {} + * input_price_series_names = self.__input_price_series_names() + * if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES): # <<<<<<<<<<<<<< + * for i, arg in enumerate(args): + * if not isinstance(arg, __ARRAY_TYPES): + */ __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_args); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(1, 394, __pyx_L1_error) if (__pyx_t_8) { } else { @@ -36372,6 +53797,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_L8_bool_binop_done:; if (__pyx_t_7) { + /* "talib/_abstract.pxi":395 + * input_price_series_names = self.__input_price_series_names() + * if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES): + * for i, arg in enumerate(args): # <<<<<<<<<<<<<< + * if not isinstance(arg, __ARRAY_TYPES): + * break + */ __Pyx_INCREF(__pyx_int_0); __pyx_t_3 = __pyx_int_0; if (likely(PyList_CheckExact(__pyx_v_args)) || PyTuple_CheckExact(__pyx_v_args)) { @@ -36423,6 +53855,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_t_3 = __pyx_t_2; __pyx_t_2 = 0; + /* "talib/_abstract.pxi":396 + * if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES): + * for i, arg in enumerate(args): + * if not isinstance(arg, __ARRAY_TYPES): # <<<<<<<<<<<<<< + * break + * + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ARRAY_TYPES); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyObject_IsInstance(__pyx_v_arg, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 396, __pyx_L1_error) @@ -36430,10 +53869,31 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_t_9 = ((!(__pyx_t_7 != 0)) != 0); if (__pyx_t_9) { + /* "talib/_abstract.pxi":397 + * for i, arg in enumerate(args): + * if not isinstance(arg, __ARRAY_TYPES): + * break # <<<<<<<<<<<<<< + * + * try: + */ goto __pyx_L11_break; - } - + /* "talib/_abstract.pxi":396 + * if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES): + * for i, arg in enumerate(args): + * if not isinstance(arg, __ARRAY_TYPES): # <<<<<<<<<<<<<< + * break + * + */ + } + + /* "talib/_abstract.pxi":399 + * break + * + * try: # <<<<<<<<<<<<<< + * input_arrays[input_price_series_names[i]] = arg + * except IndexError: + */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -36443,11 +53903,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_XGOTREF(__pyx_t_12); /*try:*/ { + /* "talib/_abstract.pxi":400 + * + * try: + * input_arrays[input_price_series_names[i]] = arg # <<<<<<<<<<<<<< + * except IndexError: + * msg = 'Too many price arguments: expected %d (%s)' % ( + */ __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_input_price_series_names, __pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 400, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely(PyDict_SetItem(__pyx_v_input_arrays, __pyx_t_2, __pyx_v_arg) < 0)) __PYX_ERR(1, 400, __pyx_L13_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":399 + * break + * + * try: # <<<<<<<<<<<<<< + * input_arrays[input_price_series_names[i]] = arg + * except IndexError: + */ } __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; @@ -36457,6 +53931,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":401 + * try: + * input_arrays[input_price_series_names[i]] = arg + * except IndexError: # <<<<<<<<<<<<<< + * msg = 'Too many price arguments: expected %d (%s)' % ( + * len(input_price_series_names), + */ __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_IndexError); if (__pyx_t_13) { __Pyx_AddTraceback("talib._ta_lib.Function.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -36465,13 +53946,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_14); + /* "talib/_abstract.pxi":403 + * except IndexError: + * msg = 'Too many price arguments: expected %d (%s)' % ( + * len(input_price_series_names), # <<<<<<<<<<<<<< + * ', '.join(input_price_series_names)) + * raise TypeError(msg) + */ __pyx_t_15 = PyObject_Length(__pyx_v_input_price_series_names); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(1, 403, __pyx_L15_except_error) __pyx_t_16 = PyInt_FromSsize_t(__pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 403, __pyx_L15_except_error) __Pyx_GOTREF(__pyx_t_16); + /* "talib/_abstract.pxi":404 + * msg = 'Too many price arguments: expected %d (%s)' % ( + * len(input_price_series_names), + * ', '.join(input_price_series_names)) # <<<<<<<<<<<<<< + * raise TypeError(msg) + * + */ __pyx_t_17 = __Pyx_PyString_Join(__pyx_kp_s__6, __pyx_v_input_price_series_names); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 404, __pyx_L15_except_error) __Pyx_GOTREF(__pyx_t_17); + /* "talib/_abstract.pxi":403 + * except IndexError: + * msg = 'Too many price arguments: expected %d (%s)' % ( + * len(input_price_series_names), # <<<<<<<<<<<<<< + * ', '.join(input_price_series_names)) + * raise TypeError(msg) + */ __pyx_t_18 = PyTuple_New(2); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 403, __pyx_L15_except_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_GIVEREF(__pyx_t_16); @@ -36481,12 +53983,26 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_t_16 = 0; __pyx_t_17 = 0; + /* "talib/_abstract.pxi":402 + * input_arrays[input_price_series_names[i]] = arg + * except IndexError: + * msg = 'Too many price arguments: expected %d (%s)' % ( # <<<<<<<<<<<<<< + * len(input_price_series_names), + * ', '.join(input_price_series_names)) + */ __pyx_t_17 = __Pyx_PyString_Format(__pyx_kp_s_Too_many_price_arguments_expecte, __pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 402, __pyx_L15_except_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_v_msg = ((PyObject*)__pyx_t_17); __pyx_t_17 = 0; + /* "talib/_abstract.pxi":405 + * len(input_price_series_names), + * ', '.join(input_price_series_names)) + * raise TypeError(msg) # <<<<<<<<<<<<<< + * + * if __PANDAS_DATAFRAME is not None \ + */ __pyx_t_17 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_v_msg); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 405, __pyx_L15_except_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_Raise(__pyx_t_17, 0, 0, 0); @@ -36496,6 +54012,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO goto __pyx_L15_except_error; __pyx_L15_except_error:; + /* "talib/_abstract.pxi":399 + * break + * + * try: # <<<<<<<<<<<<<< + * input_arrays[input_price_series_names[i]] = arg + * except IndexError: + */ __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); @@ -36504,13 +54027,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_L20_try_end:; } + /* "talib/_abstract.pxi":395 + * input_price_series_names = self.__input_price_series_names() + * if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES): + * for i, arg in enumerate(args): # <<<<<<<<<<<<<< + * if not isinstance(arg, __ARRAY_TYPES): + * break + */ } __pyx_L11_break:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":394 + * input_arrays = {} + * input_price_series_names = self.__input_price_series_names() + * if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES): # <<<<<<<<<<<<<< + * for i, arg in enumerate(args): + * if not isinstance(arg, __ARRAY_TYPES): + */ } + /* "talib/_abstract.pxi":407 + * raise TypeError(msg) + * + * if __PANDAS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.empty + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PANDAS_DATAFRAME); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = (__pyx_t_3 != Py_None); @@ -36522,6 +54066,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO goto __pyx_L24_bool_binop_done; } + /* "talib/_abstract.pxi":408 + * + * if __PANDAS_DATAFRAME is not None \ + * and isinstance(self.__input_arrays, __PANDAS_DATAFRAME): # <<<<<<<<<<<<<< + * no_existing_input_arrays = self.__input_arrays.empty + * elif __POLARS_DATAFRAME is not None \ + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 408, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PANDAS_DATAFRAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 408, __pyx_L1_error) @@ -36533,8 +54084,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_t_9 = __pyx_t_7; __pyx_L24_bool_binop_done:; + /* "talib/_abstract.pxi":407 + * raise TypeError(msg) + * + * if __PANDAS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.empty + */ if (__pyx_t_9) { + /* "talib/_abstract.pxi":409 + * if __PANDAS_DATAFRAME is not None \ + * and isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.empty # <<<<<<<<<<<<<< + * elif __POLARS_DATAFRAME is not None \ + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 409, __pyx_L1_error) @@ -36543,9 +54108,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_v_no_existing_input_arrays = __pyx_t_3; __pyx_t_3 = 0; + /* "talib/_abstract.pxi":407 + * raise TypeError(msg) + * + * if __PANDAS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.empty + */ goto __pyx_L23; } + /* "talib/_abstract.pxi":410 + * and isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.empty + * elif __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.is_empty() + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = (__pyx_t_3 != Py_None); @@ -36557,6 +54136,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO goto __pyx_L26_bool_binop_done; } + /* "talib/_abstract.pxi":411 + * no_existing_input_arrays = self.__input_arrays.empty + * elif __POLARS_DATAFRAME is not None \ + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): # <<<<<<<<<<<<<< + * no_existing_input_arrays = self.__input_arrays.is_empty() + * else: + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_POLARS_DATAFRAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 411, __pyx_L1_error) @@ -36568,8 +54154,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_t_9 = __pyx_t_7; __pyx_L26_bool_binop_done:; + /* "talib/_abstract.pxi":410 + * and isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.empty + * elif __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.is_empty() + */ if (__pyx_t_9) { + /* "talib/_abstract.pxi":412 + * elif __POLARS_DATAFRAME is not None \ + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.is_empty() # <<<<<<<<<<<<<< + * else: + * no_existing_input_arrays = not bool(self.__input_arrays) + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 412, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_is_empty); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 412, __pyx_L1_error) @@ -36593,9 +54193,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_v_no_existing_input_arrays = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":410 + * and isinstance(self.__input_arrays, __PANDAS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.empty + * elif __POLARS_DATAFRAME is not None \ # <<<<<<<<<<<<<< + * and isinstance(self.__input_arrays, __POLARS_DATAFRAME): + * no_existing_input_arrays = self.__input_arrays.is_empty() + */ goto __pyx_L23; } + /* "talib/_abstract.pxi":414 + * no_existing_input_arrays = self.__input_arrays.is_empty() + * else: + * no_existing_input_arrays = not bool(self.__input_arrays) # <<<<<<<<<<<<<< + * + * if len(input_arrays) == len(input_price_series_names): + */ /*else*/ { __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 414, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -36608,11 +54222,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO } __pyx_L23:; + /* "talib/_abstract.pxi":416 + * no_existing_input_arrays = not bool(self.__input_arrays) + * + * if len(input_arrays) == len(input_price_series_names): # <<<<<<<<<<<<<< + * self.set_input_arrays(input_arrays) + * args = args[len(input_arrays):] + */ __pyx_t_5 = PyDict_Size(__pyx_v_input_arrays); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 416, __pyx_L1_error) __pyx_t_15 = PyObject_Length(__pyx_v_input_price_series_names); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(1, 416, __pyx_L1_error) __pyx_t_9 = ((__pyx_t_5 == __pyx_t_15) != 0); if (__pyx_t_9) { + /* "talib/_abstract.pxi":417 + * + * if len(input_arrays) == len(input_price_series_names): + * self.set_input_arrays(input_arrays) # <<<<<<<<<<<<<< + * args = args[len(input_arrays):] + * elif len(input_arrays) or (no_existing_input_arrays and ( + */ __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_set_input_arrays); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_3 = NULL; @@ -36632,15 +54260,36 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":418 + * if len(input_arrays) == len(input_price_series_names): + * self.set_input_arrays(input_arrays) + * args = args[len(input_arrays):] # <<<<<<<<<<<<<< + * elif len(input_arrays) or (no_existing_input_arrays and ( + * not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))): + */ __pyx_t_15 = PyDict_Size(__pyx_v_input_arrays); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(1, 418, __pyx_L1_error) __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_args, __pyx_t_15, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 418, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_args, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":416 + * no_existing_input_arrays = not bool(self.__input_arrays) + * + * if len(input_arrays) == len(input_price_series_names): # <<<<<<<<<<<<<< + * self.set_input_arrays(input_arrays) + * args = args[len(input_arrays):] + */ goto __pyx_L28; } + /* "talib/_abstract.pxi":419 + * self.set_input_arrays(input_arrays) + * args = args[len(input_arrays):] + * elif len(input_arrays) or (no_existing_input_arrays and ( # <<<<<<<<<<<<<< + * not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))): + * msg = 'Not enough price arguments: expected %d (%s)' % ( + */ __pyx_t_15 = PyDict_Size(__pyx_v_input_arrays); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(1, 419, __pyx_L1_error) __pyx_t_7 = (__pyx_t_15 != 0); if (!__pyx_t_7) { @@ -36655,6 +54304,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO goto __pyx_L29_bool_binop_done; } + /* "talib/_abstract.pxi":420 + * args = args[len(input_arrays):] + * elif len(input_arrays) or (no_existing_input_arrays and ( + * not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))): # <<<<<<<<<<<<<< + * msg = 'Not enough price arguments: expected %d (%s)' % ( + * len(input_price_series_names), + */ __pyx_t_15 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(1, 420, __pyx_L1_error) __pyx_t_7 = ((!(__pyx_t_15 != 0)) != 0); if (!__pyx_t_7) { @@ -36673,15 +54329,43 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_t_9 = __pyx_t_8; __pyx_L29_bool_binop_done:; + /* "talib/_abstract.pxi":419 + * self.set_input_arrays(input_arrays) + * args = args[len(input_arrays):] + * elif len(input_arrays) or (no_existing_input_arrays and ( # <<<<<<<<<<<<<< + * not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))): + * msg = 'Not enough price arguments: expected %d (%s)' % ( + */ if (unlikely(__pyx_t_9)) { + /* "talib/_abstract.pxi":422 + * not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))): + * msg = 'Not enough price arguments: expected %d (%s)' % ( + * len(input_price_series_names), # <<<<<<<<<<<<<< + * ', '.join(input_price_series_names)) + * raise TypeError(msg) + */ __pyx_t_15 = PyObject_Length(__pyx_v_input_price_series_names); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(1, 422, __pyx_L1_error) __pyx_t_14 = PyInt_FromSsize_t(__pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); + /* "talib/_abstract.pxi":423 + * msg = 'Not enough price arguments: expected %d (%s)' % ( + * len(input_price_series_names), + * ', '.join(input_price_series_names)) # <<<<<<<<<<<<<< + * raise TypeError(msg) + * + */ __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__6, __pyx_v_input_price_series_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); + /* "talib/_abstract.pxi":422 + * not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))): + * msg = 'Not enough price arguments: expected %d (%s)' % ( + * len(input_price_series_names), # <<<<<<<<<<<<<< + * ', '.join(input_price_series_names)) + * raise TypeError(msg) + */ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_14); @@ -36691,21 +54375,49 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_t_14 = 0; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":421 + * elif len(input_arrays) or (no_existing_input_arrays and ( + * not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))): + * msg = 'Not enough price arguments: expected %d (%s)' % ( # <<<<<<<<<<<<<< + * len(input_price_series_names), + * ', '.join(input_price_series_names)) + */ __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Not_enough_price_arguments_expec, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_msg = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":424 + * len(input_price_series_names), + * ', '.join(input_price_series_names)) + * raise TypeError(msg) # <<<<<<<<<<<<<< + * + * self.set_function_args(*args, **kwargs) + */ __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_v_msg); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 424, __pyx_L1_error) + /* "talib/_abstract.pxi":419 + * self.set_input_arrays(input_arrays) + * args = args[len(input_arrays):] + * elif len(input_arrays) or (no_existing_input_arrays and ( # <<<<<<<<<<<<<< + * not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))): + * msg = 'Not enough price arguments: expected %d (%s)' % ( + */ } __pyx_L28:; + /* "talib/_abstract.pxi":426 + * raise TypeError(msg) + * + * self.set_function_args(*args, **kwargs) # <<<<<<<<<<<<<< + * self.__call_function() + * + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_set_function_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 426, __pyx_L1_error) @@ -36719,6 +54431,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":427 + * + * self.set_function_args(*args, **kwargs) + * self.__call_function() # <<<<<<<<<<<<<< + * + * # restore opt_input values to as they were before this call + */ __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__call_function); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_3 = NULL; @@ -36738,6 +54457,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":430 + * + * # restore opt_input values to as they were before this call + * for param_name, value in opt_input_values: # <<<<<<<<<<<<<< + * self.__opt_inputs[param_name]['value'] = value + * self.__info['parameters'] = self.parameters + */ __pyx_t_4 = __pyx_v_opt_input_values; __Pyx_INCREF(__pyx_t_4); __pyx_t_15 = 0; for (;;) { if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_4)) break; @@ -36798,6 +54524,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":431 + * # restore opt_input values to as they were before this call + * for param_name, value in opt_input_values: + * self.__opt_inputs[param_name]['value'] = value # <<<<<<<<<<<<<< + * self.__info['parameters'] = self.parameters + * + */ __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_14, __pyx_v_param_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 431, __pyx_L1_error) @@ -36806,9 +54539,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_value, __pyx_v_value) < 0)) __PYX_ERR(1, 431, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":430 + * + * # restore opt_input values to as they were before this call + * for param_name, value in opt_input_values: # <<<<<<<<<<<<<< + * self.__opt_inputs[param_name]['value'] = value + * self.__info['parameters'] = self.parameters + */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":432 + * for param_name, value in opt_input_values: + * self.__opt_inputs[param_name]['value'] = value + * self.__info['parameters'] = self.parameters # <<<<<<<<<<<<<< + * + * # restore input names values to as they were before this call + */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_parameters); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 432, __pyx_L1_error) @@ -36817,6 +54564,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":435 + * + * # restore input names values to as they were before this call + * for input_name, value in price_series_name_values: # <<<<<<<<<<<<<< + * self.__input_names[input_name]['price_series'] = value + * self.__info['input_names'][input_name] = value + */ __pyx_t_4 = __pyx_v_price_series_name_values; __Pyx_INCREF(__pyx_t_4); __pyx_t_15 = 0; for (;;) { if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_4)) break; @@ -36877,6 +54631,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":436 + * # restore input names values to as they were before this call + * for input_name, value in price_series_name_values: + * self.__input_names[input_name]['price_series'] = value # <<<<<<<<<<<<<< + * self.__info['input_names'][input_name] = value + * + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_input_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 436, __pyx_L1_error) @@ -36885,6 +54646,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO if (unlikely(PyObject_SetItem(__pyx_t_3, __pyx_n_s_price_series, __pyx_v_value) < 0)) __PYX_ERR(1, 436, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":437 + * for input_name, value in price_series_name_values: + * self.__input_names[input_name]['price_series'] = value + * self.__info['input_names'][input_name] = value # <<<<<<<<<<<<<< + * + * return self.outputs + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__info); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_n_s_input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 437, __pyx_L1_error) @@ -36893,9 +54661,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_input_name, __pyx_v_value) < 0)) __PYX_ERR(1, 437, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":435 + * + * # restore input names values to as they were before this call + * for input_name, value in price_series_name_values: # <<<<<<<<<<<<<< + * self.__input_names[input_name]['price_series'] = value + * self.__info['input_names'][input_name] = value + */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":439 + * self.__info['input_names'][input_name] = value + * + * return self.outputs # <<<<<<<<<<<<<< + * + * # figure out which price series names we're using for inputs + */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_outputs); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); @@ -36903,6 +54685,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO __pyx_t_4 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":377 + * return self.outputs + * + * def __call__(self, *args, **kwargs): # <<<<<<<<<<<<<< + * """ + * func_instance([input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs]) + */ /* function exit code */ __pyx_L1_error:; @@ -36935,6 +54724,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_abstract.pxi":442 + * + * # figure out which price series names we're using for inputs + * def __input_price_series_names(self): # <<<<<<<<<<<<<< + * input_price_series_names = [] + * for input_name in self.__input_names: + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_35__input_price_series_names(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -36972,11 +54768,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_34__input_price_series_names int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__input_price_series_names", 0); + /* "talib/_abstract.pxi":443 + * # figure out which price series names we're using for inputs + * def __input_price_series_names(self): + * input_price_series_names = [] # <<<<<<<<<<<<<< + * for input_name in self.__input_names: + * price_series = self.__input_names[input_name]['price_series'] + */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_input_price_series_names = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":444 + * def __input_price_series_names(self): + * input_price_series_names = [] + * for input_name in self.__input_names: # <<<<<<<<<<<<<< + * price_series = self.__input_names[input_name]['price_series'] + * if isinstance(price_series, list): # TALIB-supplied input names + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 444, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { @@ -37022,6 +54832,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_34__input_price_series_names __Pyx_XDECREF_SET(__pyx_v_input_name, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":445 + * input_price_series_names = [] + * for input_name in self.__input_names: + * price_series = self.__input_names[input_name]['price_series'] # <<<<<<<<<<<<<< + * if isinstance(price_series, list): # TALIB-supplied input names + * for name in price_series: + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_input_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 445, __pyx_L1_error) @@ -37033,10 +54850,24 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_34__input_price_series_names __Pyx_XDECREF_SET(__pyx_v_price_series, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":446 + * for input_name in self.__input_names: + * price_series = self.__input_names[input_name]['price_series'] + * if isinstance(price_series, list): # TALIB-supplied input names # <<<<<<<<<<<<<< + * for name in price_series: + * input_price_series_names.append(name) + */ __pyx_t_6 = PyList_Check(__pyx_v_price_series); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { + /* "talib/_abstract.pxi":447 + * price_series = self.__input_names[input_name]['price_series'] + * if isinstance(price_series, list): # TALIB-supplied input names + * for name in price_series: # <<<<<<<<<<<<<< + * input_price_series_names.append(name) + * else: # name came from __INPUT_PRICE_SERIES_DEFAULTS + */ if (likely(PyList_CheckExact(__pyx_v_price_series)) || PyTuple_CheckExact(__pyx_v_price_series)) { __pyx_t_1 = __pyx_v_price_series; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0; __pyx_t_9 = NULL; @@ -37079,27 +54910,76 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_34__input_price_series_names __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":448 + * if isinstance(price_series, list): # TALIB-supplied input names + * for name in price_series: + * input_price_series_names.append(name) # <<<<<<<<<<<<<< + * else: # name came from __INPUT_PRICE_SERIES_DEFAULTS + * input_price_series_names.append(price_series) + */ __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_input_price_series_names, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 448, __pyx_L1_error) + /* "talib/_abstract.pxi":447 + * price_series = self.__input_names[input_name]['price_series'] + * if isinstance(price_series, list): # TALIB-supplied input names + * for name in price_series: # <<<<<<<<<<<<<< + * input_price_series_names.append(name) + * else: # name came from __INPUT_PRICE_SERIES_DEFAULTS + */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":446 + * for input_name in self.__input_names: + * price_series = self.__input_names[input_name]['price_series'] + * if isinstance(price_series, list): # TALIB-supplied input names # <<<<<<<<<<<<<< + * for name in price_series: + * input_price_series_names.append(name) + */ goto __pyx_L5; } + /* "talib/_abstract.pxi":450 + * input_price_series_names.append(name) + * else: # name came from __INPUT_PRICE_SERIES_DEFAULTS + * input_price_series_names.append(price_series) # <<<<<<<<<<<<<< + * return input_price_series_names + * + */ /*else*/ { __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_input_price_series_names, __pyx_v_price_series); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 450, __pyx_L1_error) } __pyx_L5:; + /* "talib/_abstract.pxi":444 + * def __input_price_series_names(self): + * input_price_series_names = [] + * for input_name in self.__input_names: # <<<<<<<<<<<<<< + * price_series = self.__input_names[input_name]['price_series'] + * if isinstance(price_series, list): # TALIB-supplied input names + */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":451 + * else: # name came from __INPUT_PRICE_SERIES_DEFAULTS + * input_price_series_names.append(price_series) + * return input_price_series_names # <<<<<<<<<<<<<< + * + * def __call_function(self): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_input_price_series_names); __pyx_r = __pyx_v_input_price_series_names; goto __pyx_L0; + /* "talib/_abstract.pxi":442 + * + * # figure out which price series names we're using for inputs + * def __input_price_series_names(self): # <<<<<<<<<<<<<< + * input_price_series_names = [] + * for input_name in self.__input_names: + */ /* function exit code */ __pyx_L1_error:; @@ -37118,6 +54998,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_34__input_price_series_names return __pyx_r; } +/* "talib/_abstract.pxi":453 + * return input_price_series_names + * + * def __call_function(self): # <<<<<<<<<<<<<< + * input_price_series_names = self.__input_price_series_names() + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_37__call_function(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -37162,6 +55049,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__call_function", 0); + /* "talib/_abstract.pxi":454 + * + * def __call_function(self): + * input_price_series_names = self.__input_price_series_names() # <<<<<<<<<<<<<< + * + * # populate the ordered args we'll call the function with + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_price_series_na); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; @@ -37182,11 +55076,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __pyx_v_input_price_series_names = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":457 + * + * # populate the ordered args we'll call the function with + * args = [] # <<<<<<<<<<<<<< + * for price_series in input_price_series_names: + * series = self.__input_arrays[price_series] + */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 457, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_args = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":458 + * # populate the ordered args we'll call the function with + * args = [] + * for price_series in input_price_series_names: # <<<<<<<<<<<<<< + * series = self.__input_arrays[price_series] + * if __PANDAS_SERIES is not None and \ + */ if (likely(PyList_CheckExact(__pyx_v_input_price_series_names)) || PyTuple_CheckExact(__pyx_v_input_price_series_names)) { __pyx_t_1 = __pyx_v_input_price_series_names; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; __pyx_t_5 = NULL; @@ -37229,6 +55137,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __Pyx_XDECREF_SET(__pyx_v_price_series, __pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":459 + * args = [] + * for price_series in input_price_series_names: + * series = self.__input_arrays[price_series] # <<<<<<<<<<<<<< + * if __PANDAS_SERIES is not None and \ + * isinstance(series, __PANDAS_SERIES): + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__input_arrays); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_price_series); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 459, __pyx_L1_error) @@ -37237,6 +55152,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __Pyx_XDECREF_SET(__pyx_v_series, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":460 + * for price_series in input_price_series_names: + * series = self.__input_arrays[price_series] + * if __PANDAS_SERIES is not None and \ # <<<<<<<<<<<<<< + * isinstance(series, __PANDAS_SERIES): + * series = series.values.astype(float) + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PANDAS_SERIES); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = (__pyx_t_3 != Py_None); @@ -37248,6 +55170,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU goto __pyx_L6_bool_binop_done; } + /* "talib/_abstract.pxi":461 + * series = self.__input_arrays[price_series] + * if __PANDAS_SERIES is not None and \ + * isinstance(series, __PANDAS_SERIES): # <<<<<<<<<<<<<< + * series = series.values.astype(float) + * elif __POLARS_SERIES is not None and \ + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PANDAS_SERIES); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = PyObject_IsInstance(__pyx_v_series, __pyx_t_3); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 461, __pyx_L1_error) @@ -37256,8 +55185,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __pyx_t_6 = __pyx_t_7; __pyx_L6_bool_binop_done:; + /* "talib/_abstract.pxi":460 + * for price_series in input_price_series_names: + * series = self.__input_arrays[price_series] + * if __PANDAS_SERIES is not None and \ # <<<<<<<<<<<<<< + * isinstance(series, __PANDAS_SERIES): + * series = series.values.astype(float) + */ if (__pyx_t_6) { + /* "talib/_abstract.pxi":462 + * if __PANDAS_SERIES is not None and \ + * isinstance(series, __PANDAS_SERIES): + * series = series.values.astype(float) # <<<<<<<<<<<<<< + * elif __POLARS_SERIES is not None and \ + * isinstance(series, __POLARS_SERIES): + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_series, __pyx_n_s_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 462, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 462, __pyx_L1_error) @@ -37281,9 +55224,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __Pyx_DECREF_SET(__pyx_v_series, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":460 + * for price_series in input_price_series_names: + * series = self.__input_arrays[price_series] + * if __PANDAS_SERIES is not None and \ # <<<<<<<<<<<<<< + * isinstance(series, __PANDAS_SERIES): + * series = series.values.astype(float) + */ goto __pyx_L5; } + /* "talib/_abstract.pxi":463 + * isinstance(series, __PANDAS_SERIES): + * series = series.values.astype(float) + * elif __POLARS_SERIES is not None and \ # <<<<<<<<<<<<<< + * isinstance(series, __POLARS_SERIES): + * series = series.to_numpy().astype(float) + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_POLARS_SERIES); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 463, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = (__pyx_t_3 != Py_None); @@ -37295,6 +55252,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU goto __pyx_L8_bool_binop_done; } + /* "talib/_abstract.pxi":464 + * series = series.values.astype(float) + * elif __POLARS_SERIES is not None and \ + * isinstance(series, __POLARS_SERIES): # <<<<<<<<<<<<<< + * series = series.to_numpy().astype(float) + * args.append(series) + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_POLARS_SERIES); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 464, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = PyObject_IsInstance(__pyx_v_series, __pyx_t_3); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 464, __pyx_L1_error) @@ -37303,8 +55267,22 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __pyx_t_6 = __pyx_t_7; __pyx_L8_bool_binop_done:; + /* "talib/_abstract.pxi":463 + * isinstance(series, __PANDAS_SERIES): + * series = series.values.astype(float) + * elif __POLARS_SERIES is not None and \ # <<<<<<<<<<<<<< + * isinstance(series, __POLARS_SERIES): + * series = series.to_numpy().astype(float) + */ if (__pyx_t_6) { + /* "talib/_abstract.pxi":465 + * elif __POLARS_SERIES is not None and \ + * isinstance(series, __POLARS_SERIES): + * series = series.to_numpy().astype(float) # <<<<<<<<<<<<<< + * args.append(series) + * for opt_input in self.__opt_inputs: + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_series, __pyx_n_s_to_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 465, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_10 = NULL; @@ -37343,14 +55321,42 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __Pyx_DECREF_SET(__pyx_v_series, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":463 + * isinstance(series, __PANDAS_SERIES): + * series = series.values.astype(float) + * elif __POLARS_SERIES is not None and \ # <<<<<<<<<<<<<< + * isinstance(series, __POLARS_SERIES): + * series = series.to_numpy().astype(float) + */ } __pyx_L5:; + /* "talib/_abstract.pxi":466 + * isinstance(series, __POLARS_SERIES): + * series = series.to_numpy().astype(float) + * args.append(series) # <<<<<<<<<<<<<< + * for opt_input in self.__opt_inputs: + * value = self.__get_opt_input_value(opt_input) + */ __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_args, __pyx_v_series); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 466, __pyx_L1_error) + /* "talib/_abstract.pxi":458 + * # populate the ordered args we'll call the function with + * args = [] + * for price_series in input_price_series_names: # <<<<<<<<<<<<<< + * series = self.__input_arrays[price_series] + * if __PANDAS_SERIES is not None and \ + */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":467 + * series = series.to_numpy().astype(float) + * args.append(series) + * for opt_input in self.__opt_inputs: # <<<<<<<<<<<<<< + * value = self.__get_opt_input_value(opt_input) + * args.append(value) + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { @@ -37396,6 +55402,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __Pyx_XDECREF_SET(__pyx_v_opt_input, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":468 + * args.append(series) + * for opt_input in self.__opt_inputs: + * value = self.__get_opt_input_value(opt_input) # <<<<<<<<<<<<<< + * args.append(value) + * + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__get_opt_input_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 468, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = NULL; @@ -37416,11 +55429,32 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":469 + * for opt_input in self.__opt_inputs: + * value = self.__get_opt_input_value(opt_input) + * args.append(value) # <<<<<<<<<<<<<< + * + * # Use the func module to actually call the function. + */ __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_args, __pyx_v_value); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 469, __pyx_L1_error) + /* "talib/_abstract.pxi":467 + * series = series.to_numpy().astype(float) + * args.append(series) + * for opt_input in self.__opt_inputs: # <<<<<<<<<<<<<< + * value = self.__get_opt_input_value(opt_input) + * args.append(value) + */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":472 + * + * # Use the func module to actually call the function. + * results = self.func_object(*args) # <<<<<<<<<<<<<< + * if isinstance(results, np.ndarray): + * keys = self.__outputs.keys() + */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_func_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error) @@ -37432,10 +55466,24 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __pyx_v_results = __pyx_t_2; __pyx_t_2 = 0; + /* "talib/_abstract.pxi":473 + * # Use the func module to actually call the function. + * results = self.func_object(*args) + * if isinstance(results, np.ndarray): # <<<<<<<<<<<<<< + * keys = self.__outputs.keys() + * if not isinstance(keys, list): + */ __pyx_t_6 = __Pyx_TypeCheck(__pyx_v_results, __pyx_ptype_5numpy_ndarray); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { + /* "talib/_abstract.pxi":474 + * results = self.func_object(*args) + * if isinstance(results, np.ndarray): + * keys = self.__outputs.keys() # <<<<<<<<<<<<<< + * if not isinstance(keys, list): + * keys = list(keys) + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 474, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 474, __pyx_L1_error) @@ -37459,17 +55507,45 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __pyx_v_keys = __pyx_t_2; __pyx_t_2 = 0; + /* "talib/_abstract.pxi":475 + * if isinstance(results, np.ndarray): + * keys = self.__outputs.keys() + * if not isinstance(keys, list): # <<<<<<<<<<<<<< + * keys = list(keys) + * self.__outputs[keys[0]] = results + */ __pyx_t_7 = PyList_Check(__pyx_v_keys); __pyx_t_6 = ((!(__pyx_t_7 != 0)) != 0); if (__pyx_t_6) { + /* "talib/_abstract.pxi":476 + * keys = self.__outputs.keys() + * if not isinstance(keys, list): + * keys = list(keys) # <<<<<<<<<<<<<< + * self.__outputs[keys[0]] = results + * else: + */ __pyx_t_2 = PySequence_List(__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_keys, __pyx_t_2); __pyx_t_2 = 0; - } - + /* "talib/_abstract.pxi":475 + * if isinstance(results, np.ndarray): + * keys = self.__outputs.keys() + * if not isinstance(keys, list): # <<<<<<<<<<<<<< + * keys = list(keys) + * self.__outputs[keys[0]] = results + */ + } + + /* "talib/_abstract.pxi":477 + * if not isinstance(keys, list): + * keys = list(keys) + * self.__outputs[keys[0]] = results # <<<<<<<<<<<<<< + * else: + * for i, output in enumerate(self.__outputs): + */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 477, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_keys, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 477, __pyx_L1_error) @@ -37478,9 +55554,23 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":473 + * # Use the func module to actually call the function. + * results = self.func_object(*args) + * if isinstance(results, np.ndarray): # <<<<<<<<<<<<<< + * keys = self.__outputs.keys() + * if not isinstance(keys, list): + */ goto __pyx_L12; } + /* "talib/_abstract.pxi":479 + * self.__outputs[keys[0]] = results + * else: + * for i, output in enumerate(self.__outputs): # <<<<<<<<<<<<<< + * self.__outputs[output] = results[i] + * self.__outputs_valid = True + */ /*else*/ { __Pyx_INCREF(__pyx_int_0); __pyx_t_3 = __pyx_int_0; @@ -37536,6 +55626,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __pyx_t_3 = __pyx_t_2; __pyx_t_2 = 0; + /* "talib/_abstract.pxi":480 + * else: + * for i, output in enumerate(self.__outputs): + * self.__outputs[output] = results[i] # <<<<<<<<<<<<<< + * self.__outputs_valid = True + * + */ __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_results, __pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 480, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 480, __pyx_L1_error) @@ -37544,14 +55641,35 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":479 + * self.__outputs[keys[0]] = results + * else: + * for i, output in enumerate(self.__outputs): # <<<<<<<<<<<<<< + * self.__outputs[output] = results[i] + * self.__outputs_valid = True + */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_L12:; + /* "talib/_abstract.pxi":481 + * for i, output in enumerate(self.__outputs): + * self.__outputs[output] = results[i] + * self.__outputs_valid = True # <<<<<<<<<<<<<< + * + * def __check_opt_input_value(self, input_name, value): + */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Function__outputs_valid, Py_True) < 0) __PYX_ERR(1, 481, __pyx_L1_error) + /* "talib/_abstract.pxi":453 + * return input_price_series_names + * + * def __call_function(self): # <<<<<<<<<<<<<< + * input_price_series_names = self.__input_price_series_names() + * + */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -37580,6 +55698,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CYTHON_UNU return __pyx_r; } +/* "talib/_abstract.pxi":483 + * self.__outputs_valid = True + * + * def __check_opt_input_value(self, input_name, value): # <<<<<<<<<<<<<< + * type_ = self.__opt_inputs[input_name]['type'] + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_39__check_opt_input_value(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -37671,6 +55796,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_38__check_opt_input_value(CY int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__check_opt_input_value", 0); + /* "talib/_abstract.pxi":484 + * + * def __check_opt_input_value(self, input_name, value): + * type_ = self.__opt_inputs[input_name]['type'] # <<<<<<<<<<<<<< + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: + * type_ = int + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_input_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 484, __pyx_L1_error) @@ -37682,6 +55814,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_38__check_opt_input_value(CY __pyx_v_type_ = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":485 + * def __check_opt_input_value(self, input_name, value): + * type_ = self.__opt_inputs[input_name]['type'] + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: # <<<<<<<<<<<<<< + * type_ = int + * elif type_ in {lib.TA_OptInput_RealList, lib.TA_OptInput_RealRange}: + */ __Pyx_INCREF(__pyx_v_type_); __pyx_t_1 = __pyx_v_type_; __pyx_t_2 = __Pyx_PyInt_From_TA_OptInputParameterType(TA_OptInput_IntegerList); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 485, __pyx_L1_error) @@ -37707,12 +55846,33 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_38__check_opt_input_value(CY __pyx_t_5 = (__pyx_t_3 != 0); if (__pyx_t_5) { + /* "talib/_abstract.pxi":486 + * type_ = self.__opt_inputs[input_name]['type'] + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: + * type_ = int # <<<<<<<<<<<<<< + * elif type_ in {lib.TA_OptInput_RealList, lib.TA_OptInput_RealRange}: + * type_ = float + */ __Pyx_INCREF(((PyObject *)(&PyInt_Type))); __Pyx_DECREF_SET(__pyx_v_type_, ((PyObject *)(&PyInt_Type))); + /* "talib/_abstract.pxi":485 + * def __check_opt_input_value(self, input_name, value): + * type_ = self.__opt_inputs[input_name]['type'] + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: # <<<<<<<<<<<<<< + * type_ = int + * elif type_ in {lib.TA_OptInput_RealList, lib.TA_OptInput_RealRange}: + */ goto __pyx_L3; } + /* "talib/_abstract.pxi":487 + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: + * type_ = int + * elif type_ in {lib.TA_OptInput_RealList, lib.TA_OptInput_RealRange}: # <<<<<<<<<<<<<< + * type_ = float + * + */ __Pyx_INCREF(__pyx_v_type_); __pyx_t_1 = __pyx_v_type_; __pyx_t_2 = __Pyx_PyInt_From_TA_OptInputParameterType(TA_OptInput_RealList); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 487, __pyx_L1_error) @@ -37738,27 +55898,76 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_38__check_opt_input_value(CY __pyx_t_3 = (__pyx_t_5 != 0); if (__pyx_t_3) { + /* "talib/_abstract.pxi":488 + * type_ = int + * elif type_ in {lib.TA_OptInput_RealList, lib.TA_OptInput_RealRange}: + * type_ = float # <<<<<<<<<<<<<< + * + * if isinstance(value, type_): + */ __Pyx_INCREF(((PyObject *)(&PyFloat_Type))); __Pyx_DECREF_SET(__pyx_v_type_, ((PyObject *)(&PyFloat_Type))); + /* "talib/_abstract.pxi":487 + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: + * type_ = int + * elif type_ in {lib.TA_OptInput_RealList, lib.TA_OptInput_RealRange}: # <<<<<<<<<<<<<< + * type_ = float + * + */ } __pyx_L3:; + /* "talib/_abstract.pxi":490 + * type_ = float + * + * if isinstance(value, type_): # <<<<<<<<<<<<<< + * return True + * elif value is not None: + */ __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_v_type_); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 490, __pyx_L1_error) __pyx_t_5 = (__pyx_t_3 != 0); if (__pyx_t_5) { + /* "talib/_abstract.pxi":491 + * + * if isinstance(value, type_): + * return True # <<<<<<<<<<<<<< + * elif value is not None: + * raise TypeError( + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_True); __pyx_r = Py_True; goto __pyx_L0; + /* "talib/_abstract.pxi":490 + * type_ = float + * + * if isinstance(value, type_): # <<<<<<<<<<<<<< + * return True + * elif value is not None: + */ } + /* "talib/_abstract.pxi":492 + * if isinstance(value, type_): + * return True + * elif value is not None: # <<<<<<<<<<<<<< + * raise TypeError( + * 'Invalid parameter value for %s (expected %s, got %s)' % ( + */ __pyx_t_5 = (__pyx_v_value != Py_None); __pyx_t_3 = (__pyx_t_5 != 0); if (unlikely(__pyx_t_3)) { + /* "talib/_abstract.pxi":495 + * raise TypeError( + * 'Invalid parameter value for %s (expected %s, got %s)' % ( + * input_name, type_.__name__, type(value).__name__)) # <<<<<<<<<<<<<< + * return False + * + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_type_, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 495, __pyx_L1_error) @@ -37775,10 +55984,24 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_38__check_opt_input_value(CY __pyx_t_1 = 0; __pyx_t_2 = 0; + /* "talib/_abstract.pxi":494 + * elif value is not None: + * raise TypeError( + * 'Invalid parameter value for %s (expected %s, got %s)' % ( # <<<<<<<<<<<<<< + * input_name, type_.__name__, type(value).__name__)) + * return False + */ __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_parameter_value_for_s_ex, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* "talib/_abstract.pxi":493 + * return True + * elif value is not None: + * raise TypeError( # <<<<<<<<<<<<<< + * 'Invalid parameter value for %s (expected %s, got %s)' % ( + * input_name, type_.__name__, type(value).__name__)) + */ __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -37786,13 +56009,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_38__check_opt_input_value(CY __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 493, __pyx_L1_error) + /* "talib/_abstract.pxi":492 + * if isinstance(value, type_): + * return True + * elif value is not None: # <<<<<<<<<<<<<< + * raise TypeError( + * 'Invalid parameter value for %s (expected %s, got %s)' % ( + */ } + /* "talib/_abstract.pxi":496 + * 'Invalid parameter value for %s (expected %s, got %s)' % ( + * input_name, type_.__name__, type(value).__name__)) + * return False # <<<<<<<<<<<<<< + * + * def __get_opt_input_value(self, input_name): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; goto __pyx_L0; + /* "talib/_abstract.pxi":483 + * self.__outputs_valid = True + * + * def __check_opt_input_value(self, input_name, value): # <<<<<<<<<<<<<< + * type_ = self.__opt_inputs[input_name]['type'] + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: + */ /* function exit code */ __pyx_L1_error:; @@ -37808,6 +56052,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_38__check_opt_input_value(CY return __pyx_r; } +/* "talib/_abstract.pxi":498 + * return False + * + * def __get_opt_input_value(self, input_name): # <<<<<<<<<<<<<< + * """ + * Returns the user-set value if there is one, otherwise the default. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_41__get_opt_input_value(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -37888,6 +56139,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_40__get_opt_input_value(CYTH int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__get_opt_input_value", 0); + /* "talib/_abstract.pxi":502 + * Returns the user-set value if there is one, otherwise the default. + * """ + * value = self.__opt_inputs[input_name]['value'] # <<<<<<<<<<<<<< + * if value is None: + * value = self.__opt_inputs[input_name]['default_value'] + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 502, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_input_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 502, __pyx_L1_error) @@ -37899,10 +56157,24 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_40__get_opt_input_value(CYTH __pyx_v_value = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":503 + * """ + * value = self.__opt_inputs[input_name]['value'] + * if value is None: # <<<<<<<<<<<<<< + * value = self.__opt_inputs[input_name]['default_value'] + * return value + */ __pyx_t_3 = (__pyx_v_value == Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { + /* "talib/_abstract.pxi":504 + * value = self.__opt_inputs[input_name]['value'] + * if value is None: + * value = self.__opt_inputs[input_name]['default_value'] # <<<<<<<<<<<<<< + * return value + * + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Function__opt_inputs); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 504, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_input_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 504, __pyx_L1_error) @@ -37914,13 +56186,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_40__get_opt_input_value(CYTH __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":503 + * """ + * value = self.__opt_inputs[input_name]['value'] + * if value is None: # <<<<<<<<<<<<<< + * value = self.__opt_inputs[input_name]['default_value'] + * return value + */ } + /* "talib/_abstract.pxi":505 + * if value is None: + * value = self.__opt_inputs[input_name]['default_value'] + * return value # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_value); __pyx_r = __pyx_v_value; goto __pyx_L0; + /* "talib/_abstract.pxi":498 + * return False + * + * def __get_opt_input_value(self, input_name): # <<<<<<<<<<<<<< + * """ + * Returns the user-set value if there is one, otherwise the default. + */ /* function exit code */ __pyx_L1_error:; @@ -37935,6 +56228,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_40__get_opt_input_value(CYTH return __pyx_r; } +/* "talib/_abstract.pxi":507 + * return value + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return '%s' % self.info + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_43__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -37960,6 +56260,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_42__repr__(CYTHON_UNUSED PyO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__repr__", 0); + /* "talib/_abstract.pxi":508 + * + * def __repr__(self): + * return '%s' % self.info # <<<<<<<<<<<<<< + * + * def __unicode__(self): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -37970,6 +56277,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_42__repr__(CYTHON_UNUSED PyO __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":507 + * return value + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return '%s' % self.info + * + */ /* function exit code */ __pyx_L1_error:; @@ -37983,6 +56297,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_42__repr__(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_abstract.pxi":510 + * return '%s' % self.info + * + * def __unicode__(self): # <<<<<<<<<<<<<< + * return unicode(self.__str__()) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_45__unicode__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -38009,6 +56330,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_44__unicode__(CYTHON_UNUSED int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__unicode__", 0); + /* "talib/_abstract.pxi":511 + * + * def __unicode__(self): + * return unicode(self.__str__()) # <<<<<<<<<<<<<< + * + * def __str__(self): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 511, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -38034,6 +56362,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_44__unicode__(CYTHON_UNUSED __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":510 + * return '%s' % self.info + * + * def __unicode__(self): # <<<<<<<<<<<<<< + * return unicode(self.__str__()) + * + */ /* function exit code */ __pyx_L1_error:; @@ -38048,6 +56383,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_44__unicode__(CYTHON_UNUSED return __pyx_r; } +/* "talib/_abstract.pxi":513 + * return unicode(self.__str__()) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return _get_defaults_and_docs(self.info)[1] # docstring includes defaults + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_47__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ @@ -38075,6 +56417,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_46__str__(CYTHON_UNUSED PyOb int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__str__", 0); + /* "talib/_abstract.pxi":514 + * + * def __str__(self): + * return _get_defaults_and_docs(self.info)[1] # docstring includes defaults # <<<<<<<<<<<<<< + * + * + */ __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_defaults_and_docs); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 514, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -38103,6 +56452,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_46__str__(CYTHON_UNUSED PyOb __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":513 + * return unicode(self.__str__()) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return _get_defaults_and_docs(self.info)[1] # docstring includes defaults + * + */ /* function exit code */ __pyx_L1_error:; @@ -38118,6 +56474,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_46__str__(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_abstract.pxi":527 + * # therefore recommended over using these functions directly. + * + * def _ta_getGroupTable(): # <<<<<<<<<<<<<< + * """ + * Returns the list of available TALIB function group names. *slow* + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_343_ta_getGroupTable(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ @@ -38150,35 +56513,84 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_342_ta_getGroupTable(CYTHON_UNUSED PyO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_getGroupTable", 0); + /* "talib/_abstract.pxi":532 + * """ + * cdef lib.TA_StringTable *table + * _ta_check_success('TA_GroupTableAlloc', lib.TA_GroupTableAlloc(&table)) # <<<<<<<<<<<<<< + * groups = [] + * for i in xrange(table.size): + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GroupTableAlloc, TA_GroupTableAlloc((&__pyx_v_table)), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":533 + * cdef lib.TA_StringTable *table + * _ta_check_success('TA_GroupTableAlloc', lib.TA_GroupTableAlloc(&table)) + * groups = [] # <<<<<<<<<<<<<< + * for i in xrange(table.size): + * groups.append(deref(&table.string[i])) + */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_groups = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":534 + * _ta_check_success('TA_GroupTableAlloc', lib.TA_GroupTableAlloc(&table)) + * groups = [] + * for i in xrange(table.size): # <<<<<<<<<<<<<< + * groups.append(deref(&table.string[i])) + * _ta_check_success('TA_GroupTableFree', lib.TA_GroupTableFree(table)) + */ __pyx_t_2 = __pyx_v_table->size; __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; + /* "talib/_abstract.pxi":535 + * groups = [] + * for i in xrange(table.size): + * groups.append(deref(&table.string[i])) # <<<<<<<<<<<<<< + * _ta_check_success('TA_GroupTableFree', lib.TA_GroupTableFree(table)) + * return groups + */ __pyx_t_1 = __Pyx_PyBytes_FromString((*(&(__pyx_v_table->string[__pyx_v_i])))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 535, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_groups, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 535, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } + /* "talib/_abstract.pxi":536 + * for i in xrange(table.size): + * groups.append(deref(&table.string[i])) + * _ta_check_success('TA_GroupTableFree', lib.TA_GroupTableFree(table)) # <<<<<<<<<<<<<< + * return groups + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GroupTableFree, TA_GroupTableFree(__pyx_v_table), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":537 + * groups.append(deref(&table.string[i])) + * _ta_check_success('TA_GroupTableFree', lib.TA_GroupTableFree(table)) + * return groups # <<<<<<<<<<<<<< + * + * def _ta_getFuncTable(char *group): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_groups); __pyx_r = __pyx_v_groups; goto __pyx_L0; + /* "talib/_abstract.pxi":527 + * # therefore recommended over using these functions directly. + * + * def _ta_getGroupTable(): # <<<<<<<<<<<<<< + * """ + * Returns the list of available TALIB function group names. *slow* + */ /* function exit code */ __pyx_L1_error:; @@ -38192,6 +56604,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_342_ta_getGroupTable(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_abstract.pxi":539 + * return groups + * + * def _ta_getFuncTable(char *group): # <<<<<<<<<<<<<< + * """ + * Returns a list of the functions for the specified group name. *slow* + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_345_ta_getFuncTable(PyObject *__pyx_self, PyObject *__pyx_arg_group); /*proto*/ @@ -38237,35 +56656,84 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_344_ta_getFuncTable(CYTHON_UNUSED PyOb int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_getFuncTable", 0); + /* "talib/_abstract.pxi":544 + * """ + * cdef lib.TA_StringTable *table + * _ta_check_success('TA_FuncTableAlloc', lib.TA_FuncTableAlloc(group, &table)) # <<<<<<<<<<<<<< + * functions = [] + * for i in xrange(table.size): + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_FuncTableAlloc, TA_FuncTableAlloc(__pyx_v_group, (&__pyx_v_table)), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":545 + * cdef lib.TA_StringTable *table + * _ta_check_success('TA_FuncTableAlloc', lib.TA_FuncTableAlloc(group, &table)) + * functions = [] # <<<<<<<<<<<<<< + * for i in xrange(table.size): + * functions.append(deref(&table.string[i])) + */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_functions = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":546 + * _ta_check_success('TA_FuncTableAlloc', lib.TA_FuncTableAlloc(group, &table)) + * functions = [] + * for i in xrange(table.size): # <<<<<<<<<<<<<< + * functions.append(deref(&table.string[i])) + * _ta_check_success('TA_FuncTableFree', lib.TA_FuncTableFree(table)) + */ __pyx_t_2 = __pyx_v_table->size; __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; + /* "talib/_abstract.pxi":547 + * functions = [] + * for i in xrange(table.size): + * functions.append(deref(&table.string[i])) # <<<<<<<<<<<<<< + * _ta_check_success('TA_FuncTableFree', lib.TA_FuncTableFree(table)) + * return functions + */ __pyx_t_1 = __Pyx_PyBytes_FromString((*(&(__pyx_v_table->string[__pyx_v_i])))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 547, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_functions, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 547, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } + /* "talib/_abstract.pxi":548 + * for i in xrange(table.size): + * functions.append(deref(&table.string[i])) + * _ta_check_success('TA_FuncTableFree', lib.TA_FuncTableFree(table)) # <<<<<<<<<<<<<< + * return functions + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_FuncTableFree, TA_FuncTableFree(__pyx_v_table), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":549 + * functions.append(deref(&table.string[i])) + * _ta_check_success('TA_FuncTableFree', lib.TA_FuncTableFree(table)) + * return functions # <<<<<<<<<<<<<< + * + * def __get_flags(int flag, dict flags_lookup_dict): + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_functions); __pyx_r = __pyx_v_functions; goto __pyx_L0; + /* "talib/_abstract.pxi":539 + * return groups + * + * def _ta_getFuncTable(char *group): # <<<<<<<<<<<<<< + * """ + * Returns a list of the functions for the specified group name. *slow* + */ /* function exit code */ __pyx_L1_error:; @@ -38279,6 +56747,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_344_ta_getFuncTable(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_abstract.pxi":551 + * return functions + * + * def __get_flags(int flag, dict flags_lookup_dict): # <<<<<<<<<<<<<< + * """ + * TA-LIB provides hints for multiple flags as a bitwise-ORed int. + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_347__get_flags(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -38375,6 +56850,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__get_flags", 0); + /* "talib/_abstract.pxi":557 + * flags_lookup_dict. + * """ + * value_range = flags_lookup_dict.keys() # <<<<<<<<<<<<<< + * if not isinstance(value_range, list): + * value_range = list(value_range) + */ if (unlikely(__pyx_v_flags_lookup_dict == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys"); __PYX_ERR(1, 557, __pyx_L1_error) @@ -38384,17 +56866,45 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject __pyx_v_value_range = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":558 + * """ + * value_range = flags_lookup_dict.keys() + * if not isinstance(value_range, list): # <<<<<<<<<<<<<< + * value_range = list(value_range) + * min_int = int(math.log(min(value_range), 2)) + */ __pyx_t_2 = PyList_Check(__pyx_v_value_range); __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0); if (__pyx_t_3) { + /* "talib/_abstract.pxi":559 + * value_range = flags_lookup_dict.keys() + * if not isinstance(value_range, list): + * value_range = list(value_range) # <<<<<<<<<<<<<< + * min_int = int(math.log(min(value_range), 2)) + * max_int = int(math.log(max(value_range), 2)) + */ __pyx_t_1 = PySequence_List(__pyx_v_value_range); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_value_range, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":558 + * """ + * value_range = flags_lookup_dict.keys() + * if not isinstance(value_range, list): # <<<<<<<<<<<<<< + * value_range = list(value_range) + * min_int = int(math.log(min(value_range), 2)) + */ } + /* "talib/_abstract.pxi":560 + * if not isinstance(value_range, list): + * value_range = list(value_range) + * min_int = int(math.log(min(value_range), 2)) # <<<<<<<<<<<<<< + * max_int = int(math.log(max(value_range), 2)) + * + */ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_math); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_log); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 560, __pyx_L1_error) @@ -38455,6 +56965,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject __pyx_v_min_int = __pyx_t_5; __pyx_t_5 = 0; + /* "talib/_abstract.pxi":561 + * value_range = list(value_range) + * min_int = int(math.log(min(value_range), 2)) + * max_int = int(math.log(max(value_range), 2)) # <<<<<<<<<<<<<< + * + * # if the flag we got is out-of-range, it just means no extra info provided + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_math); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 561, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_log); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 561, __pyx_L1_error) @@ -38515,6 +57032,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject __pyx_v_max_int = __pyx_t_8; __pyx_t_8 = 0; + /* "talib/_abstract.pxi":564 + * + * # if the flag we got is out-of-range, it just means no extra info provided + * if flag < 1 or flag > 2**max_int: # <<<<<<<<<<<<<< + * return None + * + */ __pyx_t_2 = ((__pyx_v_flag < 1) != 0); if (!__pyx_t_2) { } else { @@ -38534,17 +57058,45 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject __pyx_L5_bool_binop_done:; if (__pyx_t_3) { + /* "talib/_abstract.pxi":565 + * # if the flag we got is out-of-range, it just means no extra info provided + * if flag < 1 or flag > 2**max_int: + * return None # <<<<<<<<<<<<<< + * + * # In this loop, i is essentially the bit-position, which represents an + */ __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; + /* "talib/_abstract.pxi":564 + * + * # if the flag we got is out-of-range, it just means no extra info provided + * if flag < 1 or flag > 2**max_int: # <<<<<<<<<<<<<< + * return None + * + */ } + /* "talib/_abstract.pxi":570 + * # input from flags_lookup_dict. We loop through as many flags_lookup_dict + * # bit-positions as we need to check, bitwise-ANDing each with flag for a hit. + * ret = [] # <<<<<<<<<<<<<< + * for i in xrange(min_int, max_int+1): + * if 2**i & flag: + */ __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_ret = ((PyObject*)__pyx_t_6); __pyx_t_6 = 0; + /* "talib/_abstract.pxi":571 + * # bit-positions as we need to check, bitwise-ANDing each with flag for a hit. + * ret = [] + * for i in xrange(min_int, max_int+1): # <<<<<<<<<<<<<< + * if 2**i & flag: + * ret.append(flags_lookup_dict[2**i]) + */ __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_v_max_int, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 571, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 571, __pyx_L1_error) @@ -38601,6 +57153,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_6); __pyx_t_6 = 0; + /* "talib/_abstract.pxi":572 + * ret = [] + * for i in xrange(min_int, max_int+1): + * if 2**i & flag: # <<<<<<<<<<<<<< + * ret.append(flags_lookup_dict[2**i]) + * return ret + */ __pyx_t_6 = __Pyx_PyNumber_PowerOf2(__pyx_int_2, __pyx_v_i, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_flag); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 572, __pyx_L1_error) @@ -38613,6 +57172,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { + /* "talib/_abstract.pxi":573 + * for i in xrange(min_int, max_int+1): + * if 2**i & flag: + * ret.append(flags_lookup_dict[2**i]) # <<<<<<<<<<<<<< + * return ret + * + */ if (unlikely(__pyx_v_flags_lookup_dict == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(1, 573, __pyx_L1_error) @@ -38625,16 +57191,44 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_ret, __pyx_t_8); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 573, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - + /* "talib/_abstract.pxi":572 + * ret = [] + * for i in xrange(min_int, max_int+1): + * if 2**i & flag: # <<<<<<<<<<<<<< + * ret.append(flags_lookup_dict[2**i]) + * return ret + */ + } + + /* "talib/_abstract.pxi":571 + * # bit-positions as we need to check, bitwise-ANDing each with flag for a hit. + * ret = [] + * for i in xrange(min_int, max_int+1): # <<<<<<<<<<<<<< + * if 2**i & flag: + * ret.append(flags_lookup_dict[2**i]) + */ } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + /* "talib/_abstract.pxi":574 + * if 2**i & flag: + * ret.append(flags_lookup_dict[2**i]) + * return ret # <<<<<<<<<<<<<< + * + * TA_FUNC_FLAGS = { + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; + /* "talib/_abstract.pxi":551 + * return functions + * + * def __get_flags(int flag, dict flags_lookup_dict): # <<<<<<<<<<<<<< + * """ + * TA-LIB provides hints for multiple flags as a bitwise-ORed int. + */ /* function exit code */ __pyx_L1_error:; @@ -38656,6 +57250,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_346__get_flags(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_abstract.pxi":610 + * } + * + * def _ta_getFuncInfo(char *function_name): # <<<<<<<<<<<<<< + * """ + * Returns the info dict for the function. It has the following keys: name, + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_349_ta_getFuncInfo(PyObject *__pyx_self, PyObject *__pyx_arg_function_name); /*proto*/ @@ -38703,14 +57304,42 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_getFuncInfo", 0); + /* "talib/_abstract.pxi":616 + * """ + * cdef lib.TA_FuncInfo *info + * retCode = lib.TA_GetFuncInfo(__ta_getFuncHandle(function_name), &info) # <<<<<<<<<<<<<< + * _ta_check_success('TA_GetFuncInfo', retCode) + * + */ __pyx_v_retCode = TA_GetFuncInfo(__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(__pyx_v_function_name), (&__pyx_v_info)); + /* "talib/_abstract.pxi":617 + * cdef lib.TA_FuncInfo *info + * retCode = lib.TA_GetFuncInfo(__ta_getFuncHandle(function_name), &info) + * _ta_check_success('TA_GetFuncInfo', retCode) # <<<<<<<<<<<<<< + * + * return { + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GetFuncInfo, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 617, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":619 + * _ta_check_success('TA_GetFuncInfo', retCode) + * + * return { # <<<<<<<<<<<<<< + * 'name': bytes2str(info.name), + * 'group': bytes2str(info.group), + */ __Pyx_XDECREF(__pyx_r); + /* "talib/_abstract.pxi":620 + * + * return { + * 'name': bytes2str(info.name), # <<<<<<<<<<<<<< + * 'group': bytes2str(info.group), + * 'display_name': bytes2str(info.hint), + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_bytes2str); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 620, __pyx_L1_error) @@ -38736,6 +57365,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_name, __pyx_t_2) < 0) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":621 + * return { + * 'name': bytes2str(info.name), + * 'group': bytes2str(info.group), # <<<<<<<<<<<<<< + * 'display_name': bytes2str(info.hint), + * 'function_flags': __get_flags(info.flags, TA_FUNC_FLAGS), + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_bytes2str); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_info->group); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 621, __pyx_L1_error) @@ -38759,6 +57395,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_group, __pyx_t_2) < 0) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":622 + * 'name': bytes2str(info.name), + * 'group': bytes2str(info.group), + * 'display_name': bytes2str(info.hint), # <<<<<<<<<<<<<< + * 'function_flags': __get_flags(info.flags, TA_FUNC_FLAGS), + * 'num_inputs': int(info.nbInput), + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_bytes2str); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 622, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_info->hint); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 622, __pyx_L1_error) @@ -38782,6 +57425,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_display_name, __pyx_t_2) < 0) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":623 + * 'group': bytes2str(info.group), + * 'display_name': bytes2str(info.hint), + * 'function_flags': __get_flags(info.flags, TA_FUNC_FLAGS), # <<<<<<<<<<<<<< + * 'num_inputs': int(info.nbInput), + * 'num_opt_inputs': int(info.nbOptInput), + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 623, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_TA_FuncFlags(__pyx_v_info->flags); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 623, __pyx_L1_error) @@ -38840,6 +57490,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_function_flags, __pyx_t_2) < 0) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":624 + * 'display_name': bytes2str(info.hint), + * 'function_flags': __get_flags(info.flags, TA_FUNC_FLAGS), + * 'num_inputs': int(info.nbInput), # <<<<<<<<<<<<<< + * 'num_opt_inputs': int(info.nbOptInput), + * 'num_outputs': int(info.nbOutput) + */ __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_info->nbInput); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 624, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyInt_Type)), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 624, __pyx_L1_error) @@ -38848,6 +57505,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_inputs, __pyx_t_3) < 0) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":625 + * 'function_flags': __get_flags(info.flags, TA_FUNC_FLAGS), + * 'num_inputs': int(info.nbInput), + * 'num_opt_inputs': int(info.nbOptInput), # <<<<<<<<<<<<<< + * 'num_outputs': int(info.nbOutput) + * } + */ __pyx_t_3 = __Pyx_PyInt_From_unsigned_int(__pyx_v_info->nbOptInput); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyInt_Type)), __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 625, __pyx_L1_error) @@ -38856,6 +57520,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_opt_inputs, __pyx_t_2) < 0) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":626 + * 'num_inputs': int(info.nbInput), + * 'num_opt_inputs': int(info.nbOptInput), + * 'num_outputs': int(info.nbOutput) # <<<<<<<<<<<<<< + * } + * + */ __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_info->nbOutput); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyInt_Type)), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 626, __pyx_L1_error) @@ -38867,6 +57538,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":610 + * } + * + * def _ta_getFuncInfo(char *function_name): # <<<<<<<<<<<<<< + * """ + * Returns the info dict for the function. It has the following keys: name, + */ /* function exit code */ __pyx_L1_error:; @@ -38885,6 +57563,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_abstract.pxi":629 + * } + * + * def _ta_getInputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's input info dict for the given index. It has two + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_351_ta_getInputParameterInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -38974,12 +57659,33 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_350_ta_getInputParameterInfo(CYTHON_UN int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_getInputParameterInfo", 0); + /* "talib/_abstract.pxi":635 + * """ + * cdef lib.TA_InputParameterInfo *info + * retCode = lib.TA_GetInputParameterInfo(__ta_getFuncHandle(function_name), idx, &info) # <<<<<<<<<<<<<< + * _ta_check_success('TA_GetInputParameterInfo', retCode) + * + */ __pyx_v_retCode = TA_GetInputParameterInfo(__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(__pyx_v_function_name), __pyx_v_idx, (&__pyx_v_info)); + /* "talib/_abstract.pxi":636 + * cdef lib.TA_InputParameterInfo *info + * retCode = lib.TA_GetInputParameterInfo(__ta_getFuncHandle(function_name), idx, &info) + * _ta_check_success('TA_GetInputParameterInfo', retCode) # <<<<<<<<<<<<<< + * + * name = bytes2str(info.paramName) + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GetInputParameterInfo, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":638 + * _ta_check_success('TA_GetInputParameterInfo', retCode) + * + * name = bytes2str(info.paramName) # <<<<<<<<<<<<<< + * name = name[len('in'):].lower() + * if 'real' in name: + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_bytes2str); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 638, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_info->paramName); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 638, __pyx_L1_error) @@ -39003,6 +57709,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_350_ta_getInputParameterInfo(CYTHON_UN __pyx_v_name = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":639 + * + * name = bytes2str(info.paramName) + * name = name[len('in'):].lower() # <<<<<<<<<<<<<< + * if 'real' in name: + * name = name.replace('real', 'price') + */ __pyx_t_5 = PyObject_Length(__pyx_n_s_in); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 639, __pyx_L1_error) __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_name, __pyx_t_5, 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -39027,10 +57740,24 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_350_ta_getInputParameterInfo(CYTHON_UN __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":640 + * name = bytes2str(info.paramName) + * name = name[len('in'):].lower() + * if 'real' in name: # <<<<<<<<<<<<<< + * name = name.replace('real', 'price') + * elif 'price' in name: + */ __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_real, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 640, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { + /* "talib/_abstract.pxi":641 + * name = name[len('in'):].lower() + * if 'real' in name: + * name = name.replace('real', 'price') # <<<<<<<<<<<<<< + * elif 'price' in name: + * name = 'prices' + */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 641, __pyx_L1_error) @@ -39039,25 +57766,74 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_350_ta_getInputParameterInfo(CYTHON_UN __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":640 + * name = bytes2str(info.paramName) + * name = name[len('in'):].lower() + * if 'real' in name: # <<<<<<<<<<<<<< + * name = name.replace('real', 'price') + * elif 'price' in name: + */ goto __pyx_L3; } + /* "talib/_abstract.pxi":642 + * if 'real' in name: + * name = name.replace('real', 'price') + * elif 'price' in name: # <<<<<<<<<<<<<< + * name = 'prices' + * + */ __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_price, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(1, 642, __pyx_L1_error) __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { + /* "talib/_abstract.pxi":643 + * name = name.replace('real', 'price') + * elif 'price' in name: + * name = 'prices' # <<<<<<<<<<<<<< + * + * return { + */ __Pyx_INCREF(__pyx_n_s_prices); __Pyx_DECREF_SET(__pyx_v_name, __pyx_n_s_prices); + /* "talib/_abstract.pxi":642 + * if 'real' in name: + * name = name.replace('real', 'price') + * elif 'price' in name: # <<<<<<<<<<<<<< + * name = 'prices' + * + */ } __pyx_L3:; + /* "talib/_abstract.pxi":645 + * name = 'prices' + * + * return { # <<<<<<<<<<<<<< + * 'name': name, + * 'price_series': __get_flags(info.flags, TA_INPUT_FLAGS) + */ __Pyx_XDECREF(__pyx_r); + /* "talib/_abstract.pxi":646 + * + * return { + * 'name': name, # <<<<<<<<<<<<<< + * 'price_series': __get_flags(info.flags, TA_INPUT_FLAGS) + * } + */ __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 646, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(1, 646, __pyx_L1_error) + /* "talib/_abstract.pxi":647 + * return { + * 'name': name, + * 'price_series': __get_flags(info.flags, TA_INPUT_FLAGS) # <<<<<<<<<<<<<< + * } + * + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyInt_From_TA_InputFlags(__pyx_v_info->flags); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 647, __pyx_L1_error) @@ -39119,6 +57895,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_350_ta_getInputParameterInfo(CYTHON_UN __pyx_t_3 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":629 + * } + * + * def _ta_getInputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's input info dict for the given index. It has two + */ /* function exit code */ __pyx_L1_error:; @@ -39138,6 +57921,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_350_ta_getInputParameterInfo(CYTHON_UN return __pyx_r; } +/* "talib/_abstract.pxi":650 + * } + * + * def _ta_getOptInputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's opt_input info dict for the given index. It has the + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_353_ta_getOptInputParameterInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -39224,12 +58014,33 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_352_ta_getOptInputParameterInfo(CYTHON int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_getOptInputParameterInfo", 0); + /* "talib/_abstract.pxi":656 + * """ + * cdef lib.TA_OptInputParameterInfo *info + * retCode = lib.TA_GetOptInputParameterInfo(__ta_getFuncHandle(function_name), idx, &info) # <<<<<<<<<<<<<< + * _ta_check_success('TA_GetOptInputParameterInfo', retCode) + * + */ __pyx_v_retCode = TA_GetOptInputParameterInfo(__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(__pyx_v_function_name), __pyx_v_idx, (&__pyx_v_info)); + /* "talib/_abstract.pxi":657 + * cdef lib.TA_OptInputParameterInfo *info + * retCode = lib.TA_GetOptInputParameterInfo(__ta_getFuncHandle(function_name), idx, &info) + * _ta_check_success('TA_GetOptInputParameterInfo', retCode) # <<<<<<<<<<<<<< + * + * name = bytes2str(info.paramName) + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GetOptInputParameterInfo, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":659 + * _ta_check_success('TA_GetOptInputParameterInfo', retCode) + * + * name = bytes2str(info.paramName) # <<<<<<<<<<<<<< + * name = name[len('optIn'):].lower() + * default_value = info.defaultValue + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_bytes2str); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_info->paramName); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 659, __pyx_L1_error) @@ -39253,6 +58064,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_352_ta_getOptInputParameterInfo(CYTHON __pyx_v_name = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":660 + * + * name = bytes2str(info.paramName) + * name = name[len('optIn'):].lower() # <<<<<<<<<<<<<< + * default_value = info.defaultValue + * if default_value % 1 == 0: + */ __pyx_t_5 = PyObject_Length(__pyx_n_s_optIn); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 660, __pyx_L1_error) __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_name, __pyx_t_5, 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 660, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -39277,11 +58095,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_352_ta_getOptInputParameterInfo(CYTHON __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":661 + * name = bytes2str(info.paramName) + * name = name[len('optIn'):].lower() + * default_value = info.defaultValue # <<<<<<<<<<<<<< + * if default_value % 1 == 0: + * default_value = int(default_value) + */ __pyx_t_1 = PyFloat_FromDouble(__pyx_v_info->defaultValue); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 661, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_default_value = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":662 + * name = name[len('optIn'):].lower() + * default_value = info.defaultValue + * if default_value % 1 == 0: # <<<<<<<<<<<<<< + * default_value = int(default_value) + * + */ __pyx_t_1 = __Pyx_PyInt_RemainderObjC(__pyx_v_default_value, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 662, __pyx_L1_error) @@ -39291,19 +58123,54 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_352_ta_getOptInputParameterInfo(CYTHON __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { + /* "talib/_abstract.pxi":663 + * default_value = info.defaultValue + * if default_value % 1 == 0: + * default_value = int(default_value) # <<<<<<<<<<<<<< + * + * return { + */ __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_default_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_default_value, __pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":662 + * name = name[len('optIn'):].lower() + * default_value = info.defaultValue + * if default_value % 1 == 0: # <<<<<<<<<<<<<< + * default_value = int(default_value) + * + */ } + /* "talib/_abstract.pxi":665 + * default_value = int(default_value) + * + * return { # <<<<<<<<<<<<<< + * 'name': name, + * 'display_name': bytes2str(info.displayName), + */ __Pyx_XDECREF(__pyx_r); + /* "talib/_abstract.pxi":666 + * + * return { + * 'name': name, # <<<<<<<<<<<<<< + * 'display_name': bytes2str(info.displayName), + * 'type': info.type, + */ __pyx_t_3 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(1, 666, __pyx_L1_error) + /* "talib/_abstract.pxi":667 + * return { + * 'name': name, + * 'display_name': bytes2str(info.displayName), # <<<<<<<<<<<<<< + * 'type': info.type, + * 'help': bytes2str(info.hint), + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_bytes2str); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_info->displayName); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 667, __pyx_L1_error) @@ -39327,11 +58194,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_352_ta_getOptInputParameterInfo(CYTHON if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_display_name, __pyx_t_1) < 0) __PYX_ERR(1, 666, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":668 + * 'name': name, + * 'display_name': bytes2str(info.displayName), + * 'type': info.type, # <<<<<<<<<<<<<< + * 'help': bytes2str(info.hint), + * 'default_value': default_value, + */ __pyx_t_1 = __Pyx_PyInt_From_TA_OptInputParameterType(__pyx_v_info->type); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_type_2, __pyx_t_1) < 0) __PYX_ERR(1, 666, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":669 + * 'display_name': bytes2str(info.displayName), + * 'type': info.type, + * 'help': bytes2str(info.hint), # <<<<<<<<<<<<<< + * 'default_value': default_value, + * 'value': None + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_bytes2str); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_info->hint); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 669, __pyx_L1_error) @@ -39355,13 +58236,34 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_352_ta_getOptInputParameterInfo(CYTHON if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_help, __pyx_t_1) < 0) __PYX_ERR(1, 666, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":670 + * 'type': info.type, + * 'help': bytes2str(info.hint), + * 'default_value': default_value, # <<<<<<<<<<<<<< + * 'value': None + * } + */ if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_default_value, __pyx_v_default_value) < 0) __PYX_ERR(1, 666, __pyx_L1_error) + /* "talib/_abstract.pxi":671 + * 'help': bytes2str(info.hint), + * 'default_value': default_value, + * 'value': None # <<<<<<<<<<<<<< + * } + * + */ if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_value, Py_None) < 0) __PYX_ERR(1, 666, __pyx_L1_error) __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":650 + * } + * + * def _ta_getOptInputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's opt_input info dict for the given index. It has the + */ /* function exit code */ __pyx_L1_error:; @@ -39380,6 +58282,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_352_ta_getOptInputParameterInfo(CYTHON return __pyx_r; } +/* "talib/_abstract.pxi":674 + * } + * + * def _ta_getOutputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's output info dict for the given index. It has two + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_355_ta_getOutputParameterInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -39470,12 +58379,33 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_354_ta_getOutputParameterInfo(CYTHON_U int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_ta_getOutputParameterInfo", 0); + /* "talib/_abstract.pxi":680 + * """ + * cdef lib.TA_OutputParameterInfo *info + * retCode = lib.TA_GetOutputParameterInfo(__ta_getFuncHandle(function_name), idx, &info) # <<<<<<<<<<<<<< + * _ta_check_success('TA_GetOutputParameterInfo', retCode) + * + */ __pyx_v_retCode = TA_GetOutputParameterInfo(__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(__pyx_v_function_name), __pyx_v_idx, (&__pyx_v_info)); + /* "talib/_abstract.pxi":681 + * cdef lib.TA_OutputParameterInfo *info + * retCode = lib.TA_GetOutputParameterInfo(__ta_getFuncHandle(function_name), idx, &info) + * _ta_check_success('TA_GetOutputParameterInfo', retCode) # <<<<<<<<<<<<<< + * + * name = bytes2str(info.paramName) + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GetOutputParameterInfo, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":683 + * _ta_check_success('TA_GetOutputParameterInfo', retCode) + * + * name = bytes2str(info.paramName) # <<<<<<<<<<<<<< + * name = name[len('out'):].lower() + * # chop off leading 'real' if a descriptive name follows + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_bytes2str); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_info->paramName); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 683, __pyx_L1_error) @@ -39499,6 +58429,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_354_ta_getOutputParameterInfo(CYTHON_U __pyx_v_name = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_abstract.pxi":684 + * + * name = bytes2str(info.paramName) + * name = name[len('out'):].lower() # <<<<<<<<<<<<<< + * # chop off leading 'real' if a descriptive name follows + * if 'real' in name and name not in ['real', 'real0', 'real1']: + */ __pyx_t_5 = PyObject_Length(__pyx_n_s_out); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 684, __pyx_L1_error) __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_name, __pyx_t_5, 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 684, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -39523,6 +58460,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_354_ta_getOutputParameterInfo(CYTHON_U __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":686 + * name = name[len('out'):].lower() + * # chop off leading 'real' if a descriptive name follows + * if 'real' in name and name not in ['real', 'real0', 'real1']: # <<<<<<<<<<<<<< + * name = name[len('real'):] + * + */ __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_real, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(1, 686, __pyx_L1_error) __pyx_t_8 = (__pyx_t_7 != 0); if (__pyx_t_8) { @@ -39553,20 +58497,55 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_354_ta_getOutputParameterInfo(CYTHON_U __pyx_L4_bool_binop_done:; if (__pyx_t_6) { + /* "talib/_abstract.pxi":687 + * # chop off leading 'real' if a descriptive name follows + * if 'real' in name and name not in ['real', 'real0', 'real1']: + * name = name[len('real'):] # <<<<<<<<<<<<<< + * + * return { + */ __pyx_t_5 = PyObject_Length(__pyx_n_s_real); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 687, __pyx_L1_error) __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_name, __pyx_t_5, 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":686 + * name = name[len('out'):].lower() + * # chop off leading 'real' if a descriptive name follows + * if 'real' in name and name not in ['real', 'real0', 'real1']: # <<<<<<<<<<<<<< + * name = name[len('real'):] + * + */ } + /* "talib/_abstract.pxi":689 + * name = name[len('real'):] + * + * return { # <<<<<<<<<<<<<< + * 'name': name, + * 'flags': __get_flags(info.flags, TA_OUTPUT_FLAGS) + */ __Pyx_XDECREF(__pyx_r); + /* "talib/_abstract.pxi":690 + * + * return { + * 'name': name, # <<<<<<<<<<<<<< + * 'flags': __get_flags(info.flags, TA_OUTPUT_FLAGS) + * } + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(1, 690, __pyx_L1_error) + /* "talib/_abstract.pxi":691 + * return { + * 'name': name, + * 'flags': __get_flags(info.flags, TA_OUTPUT_FLAGS) # <<<<<<<<<<<<<< + * } + * + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyInt_From_TA_OutputFlags(__pyx_v_info->flags); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 691, __pyx_L1_error) @@ -39628,6 +58607,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_354_ta_getOutputParameterInfo(CYTHON_U __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":674 + * } + * + * def _ta_getOutputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's output info dict for the given index. It has two + */ /* function exit code */ __pyx_L1_error:; @@ -39647,6 +58633,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_354_ta_getOutputParameterInfo(CYTHON_U return __pyx_r; } +/* "talib/_abstract.pxi":694 + * } + * + * def _get_defaults_and_docs(func_info): # <<<<<<<<<<<<<< + * """ + * Returns a tuple with two outputs: defaults, a dict of parameter defaults, + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_357_get_defaults_and_docs(PyObject *__pyx_self, PyObject *__pyx_v_func_info); /*proto*/ @@ -39693,11 +58686,25 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_get_defaults_and_docs", 0); + /* "talib/_abstract.pxi":700 + * .. Note: func_info should come from Function.info, *not* _ta_getFuncInfo. + * """ + * defaults = {} # <<<<<<<<<<<<<< + * func_line = [func_info['name'], '('] + * func_args = ['[input_arrays]'] + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_defaults = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":701 + * """ + * defaults = {} + * func_line = [func_info['name'], '('] # <<<<<<<<<<<<<< + * func_args = ['[input_arrays]'] + * docs = [] + */ __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_func_info, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 701, __pyx_L1_error) @@ -39711,6 +58718,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __pyx_v_func_line = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":702 + * defaults = {} + * func_line = [func_info['name'], '('] + * func_args = ['[input_arrays]'] # <<<<<<<<<<<<<< + * docs = [] + * docs.append('%(display_name)s (%(group)s)\n' % func_info) + */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 702, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_kp_s_input_arrays_2); @@ -39719,23 +58733,58 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __pyx_v_func_args = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":703 + * func_line = [func_info['name'], '('] + * func_args = ['[input_arrays]'] + * docs = [] # <<<<<<<<<<<<<< + * docs.append('%(display_name)s (%(group)s)\n' % func_info) + * + */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_docs = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":704 + * func_args = ['[input_arrays]'] + * docs = [] + * docs.append('%(display_name)s (%(group)s)\n' % func_info) # <<<<<<<<<<<<<< + * + * input_names = func_info['input_names'] + */ __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_display_name_s_group_s, __pyx_v_func_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_docs, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 704, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":706 + * docs.append('%(display_name)s (%(group)s)\n' % func_info) + * + * input_names = func_info['input_names'] # <<<<<<<<<<<<<< + * docs.append('Inputs:') + * for input_name in input_names: + */ __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_func_info, __pyx_n_s_input_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_input_names = __pyx_t_2; __pyx_t_2 = 0; + /* "talib/_abstract.pxi":707 + * + * input_names = func_info['input_names'] + * docs.append('Inputs:') # <<<<<<<<<<<<<< + * for input_name in input_names: + * value = input_names[input_name] + */ __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_docs, __pyx_kp_s_Inputs); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 707, __pyx_L1_error) + /* "talib/_abstract.pxi":708 + * input_names = func_info['input_names'] + * docs.append('Inputs:') + * for input_name in input_names: # <<<<<<<<<<<<<< + * value = input_names[input_name] + * if not isinstance(value, list): + */ if (likely(PyList_CheckExact(__pyx_v_input_names)) || PyTuple_CheckExact(__pyx_v_input_names)) { __pyx_t_2 = __pyx_v_input_names; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; __pyx_t_5 = NULL; @@ -39778,20 +58827,55 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __Pyx_XDECREF_SET(__pyx_v_input_name, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":709 + * docs.append('Inputs:') + * for input_name in input_names: + * value = input_names[input_name] # <<<<<<<<<<<<<< + * if not isinstance(value, list): + * value = '(any ndarray)' + */ __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_input_names, __pyx_v_input_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 709, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":710 + * for input_name in input_names: + * value = input_names[input_name] + * if not isinstance(value, list): # <<<<<<<<<<<<<< + * value = '(any ndarray)' + * docs.append(' %s: %s' % (input_name, value)) + */ __pyx_t_6 = PyList_Check(__pyx_v_value); __pyx_t_7 = ((!(__pyx_t_6 != 0)) != 0); if (__pyx_t_7) { + /* "talib/_abstract.pxi":711 + * value = input_names[input_name] + * if not isinstance(value, list): + * value = '(any ndarray)' # <<<<<<<<<<<<<< + * docs.append(' %s: %s' % (input_name, value)) + * + */ __Pyx_INCREF(__pyx_kp_s_any_ndarray); __Pyx_DECREF_SET(__pyx_v_value, __pyx_kp_s_any_ndarray); - } - + /* "talib/_abstract.pxi":710 + * for input_name in input_names: + * value = input_names[input_name] + * if not isinstance(value, list): # <<<<<<<<<<<<<< + * value = '(any ndarray)' + * docs.append(' %s: %s' % (input_name, value)) + */ + } + + /* "talib/_abstract.pxi":712 + * if not isinstance(value, list): + * value = '(any ndarray)' + * docs.append(' %s: %s' % (input_name, value)) # <<<<<<<<<<<<<< + * + * params = func_info['parameters'] + */ __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 712, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_input_name); @@ -39806,21 +58890,63 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_docs, __pyx_t_8); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 712, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + /* "talib/_abstract.pxi":708 + * input_names = func_info['input_names'] + * docs.append('Inputs:') + * for input_name in input_names: # <<<<<<<<<<<<<< + * value = input_names[input_name] + * if not isinstance(value, list): + */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":714 + * docs.append(' %s: %s' % (input_name, value)) + * + * params = func_info['parameters'] # <<<<<<<<<<<<<< + * if params: + * docs.append('Parameters:') + */ __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_func_info, __pyx_n_s_parameters); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_params = __pyx_t_2; __pyx_t_2 = 0; + /* "talib/_abstract.pxi":715 + * + * params = func_info['parameters'] + * if params: # <<<<<<<<<<<<<< + * docs.append('Parameters:') + * for param in params: + */ __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_params); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(1, 715, __pyx_L1_error) if (__pyx_t_7) { + /* "talib/_abstract.pxi":716 + * params = func_info['parameters'] + * if params: + * docs.append('Parameters:') # <<<<<<<<<<<<<< + * for param in params: + * docs.append(' %s: %s' % (param, params[param])) + */ __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_docs, __pyx_kp_s_Parameters); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 716, __pyx_L1_error) + /* "talib/_abstract.pxi":715 + * + * params = func_info['parameters'] + * if params: # <<<<<<<<<<<<<< + * docs.append('Parameters:') + * for param in params: + */ } + /* "talib/_abstract.pxi":717 + * if params: + * docs.append('Parameters:') + * for param in params: # <<<<<<<<<<<<<< + * docs.append(' %s: %s' % (param, params[param])) + * func_args.append('[%s=%s]' % (param, params[param])) + */ if (likely(PyList_CheckExact(__pyx_v_params)) || PyTuple_CheckExact(__pyx_v_params)) { __pyx_t_2 = __pyx_v_params; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; __pyx_t_5 = NULL; @@ -39863,6 +58989,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __Pyx_XDECREF_SET(__pyx_v_param, __pyx_t_8); __pyx_t_8 = 0; + /* "talib/_abstract.pxi":718 + * docs.append('Parameters:') + * for param in params: + * docs.append(' %s: %s' % (param, params[param])) # <<<<<<<<<<<<<< + * func_args.append('[%s=%s]' % (param, params[param])) + * defaults[param] = params[param] + */ __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_params, __pyx_v_param); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 718, __pyx_L1_error) @@ -39879,6 +59012,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_docs, __pyx_t_8); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 718, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + /* "talib/_abstract.pxi":719 + * for param in params: + * docs.append(' %s: %s' % (param, params[param])) + * func_args.append('[%s=%s]' % (param, params[param])) # <<<<<<<<<<<<<< + * defaults[param] = params[param] + * if param == 'matype': + */ __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_params, __pyx_v_param); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 719, __pyx_L1_error) @@ -39895,14 +59035,35 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_func_args, __pyx_t_8); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 719, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + /* "talib/_abstract.pxi":720 + * docs.append(' %s: %s' % (param, params[param])) + * func_args.append('[%s=%s]' % (param, params[param])) + * defaults[param] = params[param] # <<<<<<<<<<<<<< + * if param == 'matype': + * docs[-1] = ' '.join([docs[-1], '(%s)' % MA_Type[params[param]]]) + */ __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_params, __pyx_v_param); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (unlikely(PyDict_SetItem(__pyx_v_defaults, __pyx_v_param, __pyx_t_8) < 0)) __PYX_ERR(1, 720, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + /* "talib/_abstract.pxi":721 + * func_args.append('[%s=%s]' % (param, params[param])) + * defaults[param] = params[param] + * if param == 'matype': # <<<<<<<<<<<<<< + * docs[-1] = ' '.join([docs[-1], '(%s)' % MA_Type[params[param]]]) + * + */ __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_param, __pyx_n_s_matype, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(1, 721, __pyx_L1_error) if (__pyx_t_7) { + /* "talib/_abstract.pxi":722 + * defaults[param] = params[param] + * if param == 'matype': + * docs[-1] = ' '.join([docs[-1], '(%s)' % MA_Type[params[param]]]) # <<<<<<<<<<<<<< + * + * outputs = func_info['output_names'] + */ __pyx_t_8 = __Pyx_GetItemInt_List(__pyx_v_docs, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 722, __pyx_L1_error) @@ -39930,18 +59091,53 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE if (unlikely(__Pyx_SetItemInt(__pyx_v_docs, -1L, __pyx_t_9, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0)) __PYX_ERR(1, 722, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - + /* "talib/_abstract.pxi":721 + * func_args.append('[%s=%s]' % (param, params[param])) + * defaults[param] = params[param] + * if param == 'matype': # <<<<<<<<<<<<<< + * docs[-1] = ' '.join([docs[-1], '(%s)' % MA_Type[params[param]]]) + * + */ + } + + /* "talib/_abstract.pxi":717 + * if params: + * docs.append('Parameters:') + * for param in params: # <<<<<<<<<<<<<< + * docs.append(' %s: %s' % (param, params[param])) + * func_args.append('[%s=%s]' % (param, params[param])) + */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":724 + * docs[-1] = ' '.join([docs[-1], '(%s)' % MA_Type[params[param]]]) + * + * outputs = func_info['output_names'] # <<<<<<<<<<<<<< + * docs.append('Outputs:') + * for output in outputs: + */ __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_func_info, __pyx_n_s_output_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_outputs = __pyx_t_2; __pyx_t_2 = 0; + /* "talib/_abstract.pxi":725 + * + * outputs = func_info['output_names'] + * docs.append('Outputs:') # <<<<<<<<<<<<<< + * for output in outputs: + * if output == 'integer': + */ __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_docs, __pyx_kp_s_Outputs); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 725, __pyx_L1_error) + /* "talib/_abstract.pxi":726 + * outputs = func_info['output_names'] + * docs.append('Outputs:') + * for output in outputs: # <<<<<<<<<<<<<< + * if output == 'integer': + * output = 'integer (values are -100, 0 or 100)' + */ if (likely(PyList_CheckExact(__pyx_v_outputs)) || PyTuple_CheckExact(__pyx_v_outputs)) { __pyx_t_2 = __pyx_v_outputs; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; __pyx_t_5 = NULL; @@ -39984,39 +59180,109 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __Pyx_XDECREF_SET(__pyx_v_output, __pyx_t_9); __pyx_t_9 = 0; + /* "talib/_abstract.pxi":727 + * docs.append('Outputs:') + * for output in outputs: + * if output == 'integer': # <<<<<<<<<<<<<< + * output = 'integer (values are -100, 0 or 100)' + * docs.append(' %s' % output) + */ __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_output, __pyx_n_s_integer, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(1, 727, __pyx_L1_error) if (__pyx_t_7) { + /* "talib/_abstract.pxi":728 + * for output in outputs: + * if output == 'integer': + * output = 'integer (values are -100, 0 or 100)' # <<<<<<<<<<<<<< + * docs.append(' %s' % output) + * + */ __Pyx_INCREF(__pyx_kp_s_integer_values_are_100_0_or_100); __Pyx_DECREF_SET(__pyx_v_output, __pyx_kp_s_integer_values_are_100_0_or_100); - } - + /* "talib/_abstract.pxi":727 + * docs.append('Outputs:') + * for output in outputs: + * if output == 'integer': # <<<<<<<<<<<<<< + * output = 'integer (values are -100, 0 or 100)' + * docs.append(' %s' % output) + */ + } + + /* "talib/_abstract.pxi":729 + * if output == 'integer': + * output = 'integer (values are -100, 0 or 100)' + * docs.append(' %s' % output) # <<<<<<<<<<<<<< + * + * func_line.append(', '.join(func_args)) + */ __pyx_t_9 = __Pyx_PyString_FormatSafe(__pyx_kp_s_s_4, __pyx_v_output); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_docs, __pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 729, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + /* "talib/_abstract.pxi":726 + * outputs = func_info['output_names'] + * docs.append('Outputs:') + * for output in outputs: # <<<<<<<<<<<<<< + * if output == 'integer': + * output = 'integer (values are -100, 0 or 100)' + */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":731 + * docs.append(' %s' % output) + * + * func_line.append(', '.join(func_args)) # <<<<<<<<<<<<<< + * func_line.append(')\n') + * docs.insert(0, ''.join(func_line)) + */ __pyx_t_2 = __Pyx_PyString_Join(__pyx_kp_s__6, __pyx_v_func_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_func_line, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 731, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":732 + * + * func_line.append(', '.join(func_args)) + * func_line.append(')\n') # <<<<<<<<<<<<<< + * docs.insert(0, ''.join(func_line)) + * documentation = '\n'.join(docs) + */ __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_func_line, __pyx_kp_s__10); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 732, __pyx_L1_error) + /* "talib/_abstract.pxi":733 + * func_line.append(', '.join(func_args)) + * func_line.append(')\n') + * docs.insert(0, ''.join(func_line)) # <<<<<<<<<<<<<< + * documentation = '\n'.join(docs) + * return defaults, documentation + */ __pyx_t_2 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_v_func_line); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyList_Insert(__pyx_v_docs, 0, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 733, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":734 + * func_line.append(')\n') + * docs.insert(0, ''.join(func_line)) + * documentation = '\n'.join(docs) # <<<<<<<<<<<<<< + * return defaults, documentation + * + */ __pyx_t_2 = __Pyx_PyString_Join(__pyx_kp_s__11, __pyx_v_docs); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_documentation = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":735 + * docs.insert(0, ''.join(func_line)) + * documentation = '\n'.join(docs) + * return defaults, documentation # <<<<<<<<<<<<<< + * + * + */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -40030,6 +59296,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE __pyx_t_2 = 0; goto __pyx_L0; + /* "talib/_abstract.pxi":694 + * } + * + * def _get_defaults_and_docs(func_info): # <<<<<<<<<<<<<< + * """ + * Returns a tuple with two outputs: defaults, a dict of parameter defaults, + */ /* function exit code */ __pyx_L1_error:; @@ -40058,6 +59331,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_356_get_defaults_and_docs(CYTHON_UNUSE return __pyx_r; } +/* "talib/_abstract.pxi":746 + * # - Setting TALIB paramholder optInput values and calling the lookback function + * + * cdef lib.TA_FuncHandle* __ta_getFuncHandle(char *function_name): # <<<<<<<<<<<<<< + * """ + * Returns a pointer to a function handle for the given function name + */ static TA_FuncHandle *__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(char *__pyx_v_function_name) { TA_FuncHandle *__pyx_v_handle; @@ -40069,13 +59349,34 @@ static TA_FuncHandle *__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(char *__pyx_v_f int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__ta_getFuncHandle", 0); + /* "talib/_abstract.pxi":751 + * """ + * cdef lib.TA_FuncHandle *handle + * _ta_check_success('TA_GetFuncHandle', lib.TA_GetFuncHandle(function_name, &handle)) # <<<<<<<<<<<<<< + * return handle + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GetFuncHandle, TA_GetFuncHandle(__pyx_v_function_name, (&__pyx_v_handle)), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 751, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":752 + * cdef lib.TA_FuncHandle *handle + * _ta_check_success('TA_GetFuncHandle', lib.TA_GetFuncHandle(function_name, &handle)) + * return handle # <<<<<<<<<<<<<< + * + * cdef lib.TA_ParamHolder* __ta_paramHolderAlloc(char *function_name): + */ __pyx_r = __pyx_v_handle; goto __pyx_L0; + /* "talib/_abstract.pxi":746 + * # - Setting TALIB paramholder optInput values and calling the lookback function + * + * cdef lib.TA_FuncHandle* __ta_getFuncHandle(char *function_name): # <<<<<<<<<<<<<< + * """ + * Returns a pointer to a function handle for the given function name + */ /* function exit code */ __pyx_L1_error:; @@ -40087,6 +59388,13 @@ static TA_FuncHandle *__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(char *__pyx_v_f return __pyx_r; } +/* "talib/_abstract.pxi":754 + * return handle + * + * cdef lib.TA_ParamHolder* __ta_paramHolderAlloc(char *function_name): # <<<<<<<<<<<<<< + * """ + * Returns a pointer to a parameter holder for the given function name + */ static TA_ParamHolder *__pyx_f_5talib_7_ta_lib___ta_paramHolderAlloc(char *__pyx_v_function_name) { TA_ParamHolder *__pyx_v_holder; @@ -40099,15 +59407,43 @@ static TA_ParamHolder *__pyx_f_5talib_7_ta_lib___ta_paramHolderAlloc(char *__pyx int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__ta_paramHolderAlloc", 0); + /* "talib/_abstract.pxi":759 + * """ + * cdef lib.TA_ParamHolder *holder + * retCode = lib.TA_ParamHolderAlloc(__ta_getFuncHandle(function_name), &holder) # <<<<<<<<<<<<<< + * _ta_check_success('TA_ParamHolderAlloc', retCode) + * return holder + */ __pyx_v_retCode = TA_ParamHolderAlloc(__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(__pyx_v_function_name), (&__pyx_v_holder)); + /* "talib/_abstract.pxi":760 + * cdef lib.TA_ParamHolder *holder + * retCode = lib.TA_ParamHolderAlloc(__ta_getFuncHandle(function_name), &holder) + * _ta_check_success('TA_ParamHolderAlloc', retCode) # <<<<<<<<<<<<<< + * return holder + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ParamHolderAlloc, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 760, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":761 + * retCode = lib.TA_ParamHolderAlloc(__ta_getFuncHandle(function_name), &holder) + * _ta_check_success('TA_ParamHolderAlloc', retCode) + * return holder # <<<<<<<<<<<<<< + * + * cdef int __ta_paramHolderFree(lib.TA_ParamHolder *params): + */ __pyx_r = __pyx_v_holder; goto __pyx_L0; + /* "talib/_abstract.pxi":754 + * return handle + * + * cdef lib.TA_ParamHolder* __ta_paramHolderAlloc(char *function_name): # <<<<<<<<<<<<<< + * """ + * Returns a pointer to a parameter holder for the given function name + */ /* function exit code */ __pyx_L1_error:; @@ -40119,6 +59455,13 @@ static TA_ParamHolder *__pyx_f_5talib_7_ta_lib___ta_paramHolderAlloc(char *__pyx return __pyx_r; } +/* "talib/_abstract.pxi":763 + * return holder + * + * cdef int __ta_paramHolderFree(lib.TA_ParamHolder *params): # <<<<<<<<<<<<<< + * """ + * Frees the memory allocated by __ta_paramHolderAlloc (call when done with the parameter holder) + */ static int __pyx_f_5talib_7_ta_lib___ta_paramHolderFree(TA_ParamHolder *__pyx_v_params) { int __pyx_r; @@ -40129,10 +59472,24 @@ static int __pyx_f_5talib_7_ta_lib___ta_paramHolderFree(TA_ParamHolder *__pyx_v_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__ta_paramHolderFree", 0); + /* "talib/_abstract.pxi":768 + * WARNING: Not properly calling this function will cause memory leaks! + * """ + * _ta_check_success('TA_ParamHolderFree', lib.TA_ParamHolderFree(params)) # <<<<<<<<<<<<<< + * + * cdef int __ta_setOptInputParamInteger(lib.TA_ParamHolder *holder, int idx, int value): + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ParamHolderFree, TA_ParamHolderFree(__pyx_v_params), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":763 + * return holder + * + * cdef int __ta_paramHolderFree(lib.TA_ParamHolder *params): # <<<<<<<<<<<<<< + * """ + * Frees the memory allocated by __ta_paramHolderAlloc (call when done with the parameter holder) + */ /* function exit code */ __pyx_r = 0; @@ -40146,6 +59503,13 @@ static int __pyx_f_5talib_7_ta_lib___ta_paramHolderFree(TA_ParamHolder *__pyx_v_ return __pyx_r; } +/* "talib/_abstract.pxi":770 + * _ta_check_success('TA_ParamHolderFree', lib.TA_ParamHolderFree(params)) + * + * cdef int __ta_setOptInputParamInteger(lib.TA_ParamHolder *holder, int idx, int value): # <<<<<<<<<<<<<< + * retCode = lib.TA_SetOptInputParamInteger(holder, idx, value) + * _ta_check_success('TA_SetOptInputParamInteger', retCode) + */ static int __pyx_f_5talib_7_ta_lib___ta_setOptInputParamInteger(TA_ParamHolder *__pyx_v_holder, int __pyx_v_idx, int __pyx_v_value) { TA_RetCode __pyx_v_retCode; @@ -40157,12 +59521,33 @@ static int __pyx_f_5talib_7_ta_lib___ta_setOptInputParamInteger(TA_ParamHolder * int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__ta_setOptInputParamInteger", 0); + /* "talib/_abstract.pxi":771 + * + * cdef int __ta_setOptInputParamInteger(lib.TA_ParamHolder *holder, int idx, int value): + * retCode = lib.TA_SetOptInputParamInteger(holder, idx, value) # <<<<<<<<<<<<<< + * _ta_check_success('TA_SetOptInputParamInteger', retCode) + * + */ __pyx_v_retCode = TA_SetOptInputParamInteger(__pyx_v_holder, __pyx_v_idx, __pyx_v_value); + /* "talib/_abstract.pxi":772 + * cdef int __ta_setOptInputParamInteger(lib.TA_ParamHolder *holder, int idx, int value): + * retCode = lib.TA_SetOptInputParamInteger(holder, idx, value) + * _ta_check_success('TA_SetOptInputParamInteger', retCode) # <<<<<<<<<<<<<< + * + * cdef int __ta_setOptInputParamReal(lib.TA_ParamHolder *holder, int idx, int value): + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SetOptInputParamInteger, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":770 + * _ta_check_success('TA_ParamHolderFree', lib.TA_ParamHolderFree(params)) + * + * cdef int __ta_setOptInputParamInteger(lib.TA_ParamHolder *holder, int idx, int value): # <<<<<<<<<<<<<< + * retCode = lib.TA_SetOptInputParamInteger(holder, idx, value) + * _ta_check_success('TA_SetOptInputParamInteger', retCode) + */ /* function exit code */ __pyx_r = 0; @@ -40176,6 +59561,13 @@ static int __pyx_f_5talib_7_ta_lib___ta_setOptInputParamInteger(TA_ParamHolder * return __pyx_r; } +/* "talib/_abstract.pxi":774 + * _ta_check_success('TA_SetOptInputParamInteger', retCode) + * + * cdef int __ta_setOptInputParamReal(lib.TA_ParamHolder *holder, int idx, int value): # <<<<<<<<<<<<<< + * retCode = lib.TA_SetOptInputParamReal(holder, idx, value) + * _ta_check_success('TA_SetOptInputParamReal', retCode) + */ static int __pyx_f_5talib_7_ta_lib___ta_setOptInputParamReal(TA_ParamHolder *__pyx_v_holder, int __pyx_v_idx, int __pyx_v_value) { TA_RetCode __pyx_v_retCode; @@ -40187,12 +59579,33 @@ static int __pyx_f_5talib_7_ta_lib___ta_setOptInputParamReal(TA_ParamHolder *__p int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__ta_setOptInputParamReal", 0); + /* "talib/_abstract.pxi":775 + * + * cdef int __ta_setOptInputParamReal(lib.TA_ParamHolder *holder, int idx, int value): + * retCode = lib.TA_SetOptInputParamReal(holder, idx, value) # <<<<<<<<<<<<<< + * _ta_check_success('TA_SetOptInputParamReal', retCode) + * + */ __pyx_v_retCode = TA_SetOptInputParamReal(__pyx_v_holder, __pyx_v_idx, __pyx_v_value); + /* "talib/_abstract.pxi":776 + * cdef int __ta_setOptInputParamReal(lib.TA_ParamHolder *holder, int idx, int value): + * retCode = lib.TA_SetOptInputParamReal(holder, idx, value) + * _ta_check_success('TA_SetOptInputParamReal', retCode) # <<<<<<<<<<<<<< + * + * cdef int __ta_getLookback(lib.TA_ParamHolder *holder): + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SetOptInputParamReal, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 776, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":774 + * _ta_check_success('TA_SetOptInputParamInteger', retCode) + * + * cdef int __ta_setOptInputParamReal(lib.TA_ParamHolder *holder, int idx, int value): # <<<<<<<<<<<<<< + * retCode = lib.TA_SetOptInputParamReal(holder, idx, value) + * _ta_check_success('TA_SetOptInputParamReal', retCode) + */ /* function exit code */ __pyx_r = 0; @@ -40206,6 +59619,13 @@ static int __pyx_f_5talib_7_ta_lib___ta_setOptInputParamReal(TA_ParamHolder *__p return __pyx_r; } +/* "talib/_abstract.pxi":778 + * _ta_check_success('TA_SetOptInputParamReal', retCode) + * + * cdef int __ta_getLookback(lib.TA_ParamHolder *holder): # <<<<<<<<<<<<<< + * cdef int lookback + * retCode = lib.TA_GetLookback(holder, &lookback) + */ static int __pyx_f_5talib_7_ta_lib___ta_getLookback(TA_ParamHolder *__pyx_v_holder) { int __pyx_v_lookback; @@ -40218,15 +59638,40 @@ static int __pyx_f_5talib_7_ta_lib___ta_getLookback(TA_ParamHolder *__pyx_v_hold int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__ta_getLookback", 0); + /* "talib/_abstract.pxi":780 + * cdef int __ta_getLookback(lib.TA_ParamHolder *holder): + * cdef int lookback + * retCode = lib.TA_GetLookback(holder, &lookback) # <<<<<<<<<<<<<< + * _ta_check_success('TA_GetLookback', retCode) + * return lookback + */ __pyx_v_retCode = TA_GetLookback(__pyx_v_holder, (&__pyx_v_lookback)); + /* "talib/_abstract.pxi":781 + * cdef int lookback + * retCode = lib.TA_GetLookback(holder, &lookback) + * _ta_check_success('TA_GetLookback', retCode) # <<<<<<<<<<<<<< + * return lookback + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GetLookback, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":782 + * retCode = lib.TA_GetLookback(holder, &lookback) + * _ta_check_success('TA_GetLookback', retCode) + * return lookback # <<<<<<<<<<<<<< + */ __pyx_r = __pyx_v_lookback; goto __pyx_L0; + /* "talib/_abstract.pxi":778 + * _ta_check_success('TA_SetOptInputParamReal', retCode) + * + * cdef int __ta_getLookback(lib.TA_ParamHolder *holder): # <<<<<<<<<<<<<< + * cdef int lookback + * retCode = lib.TA_GetLookback(holder, &lookback) + */ /* function exit code */ __pyx_L1_error:; @@ -40238,6 +59683,13 @@ static int __pyx_f_5talib_7_ta_lib___ta_getLookback(TA_ParamHolder *__pyx_v_hold return __pyx_r; } +/* "talib/_stream.pxi":11 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ACOS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ACOS(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_359stream_ACOS(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -40278,23 +59730,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_358stream_ACOS(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_ACOS", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":28 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":29 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":30 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ACOS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":31 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ACOS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ACOS", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":32 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_ACOS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ACOS", retCode) + * return outreal + */ __pyx_v_retCode = TA_ACOS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":33 + * outreal = NaN + * retCode = lib.TA_ACOS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ACOS", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ACOS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 33, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":34 + * retCode = lib.TA_ACOS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ACOS", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -40302,6 +59803,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_358stream_ACOS(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":11 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ACOS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ACOS(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -40315,6 +59823,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_358stream_ACOS(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":38 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ AD(high, low, close, volume) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_361stream_AD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -40435,45 +59950,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_360stream_AD(CYTHON_UNUSED PyObject *_ __Pyx_INCREF((PyObject *)__pyx_v_close); __Pyx_INCREF((PyObject *)__pyx_v_volume); + /* "talib/_stream.pxi":58 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":59 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":60 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":61 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":62 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * volume = check_array(volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":63 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * volume = check_array(volume) + * volume_data = volume.data + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":64 + * close = check_array(close) + * close_data = close.data + * volume = check_array(volume) # <<<<<<<<<<<<<< + * volume_data = volume.data + * length = check_length4(high, low, close, volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_volume)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_volume, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":65 + * close_data = close.data + * volume = check_array(volume) + * volume_data = volume.data # <<<<<<<<<<<<<< + * length = check_length4(high, low, close, volume) + * outreal = NaN + */ __pyx_v_volume_data = ((double *)__pyx_v_volume->data); + /* "talib/_stream.pxi":66 + * volume = check_array(volume) + * volume_data = volume.data + * length = check_length4(high, low, close, volume) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_AD( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_high, __pyx_v_low, __pyx_v_close, __pyx_v_volume); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 66, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":67 + * volume_data = volume.data + * length = check_length4(high, low, close, volume) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_AD( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AD", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":68 + * length = check_length4(high, low, close, volume) + * outreal = NaN + * retCode = lib.TA_AD( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_AD", retCode) + * return outreal + */ __pyx_v_retCode = TA_AD((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_volume_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":69 + * outreal = NaN + * retCode = lib.TA_AD( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AD", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_AD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":70 + * retCode = lib.TA_AD( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AD", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -40481,6 +60087,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_360stream_AD(CYTHON_UNUSED PyObject *_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":38 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ AD(high, low, close, volume) + * + */ /* function exit code */ __pyx_L1_error:; @@ -40497,6 +60110,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_360stream_AD(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_stream.pxi":74 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADD( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ ADD(real0, real1) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_363stream_ADD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -40589,31 +60209,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_362stream_ADD(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_stream.pxi":93 + * int outnbelement + * double outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real0_data = real0.data + * real1 = check_array(real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 93, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":94 + * double outreal + * real0 = check_array(real0) + * real0_data = real0.data # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * real1_data = real1.data + */ __pyx_v_real0_data = ((double *)__pyx_v_real0->data); + /* "talib/_stream.pxi":95 + * real0 = check_array(real0) + * real0_data = real0.data + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * real1_data = real1.data + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 95, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":96 + * real0_data = real0.data + * real1 = check_array(real1) + * real1_data = real1.data # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * outreal = NaN + */ __pyx_v_real1_data = ((double *)__pyx_v_real1->data); + /* "talib/_stream.pxi":97 + * real1 = check_array(real1) + * real1_data = real1.data + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ADD( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 97, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":98 + * real1_data = real1.data + * length = check_length2(real0, real1) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ADD( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADD", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":99 + * length = check_length2(real0, real1) + * outreal = NaN + * retCode = lib.TA_ADD( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ADD", retCode) + * return outreal + */ __pyx_v_retCode = TA_ADD((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real0_data, __pyx_v_real1_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":100 + * outreal = NaN + * retCode = lib.TA_ADD( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADD", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ADD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":101 + * retCode = lib.TA_ADD( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADD", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -40621,6 +60304,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_362stream_ADD(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":74 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADD( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ ADD(real0, real1) + * + */ /* function exit code */ __pyx_L1_error:; @@ -40635,6 +60325,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_362stream_ADD(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":105 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_365stream_ADOSC(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -40789,45 +60486,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_364stream_ADOSC(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_close); __Pyx_INCREF((PyObject *)__pyx_v_volume); + /* "talib/_stream.pxi":128 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":129 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":130 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":131 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":132 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * volume = check_array(volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":133 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * volume = check_array(volume) + * volume_data = volume.data + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":134 + * close = check_array(close) + * close_data = close.data + * volume = check_array(volume) # <<<<<<<<<<<<<< + * volume_data = volume.data + * length = check_length4(high, low, close, volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_volume)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_volume, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":135 + * close_data = close.data + * volume = check_array(volume) + * volume_data = volume.data # <<<<<<<<<<<<<< + * length = check_length4(high, low, close, volume) + * outreal = NaN + */ __pyx_v_volume_data = ((double *)__pyx_v_volume->data); + /* "talib/_stream.pxi":136 + * volume = check_array(volume) + * volume_data = volume.data + * length = check_length4(high, low, close, volume) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ADOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , fastperiod , slowperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_high, __pyx_v_low, __pyx_v_close, __pyx_v_volume); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 136, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":137 + * volume_data = volume.data + * length = check_length4(high, low, close, volume) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ADOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , fastperiod , slowperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADOSC", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":138 + * length = check_length4(high, low, close, volume) + * outreal = NaN + * retCode = lib.TA_ADOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , fastperiod , slowperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ADOSC", retCode) + * return outreal + */ __pyx_v_retCode = TA_ADOSC((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_volume_data, __pyx_v_fastperiod, __pyx_v_slowperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":139 + * outreal = NaN + * retCode = lib.TA_ADOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , fastperiod , slowperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADOSC", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ADOSC, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":140 + * retCode = lib.TA_ADOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , fastperiod , slowperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADOSC", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 140, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -40835,6 +60623,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_364stream_ADOSC(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":105 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -40851,6 +60646,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_364stream_ADOSC(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":144 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADX(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_367stream_ADX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -40975,38 +60777,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_366stream_ADX(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":165 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 165, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":166 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":167 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":168 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":169 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 169, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":170 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":171 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ADX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 171, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":172 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ADX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADX", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":173 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_ADX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ADX", retCode) + * return outreal + */ __pyx_v_retCode = TA_ADX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":174 + * outreal = NaN + * retCode = lib.TA_ADX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADX", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ADX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 174, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":175 + * retCode = lib.TA_ADX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADX", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -41014,6 +60893,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_366stream_ADX(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":144 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADX(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -41029,6 +60915,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_366stream_ADX(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":179 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADXR(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_369stream_ADXR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -41153,38 +61046,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_368stream_ADXR(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":200 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":201 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":202 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":203 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":204 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 204, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":205 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":206 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ADXR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 206, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":207 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ADXR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADXR", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":208 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_ADXR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ADXR", retCode) + * return outreal + */ __pyx_v_retCode = TA_ADXR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":209 + * outreal = NaN + * retCode = lib.TA_ADXR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADXR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ADXR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 209, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":210 + * retCode = lib.TA_ADXR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ADXR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -41192,6 +61162,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_368stream_ADXR(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":179 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADXR(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -41207,6 +61184,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_368stream_ADXR(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":214 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ APO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_371stream_APO(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -41334,23 +61318,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_370stream_APO(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_APO", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":235 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":236 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":237 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_APO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":238 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_APO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_APO", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":239 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_APO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_APO", retCode) + * return outreal + */ __pyx_v_retCode = TA_APO((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":240 + * outreal = NaN + * retCode = lib.TA_APO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_APO", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_APO, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":241 + * retCode = lib.TA_APO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_APO", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -41358,6 +61391,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_370stream_APO(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":214 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ APO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -41371,6 +61411,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_370stream_APO(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":245 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROON(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_373stream_AROON(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -41484,33 +61531,103 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_372stream_AROON(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_stream.pxi":267 + * double outaroondown + * double outaroonup + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 267, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":268 + * double outaroonup + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":269 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":270 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * outaroondown = NaN + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":271 + * low = check_array(low) + * low_data = low.data + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * outaroondown = NaN + * outaroonup = NaN + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 271, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":272 + * low_data = low.data + * length = check_length2(high, low) + * outaroondown = NaN # <<<<<<<<<<<<<< + * outaroonup = NaN + * retCode = lib.TA_AROON( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outaroondown , &outaroonup ) + */ __pyx_v_outaroondown = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":273 + * length = check_length2(high, low) + * outaroondown = NaN + * outaroonup = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_AROON( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outaroondown , &outaroonup ) + * _ta_check_success("TA_AROON", retCode) + */ __pyx_v_outaroonup = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":274 + * outaroondown = NaN + * outaroonup = NaN + * retCode = lib.TA_AROON( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outaroondown , &outaroonup ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_AROON", retCode) + * return outaroondown , outaroonup + */ __pyx_v_retCode = TA_AROON((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outaroondown), (&__pyx_v_outaroonup)); + /* "talib/_stream.pxi":275 + * outaroonup = NaN + * retCode = lib.TA_AROON( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outaroondown , &outaroonup ) + * _ta_check_success("TA_AROON", retCode) # <<<<<<<<<<<<<< + * return outaroondown , outaroonup + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_AROON, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 275, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":276 + * retCode = lib.TA_AROON( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outaroondown , &outaroonup ) + * _ta_check_success("TA_AROON", retCode) + * return outaroondown , outaroonup # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outaroondown); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -41528,6 +61645,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_372stream_AROON(CYTHON_UNUSED PyObject __pyx_t_4 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":245 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROON(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -41544,6 +61668,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_372stream_AROON(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":280 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROONOSC(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_375stream_AROONOSC(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -41654,31 +61785,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_374stream_AROONOSC(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_stream.pxi":300 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":301 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":302 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":303 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * outreal = NaN + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":304 + * low = check_array(low) + * low_data = low.data + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_AROONOSC( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 304, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":305 + * low_data = low.data + * length = check_length2(high, low) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_AROONOSC( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AROONOSC", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":306 + * length = check_length2(high, low) + * outreal = NaN + * retCode = lib.TA_AROONOSC( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_AROONOSC", retCode) + * return outreal + */ __pyx_v_retCode = TA_AROONOSC((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":307 + * outreal = NaN + * retCode = lib.TA_AROONOSC( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AROONOSC", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_AROONOSC, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":308 + * retCode = lib.TA_AROONOSC( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AROONOSC", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 308, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -41686,6 +61880,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_374stream_AROONOSC(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":280 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROONOSC(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -41700,6 +61901,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_374stream_AROONOSC(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":312 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ASIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ASIN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_377stream_ASIN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -41740,23 +61948,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_376stream_ASIN(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_ASIN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":329 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":330 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":331 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ASIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":332 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ASIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ASIN", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":333 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_ASIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ASIN", retCode) + * return outreal + */ __pyx_v_retCode = TA_ASIN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":334 + * outreal = NaN + * retCode = lib.TA_ASIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ASIN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ASIN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 334, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":335 + * retCode = lib.TA_ASIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ASIN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -41764,6 +62021,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_376stream_ASIN(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":312 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ASIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ASIN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -41777,6 +62041,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_376stream_ASIN(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":339 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ATAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ATAN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_379stream_ATAN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -41817,23 +62088,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_378stream_ATAN(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_ATAN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":356 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 356, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":357 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":358 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ATAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":359 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ATAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ATAN", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":360 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_ATAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ATAN", retCode) + * return outreal + */ __pyx_v_retCode = TA_ATAN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":361 + * outreal = NaN + * retCode = lib.TA_ATAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ATAN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ATAN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":362 + * retCode = lib.TA_ATAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ATAN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -41841,6 +62161,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_378stream_ATAN(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":339 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ATAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ATAN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -41854,6 +62181,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_378stream_ATAN(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":366 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ATR(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_381stream_ATR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -41978,38 +62312,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_380stream_ATR(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":387 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":388 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":389 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":390 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":391 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":392 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":393 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 393, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":394 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ATR", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":395 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_ATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ATR", retCode) + * return outreal + */ __pyx_v_retCode = TA_ATR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":396 + * outreal = NaN + * retCode = lib.TA_ATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ATR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ATR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":397 + * retCode = lib.TA_ATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ATR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -42017,6 +62428,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_380stream_ATR(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":366 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ATR(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -42032,6 +62450,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_380stream_ATR(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":401 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ AVGPRICE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_383stream_AVGPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -42152,45 +62577,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_382stream_AVGPRICE(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":421 + * int outnbelement + * double outreal + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":422 + * double outreal + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":423 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":424 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":425 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":426 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":427 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":428 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":429 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_AVGPRICE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 429, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":430 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_AVGPRICE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AVGPRICE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":431 + * length = check_length4(open, high, low, close) + * outreal = NaN + * retCode = lib.TA_AVGPRICE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_AVGPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_AVGPRICE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":432 + * outreal = NaN + * retCode = lib.TA_AVGPRICE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AVGPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_AVGPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":433 + * retCode = lib.TA_AVGPRICE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_AVGPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 433, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -42198,6 +62714,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_382stream_AVGPRICE(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":401 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ AVGPRICE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -42214,6 +62737,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_382stream_AVGPRICE(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":437 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ): # <<<<<<<<<<<<<< + * """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_385stream_BBANDS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -42362,27 +62892,90 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_384stream_BBANDS(CYTHON_UNUSED PyObjec __Pyx_RefNannySetupContext("stream_BBANDS", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":463 + * double outrealmiddleband + * double outreallowerband + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 463, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":464 + * double outreallowerband + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outrealupperband = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":465 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outrealupperband = NaN + * outrealmiddleband = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":466 + * real_data = real.data + * length = real.shape[0] + * outrealupperband = NaN # <<<<<<<<<<<<<< + * outrealmiddleband = NaN + * outreallowerband = NaN + */ __pyx_v_outrealupperband = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":467 + * length = real.shape[0] + * outrealupperband = NaN + * outrealmiddleband = NaN # <<<<<<<<<<<<<< + * outreallowerband = NaN + * retCode = lib.TA_BBANDS( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , &outrealupperband , &outrealmiddleband , &outreallowerband ) + */ __pyx_v_outrealmiddleband = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":468 + * outrealupperband = NaN + * outrealmiddleband = NaN + * outreallowerband = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_BBANDS( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , &outrealupperband , &outrealmiddleband , &outreallowerband ) + * _ta_check_success("TA_BBANDS", retCode) + */ __pyx_v_outreallowerband = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":469 + * outrealmiddleband = NaN + * outreallowerband = NaN + * retCode = lib.TA_BBANDS( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , &outrealupperband , &outrealmiddleband , &outreallowerband ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_BBANDS", retCode) + * return outrealupperband , outrealmiddleband , outreallowerband + */ __pyx_v_retCode = TA_BBANDS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, __pyx_v_nbdevup, __pyx_v_nbdevdn, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outrealupperband), (&__pyx_v_outrealmiddleband), (&__pyx_v_outreallowerband)); + /* "talib/_stream.pxi":470 + * outreallowerband = NaN + * retCode = lib.TA_BBANDS( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , &outrealupperband , &outrealmiddleband , &outreallowerband ) + * _ta_check_success("TA_BBANDS", retCode) # <<<<<<<<<<<<<< + * return outrealupperband , outrealmiddleband , outreallowerband + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_BBANDS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 470, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":471 + * retCode = lib.TA_BBANDS( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , &outrealupperband , &outrealmiddleband , &outreallowerband ) + * _ta_check_success("TA_BBANDS", retCode) + * return outrealupperband , outrealmiddleband , outreallowerband # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outrealupperband); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 471, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -42405,6 +62998,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_384stream_BBANDS(CYTHON_UNUSED PyObjec __pyx_t_4 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":437 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ): # <<<<<<<<<<<<<< + * """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -42421,6 +63021,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_384stream_BBANDS(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_stream.pxi":475 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ BETA(real0, real1[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_387stream_BETA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -42531,31 +63138,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_386stream_BETA(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_stream.pxi":496 + * int outnbelement + * double outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real0_data = real0.data + * real1 = check_array(real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":497 + * double outreal + * real0 = check_array(real0) + * real0_data = real0.data # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * real1_data = real1.data + */ __pyx_v_real0_data = ((double *)__pyx_v_real0->data); + /* "talib/_stream.pxi":498 + * real0 = check_array(real0) + * real0_data = real0.data + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * real1_data = real1.data + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":499 + * real0_data = real0.data + * real1 = check_array(real1) + * real1_data = real1.data # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * outreal = NaN + */ __pyx_v_real1_data = ((double *)__pyx_v_real1->data); + /* "talib/_stream.pxi":500 + * real1 = check_array(real1) + * real1_data = real1.data + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_BETA( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 500, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":501 + * real1_data = real1.data + * length = check_length2(real0, real1) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_BETA( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_BETA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":502 + * length = check_length2(real0, real1) + * outreal = NaN + * retCode = lib.TA_BETA( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_BETA", retCode) + * return outreal + */ __pyx_v_retCode = TA_BETA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real0_data, __pyx_v_real1_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":503 + * outreal = NaN + * retCode = lib.TA_BETA( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_BETA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_BETA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 503, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":504 + * retCode = lib.TA_BETA( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_BETA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 504, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -42563,6 +63233,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_386stream_BETA(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":475 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ BETA(real0, real1[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -42577,6 +63254,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_386stream_BETA(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":508 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ BOP(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_389stream_BOP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -42697,45 +63381,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_388stream_BOP(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":528 + * int outnbelement + * double outreal + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 528, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":529 + * double outreal + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":530 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 530, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":531 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":532 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":533 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":534 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 534, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":535 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":536 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_BOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 536, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":537 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_BOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_BOP", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":538 + * length = check_length4(open, high, low, close) + * outreal = NaN + * retCode = lib.TA_BOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_BOP", retCode) + * return outreal + */ __pyx_v_retCode = TA_BOP((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":539 + * outreal = NaN + * retCode = lib.TA_BOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_BOP", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_BOP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":540 + * retCode = lib.TA_BOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_BOP", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -42743,6 +63518,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_388stream_BOP(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":508 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ BOP(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -42759,6 +63541,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_388stream_BOP(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":544 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CCI(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_391stream_CCI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -42883,38 +63672,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_390stream_CCI(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":565 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":566 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":567 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":568 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":569 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":570 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":571 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_CCI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 571, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":572 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_CCI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CCI", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":573 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_CCI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CCI", retCode) + * return outreal + */ __pyx_v_retCode = TA_CCI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":574 + * outreal = NaN + * retCode = lib.TA_CCI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CCI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CCI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 574, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":575 + * retCode = lib.TA_CCI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CCI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 575, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -42922,6 +63788,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_390stream_CCI(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":544 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CCI(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -42937,6 +63810,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_390stream_CCI(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":579 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL2CROWS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_393stream_CDL2CROWS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -43057,45 +63937,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_392stream_CDL2CROWS(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":599 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":600 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":601 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 601, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":602 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":603 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 603, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":604 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":605 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":606 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":607 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDL2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 607, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":608 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL2CROWS", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":609 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDL2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL2CROWS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL2CROWS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":610 + * outinteger = 0 + * retCode = lib.TA_CDL2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL2CROWS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL2CROWS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":611 + * retCode = lib.TA_CDL2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL2CROWS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -43103,6 +64074,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_392stream_CDL2CROWS(CYTHON_UNUSED PyOb __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":579 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL2CROWS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -43119,6 +64097,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_392stream_CDL2CROWS(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_stream.pxi":615 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3BLACKCROWS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_395stream_CDL3BLACKCROWS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -43239,45 +64224,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_394stream_CDL3BLACKCROWS(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":635 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":636 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":637 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":638 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":639 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":640 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":641 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":642 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":643 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDL3BLACKCROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 643, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":644 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3BLACKCROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3BLACKCROWS", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":645 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDL3BLACKCROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3BLACKCROWS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3BLACKCROWS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":646 + * outinteger = 0 + * retCode = lib.TA_CDL3BLACKCROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3BLACKCROWS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3BLACKCROWS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 646, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":647 + * retCode = lib.TA_CDL3BLACKCROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3BLACKCROWS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -43285,6 +64361,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_394stream_CDL3BLACKCROWS(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":615 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3BLACKCROWS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -43301,6 +64384,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_394stream_CDL3BLACKCROWS(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":651 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3INSIDE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_397stream_CDL3INSIDE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -43421,45 +64511,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_396stream_CDL3INSIDE(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":671 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":672 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":673 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":674 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":675 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":676 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":677 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":678 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":679 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDL3INSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 679, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":680 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3INSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3INSIDE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":681 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDL3INSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3INSIDE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3INSIDE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":682 + * outinteger = 0 + * retCode = lib.TA_CDL3INSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3INSIDE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3INSIDE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":683 + * retCode = lib.TA_CDL3INSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3INSIDE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -43467,6 +64648,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_396stream_CDL3INSIDE(CYTHON_UNUSED PyO __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":651 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3INSIDE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -43483,6 +64671,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_396stream_CDL3INSIDE(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_stream.pxi":687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3LINESTRIKE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_399stream_CDL3LINESTRIKE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -43603,45 +64798,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_398stream_CDL3LINESTRIKE(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":707 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":708 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":709 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 709, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":710 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":711 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 711, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":712 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":713 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":714 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":715 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDL3LINESTRIKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 715, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":716 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3LINESTRIKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3LINESTRIKE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":717 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDL3LINESTRIKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3LINESTRIKE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3LINESTRIKE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":718 + * outinteger = 0 + * retCode = lib.TA_CDL3LINESTRIKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3LINESTRIKE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3LINESTRIKE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":719 + * retCode = lib.TA_CDL3LINESTRIKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3LINESTRIKE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -43649,6 +64935,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_398stream_CDL3LINESTRIKE(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3LINESTRIKE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -43665,6 +64958,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_398stream_CDL3LINESTRIKE(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":723 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3OUTSIDE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_401stream_CDL3OUTSIDE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -43785,45 +65085,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_400stream_CDL3OUTSIDE(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":743 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 743, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":744 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":745 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":746 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":747 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":748 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":749 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":750 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":751 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDL3OUTSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 751, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":752 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3OUTSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3OUTSIDE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":753 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDL3OUTSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3OUTSIDE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3OUTSIDE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":754 + * outinteger = 0 + * retCode = lib.TA_CDL3OUTSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3OUTSIDE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3OUTSIDE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":755 + * retCode = lib.TA_CDL3OUTSIDE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3OUTSIDE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -43831,6 +65222,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_400stream_CDL3OUTSIDE(CYTHON_UNUSED Py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":723 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3OUTSIDE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -43847,6 +65245,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_400stream_CDL3OUTSIDE(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":759 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3STARSINSOUTH(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_403stream_CDL3STARSINSOUTH(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -43967,45 +65372,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_402stream_CDL3STARSINSOUTH(CYTHON_UNUS __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":779 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":780 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":781 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":782 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":783 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 783, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":784 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":785 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":786 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":787 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDL3STARSINSOUTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 787, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":788 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3STARSINSOUTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3STARSINSOUTH", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":789 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDL3STARSINSOUTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3STARSINSOUTH", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3STARSINSOUTH((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":790 + * outinteger = 0 + * retCode = lib.TA_CDL3STARSINSOUTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3STARSINSOUTH", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3STARSINSOUTH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":791 + * retCode = lib.TA_CDL3STARSINSOUTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3STARSINSOUTH", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -44013,6 +65509,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_402stream_CDL3STARSINSOUTH(CYTHON_UNUS __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":759 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3STARSINSOUTH(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -44029,6 +65532,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_402stream_CDL3STARSINSOUTH(CYTHON_UNUS return __pyx_r; } +/* "talib/_stream.pxi":795 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3WHITESOLDIERS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_405stream_CDL3WHITESOLDIERS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -44149,45 +65659,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_404stream_CDL3WHITESOLDIERS(CYTHON_UNU __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":815 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 815, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":816 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":817 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 817, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":818 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":819 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":820 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":821 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":822 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":823 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDL3WHITESOLDIERS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 823, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":824 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDL3WHITESOLDIERS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3WHITESOLDIERS", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":825 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDL3WHITESOLDIERS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDL3WHITESOLDIERS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDL3WHITESOLDIERS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":826 + * outinteger = 0 + * retCode = lib.TA_CDL3WHITESOLDIERS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3WHITESOLDIERS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDL3WHITESOLDIERS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":827 + * retCode = lib.TA_CDL3WHITESOLDIERS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDL3WHITESOLDIERS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 827, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -44195,6 +65796,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_404stream_CDL3WHITESOLDIERS(CYTHON_UNU __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":795 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3WHITESOLDIERS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -44211,6 +65819,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_404stream_CDL3WHITESOLDIERS(CYTHON_UNU return __pyx_r; } +/* "talib/_stream.pxi":831 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLABANDONEDBABY(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_407stream_CDLABANDONEDBABY(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -44349,45 +65964,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_406stream_CDLABANDONEDBABY(CYTHON_UNUS __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":853 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 853, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":854 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":855 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 855, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":856 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":857 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":858 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":859 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":860 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":861 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLABANDONEDBABY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 861, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":862 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLABANDONEDBABY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLABANDONEDBABY", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":863 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLABANDONEDBABY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLABANDONEDBABY", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLABANDONEDBABY((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":864 + * outinteger = 0 + * retCode = lib.TA_CDLABANDONEDBABY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLABANDONEDBABY", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLABANDONEDBABY, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":865 + * retCode = lib.TA_CDLABANDONEDBABY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLABANDONEDBABY", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 865, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -44395,6 +66101,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_406stream_CDLABANDONEDBABY(CYTHON_UNUS __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":831 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLABANDONEDBABY(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -44411,6 +66124,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_406stream_CDLABANDONEDBABY(CYTHON_UNUS return __pyx_r; } +/* "talib/_stream.pxi":869 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLADVANCEBLOCK(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_409stream_CDLADVANCEBLOCK(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -44531,45 +66251,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_408stream_CDLADVANCEBLOCK(CYTHON_UNUSE __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":889 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":890 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":891 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 891, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":892 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":893 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":894 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":895 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":896 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":897 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLADVANCEBLOCK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 897, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":898 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLADVANCEBLOCK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLADVANCEBLOCK", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":899 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLADVANCEBLOCK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLADVANCEBLOCK", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLADVANCEBLOCK((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":900 + * outinteger = 0 + * retCode = lib.TA_CDLADVANCEBLOCK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLADVANCEBLOCK", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLADVANCEBLOCK, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 900, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":901 + * retCode = lib.TA_CDLADVANCEBLOCK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLADVANCEBLOCK", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -44577,6 +66388,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_408stream_CDLADVANCEBLOCK(CYTHON_UNUSE __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":869 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLADVANCEBLOCK(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -44593,6 +66411,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_408stream_CDLADVANCEBLOCK(CYTHON_UNUSE return __pyx_r; } +/* "talib/_stream.pxi":905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBELTHOLD(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_411stream_CDLBELTHOLD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -44713,45 +66538,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_410stream_CDLBELTHOLD(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":925 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 925, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":926 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":927 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":928 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":929 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 929, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":930 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":931 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":932 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":933 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLBELTHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 933, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":934 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLBELTHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLBELTHOLD", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":935 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLBELTHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLBELTHOLD", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLBELTHOLD((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":936 + * outinteger = 0 + * retCode = lib.TA_CDLBELTHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLBELTHOLD", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLBELTHOLD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 936, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":937 + * retCode = lib.TA_CDLBELTHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLBELTHOLD", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 937, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -44759,6 +66675,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_410stream_CDLBELTHOLD(CYTHON_UNUSED Py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBELTHOLD(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -44775,6 +66698,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_410stream_CDLBELTHOLD(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":941 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBREAKAWAY(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_413stream_CDLBREAKAWAY(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -44895,45 +66825,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_412stream_CDLBREAKAWAY(CYTHON_UNUSED P __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":961 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 961, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":962 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":963 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":964 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":965 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":966 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":967 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":968 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":969 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLBREAKAWAY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 969, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":970 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLBREAKAWAY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLBREAKAWAY", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":971 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLBREAKAWAY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLBREAKAWAY", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLBREAKAWAY((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":972 + * outinteger = 0 + * retCode = lib.TA_CDLBREAKAWAY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLBREAKAWAY", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLBREAKAWAY, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":973 + * retCode = lib.TA_CDLBREAKAWAY( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLBREAKAWAY", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 973, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -44941,6 +66962,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_412stream_CDLBREAKAWAY(CYTHON_UNUSED P __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":941 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBREAKAWAY(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -44957,6 +66985,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_412stream_CDLBREAKAWAY(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_stream.pxi":977 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCLOSINGMARUBOZU(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_415stream_CDLCLOSINGMARUBOZU(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -45077,45 +67112,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_414stream_CDLCLOSINGMARUBOZU(CYTHON_UN __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":997 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 997, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":998 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":999 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 999, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1000 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1001 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1001, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1002 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1003 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1003, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1004 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1005 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLCLOSINGMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1005, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1006 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLCLOSINGMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1007 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLCLOSINGMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLCLOSINGMARUBOZU((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1008 + * outinteger = 0 + * retCode = lib.TA_CDLCLOSINGMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLCLOSINGMARUBOZU, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1008, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1009 + * retCode = lib.TA_CDLCLOSINGMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -45123,6 +67249,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_414stream_CDLCLOSINGMARUBOZU(CYTHON_UN __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":977 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCLOSINGMARUBOZU(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -45139,6 +67272,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_414stream_CDLCLOSINGMARUBOZU(CYTHON_UN return __pyx_r; } +/* "talib/_stream.pxi":1013 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCONCEALBABYSWALL(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_417stream_CDLCONCEALBABYSWALL(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -45259,45 +67399,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_416stream_CDLCONCEALBABYSWALL(CYTHON_U __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1033 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1033, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1034 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1035 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1035, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1036 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1037 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1038 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1039 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1039, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1040 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1041 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLCONCEALBABYSWALL( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1041, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1042 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLCONCEALBABYSWALL( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1043 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLCONCEALBABYSWALL( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLCONCEALBABYSWALL((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1044 + * outinteger = 0 + * retCode = lib.TA_CDLCONCEALBABYSWALL( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLCONCEALBABYSWALL, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1045 + * retCode = lib.TA_CDLCONCEALBABYSWALL( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1045, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -45305,6 +67536,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_416stream_CDLCONCEALBABYSWALL(CYTHON_U __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1013 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCONCEALBABYSWALL(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -45321,6 +67559,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_416stream_CDLCONCEALBABYSWALL(CYTHON_U return __pyx_r; } +/* "talib/_stream.pxi":1049 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCOUNTERATTACK(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_419stream_CDLCOUNTERATTACK(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -45441,45 +67686,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_418stream_CDLCOUNTERATTACK(CYTHON_UNUS __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1069 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1069, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1070 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1071 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1071, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1072 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1073 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1074 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1075 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1075, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1076 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1077 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLCOUNTERATTACK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1077, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1078 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLCOUNTERATTACK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCOUNTERATTACK", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1079 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLCOUNTERATTACK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLCOUNTERATTACK", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLCOUNTERATTACK((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1080 + * outinteger = 0 + * retCode = lib.TA_CDLCOUNTERATTACK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCOUNTERATTACK", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLCOUNTERATTACK, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1080, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1081 + * retCode = lib.TA_CDLCOUNTERATTACK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLCOUNTERATTACK", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1081, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -45487,6 +67823,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_418stream_CDLCOUNTERATTACK(CYTHON_UNUS __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1049 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCOUNTERATTACK(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -45503,6 +67846,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_418stream_CDLCOUNTERATTACK(CYTHON_UNUS return __pyx_r; } +/* "talib/_stream.pxi":1085 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_421stream_CDLDARKCLOUDCOVER(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -45641,45 +67991,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_420stream_CDLDARKCLOUDCOVER(CYTHON_UNU __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1107 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1108 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1109 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1110 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1111 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1112 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1113 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1114 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1115 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLDARKCLOUDCOVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1115, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1116 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLDARKCLOUDCOVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1117 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLDARKCLOUDCOVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLDARKCLOUDCOVER((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1118 + * outinteger = 0 + * retCode = lib.TA_CDLDARKCLOUDCOVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLDARKCLOUDCOVER, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1119 + * retCode = lib.TA_CDLDARKCLOUDCOVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -45687,6 +68128,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_420stream_CDLDARKCLOUDCOVER(CYTHON_UNU __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1085 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -45703,6 +68151,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_420stream_CDLDARKCLOUDCOVER(CYTHON_UNU return __pyx_r; } +/* "talib/_stream.pxi":1123 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_423stream_CDLDOJI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -45823,45 +68278,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_422stream_CDLDOJI(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1143 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1144 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1145 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1146 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1147 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1148 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1149 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1149, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1150 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1151 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1151, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1152 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDOJI", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1153 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLDOJI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLDOJI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1154 + * outinteger = 0 + * retCode = lib.TA_CDLDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDOJI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLDOJI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1155 + * retCode = lib.TA_CDLDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDOJI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1155, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -45869,6 +68415,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_422stream_CDLDOJI(CYTHON_UNUSED PyObje __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1123 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -45885,6 +68438,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_422stream_CDLDOJI(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_stream.pxi":1159 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJISTAR(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_425stream_CDLDOJISTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -46005,45 +68565,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_424stream_CDLDOJISTAR(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1179 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1180 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1181 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1182 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1183 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1184 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1185 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1186 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1187 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1187, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1188 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDOJISTAR", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1189 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLDOJISTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLDOJISTAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1190 + * outinteger = 0 + * retCode = lib.TA_CDLDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDOJISTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLDOJISTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1190, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1191 + * retCode = lib.TA_CDLDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDOJISTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -46051,6 +68702,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_424stream_CDLDOJISTAR(CYTHON_UNUSED Py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1159 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJISTAR(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -46067,6 +68725,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_424stream_CDLDOJISTAR(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":1195 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDRAGONFLYDOJI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_427stream_CDLDRAGONFLYDOJI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -46187,45 +68852,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_426stream_CDLDRAGONFLYDOJI(CYTHON_UNUS __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1215 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1215, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1216 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1217 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1217, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1218 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1219 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1220 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1221 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1221, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1222 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1223 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLDRAGONFLYDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1223, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1224 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLDRAGONFLYDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1225 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLDRAGONFLYDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLDRAGONFLYDOJI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1226 + * outinteger = 0 + * retCode = lib.TA_CDLDRAGONFLYDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLDRAGONFLYDOJI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1227 + * retCode = lib.TA_CDLDRAGONFLYDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1227, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -46233,6 +68989,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_426stream_CDLDRAGONFLYDOJI(CYTHON_UNUS __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1195 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDRAGONFLYDOJI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -46249,6 +69012,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_426stream_CDLDRAGONFLYDOJI(CYTHON_UNUS return __pyx_r; } +/* "talib/_stream.pxi":1231 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLENGULFING(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_429stream_CDLENGULFING(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -46369,45 +69139,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_428stream_CDLENGULFING(CYTHON_UNUSED P __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1251 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1252 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1253 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1254 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1255 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1255, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1256 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1257 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1257, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1258 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1259 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLENGULFING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1259, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1260 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLENGULFING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLENGULFING", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1261 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLENGULFING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLENGULFING", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLENGULFING((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1262 + * outinteger = 0 + * retCode = lib.TA_CDLENGULFING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLENGULFING", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLENGULFING, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1263 + * retCode = lib.TA_CDLENGULFING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLENGULFING", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1263, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -46415,6 +69276,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_428stream_CDLENGULFING(CYTHON_UNUSED P __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1231 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLENGULFING(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -46431,6 +69299,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_428stream_CDLENGULFING(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_stream.pxi":1267 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_431stream_CDLEVENINGDOJISTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -46569,45 +69444,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_430stream_CDLEVENINGDOJISTAR(CYTHON_UN __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1289 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1289, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1290 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1291 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1291, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1292 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1293 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1294 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1295 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1295, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1296 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1297 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLEVENINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1297, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1298 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLEVENINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLEVENINGDOJISTAR", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1299 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLEVENINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLEVENINGDOJISTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLEVENINGDOJISTAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1300 + * outinteger = 0 + * retCode = lib.TA_CDLEVENINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLEVENINGDOJISTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLEVENINGDOJISTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1301 + * retCode = lib.TA_CDLEVENINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLEVENINGDOJISTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -46615,6 +69581,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_430stream_CDLEVENINGDOJISTAR(CYTHON_UN __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1267 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -46631,6 +69604,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_430stream_CDLEVENINGDOJISTAR(CYTHON_UN return __pyx_r; } +/* "talib/_stream.pxi":1305 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLEVENINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGSTAR(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_433stream_CDLEVENINGSTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -46769,45 +69749,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_432stream_CDLEVENINGSTAR(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1327 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1327, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1328 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1329 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1330 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1331 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1331, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1332 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1333 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1334 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1335 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLEVENINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1335, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1336 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLEVENINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLEVENINGSTAR", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1337 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLEVENINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLEVENINGSTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLEVENINGSTAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1338 + * outinteger = 0 + * retCode = lib.TA_CDLEVENINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLEVENINGSTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLEVENINGSTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1339 + * retCode = lib.TA_CDLEVENINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLEVENINGSTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -46815,6 +69886,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_432stream_CDLEVENINGSTAR(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1305 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLEVENINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGSTAR(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -46831,6 +69909,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_432stream_CDLEVENINGSTAR(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":1343 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLGAPSIDESIDEWHITE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGAPSIDESIDEWHITE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_435stream_CDLGAPSIDESIDEWHITE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -46951,45 +70036,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_434stream_CDLGAPSIDESIDEWHITE(CYTHON_U __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1363 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1364 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1365 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1366 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1367 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1368 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1369 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1370 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1371 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1371, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1372 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLGAPSIDESIDEWHITE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1373 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLGAPSIDESIDEWHITE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLGAPSIDESIDEWHITE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1374 + * outinteger = 0 + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLGAPSIDESIDEWHITE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLGAPSIDESIDEWHITE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1375 + * retCode = lib.TA_CDLGAPSIDESIDEWHITE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLGAPSIDESIDEWHITE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -46997,6 +70173,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_434stream_CDLGAPSIDESIDEWHITE(CYTHON_U __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1343 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLGAPSIDESIDEWHITE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGAPSIDESIDEWHITE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -47013,6 +70196,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_434stream_CDLGAPSIDESIDEWHITE(CYTHON_U return __pyx_r; } +/* "talib/_stream.pxi":1379 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLGRAVESTONEDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGRAVESTONEDOJI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_437stream_CDLGRAVESTONEDOJI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -47133,45 +70323,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_436stream_CDLGRAVESTONEDOJI(CYTHON_UNU __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1399 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1400 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1401 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1402 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1403 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1404 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1405 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1406 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1407 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLGRAVESTONEDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1407, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1408 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLGRAVESTONEDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLGRAVESTONEDOJI", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1409 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLGRAVESTONEDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLGRAVESTONEDOJI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLGRAVESTONEDOJI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1410 + * outinteger = 0 + * retCode = lib.TA_CDLGRAVESTONEDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLGRAVESTONEDOJI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLGRAVESTONEDOJI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1411 + * retCode = lib.TA_CDLGRAVESTONEDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLGRAVESTONEDOJI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1411, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -47179,6 +70460,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_436stream_CDLGRAVESTONEDOJI(CYTHON_UNU __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1379 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLGRAVESTONEDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGRAVESTONEDOJI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -47195,6 +70483,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_436stream_CDLGRAVESTONEDOJI(CYTHON_UNU return __pyx_r; } +/* "talib/_stream.pxi":1415 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHAMMER(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_439stream_CDLHAMMER(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -47315,45 +70610,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_438stream_CDLHAMMER(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1435 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1436 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1437 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1438 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1439 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1440 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1441 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1442 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1443 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1443, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1444 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHAMMER", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1445 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHAMMER", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHAMMER((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1446 + * outinteger = 0 + * retCode = lib.TA_CDLHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHAMMER", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHAMMER, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1447 + * retCode = lib.TA_CDLHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHAMMER", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -47361,6 +70747,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_438stream_CDLHAMMER(CYTHON_UNUSED PyOb __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1415 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHAMMER(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -47377,6 +70770,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_438stream_CDLHAMMER(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_stream.pxi":1451 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHANGINGMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHANGINGMAN(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_441stream_CDLHANGINGMAN(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -47497,45 +70897,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_440stream_CDLHANGINGMAN(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1471 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1471, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1472 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1473 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1473, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1474 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1475 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1476 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1477 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1477, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1478 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1479 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLHANGINGMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1479, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1480 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHANGINGMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHANGINGMAN", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1481 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLHANGINGMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHANGINGMAN", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHANGINGMAN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1482 + * outinteger = 0 + * retCode = lib.TA_CDLHANGINGMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHANGINGMAN", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHANGINGMAN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1482, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1483 + * retCode = lib.TA_CDLHANGINGMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHANGINGMAN", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -47543,6 +71034,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_440stream_CDLHANGINGMAN(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1451 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHANGINGMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHANGINGMAN(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -47559,6 +71057,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_440stream_CDLHANGINGMAN(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":1487 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHARAMI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_443stream_CDLHARAMI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -47679,45 +71184,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_442stream_CDLHARAMI(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1507 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1507, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1508 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1509 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1509, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1510 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1511 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1511, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1512 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1513 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1513, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1514 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1515 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLHARAMI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1515, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1516 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHARAMI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHARAMI", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1517 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLHARAMI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHARAMI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHARAMI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1518 + * outinteger = 0 + * retCode = lib.TA_CDLHARAMI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHARAMI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHARAMI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1518, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1519 + * retCode = lib.TA_CDLHARAMI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHARAMI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1519, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -47725,6 +71321,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_442stream_CDLHARAMI(CYTHON_UNUSED PyOb __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1487 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHARAMI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -47741,6 +71344,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_442stream_CDLHARAMI(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_stream.pxi":1523 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHARAMICROSS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMICROSS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_445stream_CDLHARAMICROSS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -47861,45 +71471,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_444stream_CDLHARAMICROSS(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1543 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1543, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1544 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1545 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1546 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1547 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1547, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1548 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1549 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1549, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1550 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1551 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLHARAMICROSS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1551, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1552 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHARAMICROSS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHARAMICROSS", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1553 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLHARAMICROSS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHARAMICROSS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHARAMICROSS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1554 + * outinteger = 0 + * retCode = lib.TA_CDLHARAMICROSS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHARAMICROSS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHARAMICROSS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1554, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1555 + * retCode = lib.TA_CDLHARAMICROSS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHARAMICROSS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -47907,6 +71608,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_444stream_CDLHARAMICROSS(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1523 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHARAMICROSS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMICROSS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -47923,6 +71631,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_444stream_CDLHARAMICROSS(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":1559 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIGHWAVE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIGHWAVE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_447stream_CDLHIGHWAVE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -48043,45 +71758,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_446stream_CDLHIGHWAVE(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1579 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1580 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1581 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1582 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1583 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1584 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1585 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1586 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1587 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLHIGHWAVE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1587, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1588 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHIGHWAVE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIGHWAVE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1589 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLHIGHWAVE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHIGHWAVE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHIGHWAVE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1590 + * outinteger = 0 + * retCode = lib.TA_CDLHIGHWAVE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIGHWAVE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHIGHWAVE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1591 + * retCode = lib.TA_CDLHIGHWAVE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIGHWAVE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -48089,6 +71895,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_446stream_CDLHIGHWAVE(CYTHON_UNUSED Py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1559 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIGHWAVE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIGHWAVE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -48105,6 +71918,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_446stream_CDLHIGHWAVE(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":1595 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIKKAKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_449stream_CDLHIKKAKE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -48225,45 +72045,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_448stream_CDLHIKKAKE(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1615 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1616 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1617 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1617, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1618 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1619 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1620 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1621 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1622 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1623 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLHIKKAKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1623, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1624 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHIKKAKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIKKAKE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1625 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLHIKKAKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHIKKAKE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHIKKAKE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1626 + * outinteger = 0 + * retCode = lib.TA_CDLHIKKAKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIKKAKE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHIKKAKE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1627 + * retCode = lib.TA_CDLHIKKAKE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIKKAKE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -48271,6 +72182,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_448stream_CDLHIKKAKE(CYTHON_UNUSED PyO __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1595 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIKKAKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -48287,6 +72205,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_448stream_CDLHIKKAKE(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_stream.pxi":1631 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIKKAKEMOD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKEMOD(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_451stream_CDLHIKKAKEMOD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -48407,45 +72332,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_450stream_CDLHIKKAKEMOD(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1651 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1652 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1653 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1653, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1654 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1655 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1655, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1656 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1657 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1658 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1659 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLHIKKAKEMOD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1659, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1660 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHIKKAKEMOD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIKKAKEMOD", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1661 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLHIKKAKEMOD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHIKKAKEMOD", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHIKKAKEMOD((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1662 + * outinteger = 0 + * retCode = lib.TA_CDLHIKKAKEMOD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIKKAKEMOD", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHIKKAKEMOD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1663 + * retCode = lib.TA_CDLHIKKAKEMOD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHIKKAKEMOD", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -48453,6 +72469,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_450stream_CDLHIKKAKEMOD(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1631 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIKKAKEMOD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKEMOD(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -48469,6 +72492,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_450stream_CDLHIKKAKEMOD(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":1667 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHOMINGPIGEON( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHOMINGPIGEON(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_453stream_CDLHOMINGPIGEON(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -48589,45 +72619,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_452stream_CDLHOMINGPIGEON(CYTHON_UNUSE __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1687 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1688 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1689 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1690 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1691 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1692 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1693 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1694 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1695 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLHOMINGPIGEON( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1695, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1696 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLHOMINGPIGEON( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHOMINGPIGEON", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1697 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLHOMINGPIGEON( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLHOMINGPIGEON", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLHOMINGPIGEON((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1698 + * outinteger = 0 + * retCode = lib.TA_CDLHOMINGPIGEON( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHOMINGPIGEON", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLHOMINGPIGEON, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1698, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1699 + * retCode = lib.TA_CDLHOMINGPIGEON( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLHOMINGPIGEON", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -48635,6 +72756,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_452stream_CDLHOMINGPIGEON(CYTHON_UNUSE __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1667 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHOMINGPIGEON( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHOMINGPIGEON(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -48651,6 +72779,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_452stream_CDLHOMINGPIGEON(CYTHON_UNUSE return __pyx_r; } +/* "talib/_stream.pxi":1703 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLIDENTICAL3CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLIDENTICAL3CROWS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_455stream_CDLIDENTICAL3CROWS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -48771,45 +72906,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_454stream_CDLIDENTICAL3CROWS(CYTHON_UN __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1723 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1724 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1725 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1726 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1727 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1727, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1728 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1729 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1730 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1731 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLIDENTICAL3CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1731, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1732 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLIDENTICAL3CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLIDENTICAL3CROWS", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1733 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLIDENTICAL3CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLIDENTICAL3CROWS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLIDENTICAL3CROWS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1734 + * outinteger = 0 + * retCode = lib.TA_CDLIDENTICAL3CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLIDENTICAL3CROWS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLIDENTICAL3CROWS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1735 + * retCode = lib.TA_CDLIDENTICAL3CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLIDENTICAL3CROWS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -48817,6 +73043,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_454stream_CDLIDENTICAL3CROWS(CYTHON_UN __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1703 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLIDENTICAL3CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLIDENTICAL3CROWS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -48833,6 +73066,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_454stream_CDLIDENTICAL3CROWS(CYTHON_UN return __pyx_r; } +/* "talib/_stream.pxi":1739 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLINNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINNECK(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_457stream_CDLINNECK(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -48953,45 +73193,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_456stream_CDLINNECK(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1759 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1759, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1760 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1761 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1762 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1763 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1763, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1764 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1765 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1765, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1766 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1767 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLINNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1767, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1768 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLINNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLINNECK", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1769 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLINNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLINNECK", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLINNECK((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1770 + * outinteger = 0 + * retCode = lib.TA_CDLINNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLINNECK", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLINNECK, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1771 + * retCode = lib.TA_CDLINNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLINNECK", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1771, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -48999,6 +73330,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_456stream_CDLINNECK(CYTHON_UNUSED PyOb __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1739 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLINNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINNECK(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -49015,6 +73353,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_456stream_CDLINNECK(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_stream.pxi":1775 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLINVERTEDHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINVERTEDHAMMER(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_459stream_CDLINVERTEDHAMMER(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -49135,45 +73480,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_458stream_CDLINVERTEDHAMMER(CYTHON_UNU __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1795 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1796 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1797 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1797, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1798 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1799 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1800 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1801 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1802 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1803 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLINVERTEDHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1803, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1804 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLINVERTEDHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLINVERTEDHAMMER", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1805 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLINVERTEDHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLINVERTEDHAMMER", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLINVERTEDHAMMER((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1806 + * outinteger = 0 + * retCode = lib.TA_CDLINVERTEDHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLINVERTEDHAMMER", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLINVERTEDHAMMER, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1807 + * retCode = lib.TA_CDLINVERTEDHAMMER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLINVERTEDHAMMER", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1807, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -49181,6 +73617,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_458stream_CDLINVERTEDHAMMER(CYTHON_UNU __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1775 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLINVERTEDHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINVERTEDHAMMER(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -49197,6 +73640,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_458stream_CDLINVERTEDHAMMER(CYTHON_UNU return __pyx_r; } +/* "talib/_stream.pxi":1811 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLKICKING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKING(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_461stream_CDLKICKING(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -49317,45 +73767,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_460stream_CDLKICKING(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1831 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1831, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1832 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1833 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1833, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1834 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1835 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1835, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1836 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1837 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1837, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1838 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1839 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLKICKING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1839, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1840 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLKICKING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLKICKING", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1841 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLKICKING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLKICKING", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLKICKING((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1842 + * outinteger = 0 + * retCode = lib.TA_CDLKICKING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLKICKING", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLKICKING, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1843 + * retCode = lib.TA_CDLKICKING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLKICKING", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1843, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -49363,6 +73904,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_460stream_CDLKICKING(CYTHON_UNUSED PyO __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1811 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLKICKING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKING(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -49379,6 +73927,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_460stream_CDLKICKING(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_stream.pxi":1847 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLKICKINGBYLENGTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKINGBYLENGTH(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_463stream_CDLKICKINGBYLENGTH(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -49499,45 +74054,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_462stream_CDLKICKINGBYLENGTH(CYTHON_UN __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1867 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1868 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1869 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1870 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1871 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1872 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1873 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1874 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1875 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLKICKINGBYLENGTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1875, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1876 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLKICKINGBYLENGTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLKICKINGBYLENGTH", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1877 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLKICKINGBYLENGTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLKICKINGBYLENGTH", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLKICKINGBYLENGTH((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1878 + * outinteger = 0 + * retCode = lib.TA_CDLKICKINGBYLENGTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLKICKINGBYLENGTH", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLKICKINGBYLENGTH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1879 + * retCode = lib.TA_CDLKICKINGBYLENGTH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLKICKINGBYLENGTH", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -49545,6 +74191,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_462stream_CDLKICKINGBYLENGTH(CYTHON_UN __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1847 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLKICKINGBYLENGTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKINGBYLENGTH(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -49561,6 +74214,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_462stream_CDLKICKINGBYLENGTH(CYTHON_UN return __pyx_r; } +/* "talib/_stream.pxi":1883 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLADDERBOTTOM( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLADDERBOTTOM(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_465stream_CDLLADDERBOTTOM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -49681,45 +74341,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_464stream_CDLLADDERBOTTOM(CYTHON_UNUSE __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1903 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1903, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1904 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1905 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1906 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1907 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1907, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1908 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1909 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1909, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1910 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1911 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLLADDERBOTTOM( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1911, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1912 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLLADDERBOTTOM( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLADDERBOTTOM", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1913 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLLADDERBOTTOM( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLLADDERBOTTOM", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLLADDERBOTTOM((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1914 + * outinteger = 0 + * retCode = lib.TA_CDLLADDERBOTTOM( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLADDERBOTTOM", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLLADDERBOTTOM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1915 + * retCode = lib.TA_CDLLADDERBOTTOM( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLADDERBOTTOM", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1915, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -49727,6 +74478,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_464stream_CDLLADDERBOTTOM(CYTHON_UNUSE __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1883 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLADDERBOTTOM( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLADDERBOTTOM(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -49743,6 +74501,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_464stream_CDLLADDERBOTTOM(CYTHON_UNUSE return __pyx_r; } +/* "talib/_stream.pxi":1919 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLONGLEGGEDDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLEGGEDDOJI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_467stream_CDLLONGLEGGEDDOJI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -49863,45 +74628,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_466stream_CDLLONGLEGGEDDOJI(CYTHON_UNU __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1939 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1940 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1941 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1942 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1943 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1943, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1944 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1945 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1945, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1946 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1947 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLLONGLEGGEDDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1947, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1948 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLLONGLEGGEDDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLONGLEGGEDDOJI", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1949 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLLONGLEGGEDDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLLONGLEGGEDDOJI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLLONGLEGGEDDOJI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1950 + * outinteger = 0 + * retCode = lib.TA_CDLLONGLEGGEDDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLONGLEGGEDDOJI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLLONGLEGGEDDOJI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1950, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1951 + * retCode = lib.TA_CDLLONGLEGGEDDOJI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLONGLEGGEDDOJI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1951, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -49909,6 +74765,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_466stream_CDLLONGLEGGEDDOJI(CYTHON_UNU __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1919 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLONGLEGGEDDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLEGGEDDOJI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -49925,6 +74788,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_466stream_CDLLONGLEGGEDDOJI(CYTHON_UNU return __pyx_r; } +/* "talib/_stream.pxi":1955 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLONGLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLINE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_469stream_CDLLONGLINE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -50045,45 +74915,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_468stream_CDLLONGLINE(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":1975 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1976 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":1977 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1977, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1978 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":1979 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1980 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":1981 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1982 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":1983 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLLONGLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 1983, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":1984 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLLONGLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLONGLINE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":1985 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLLONGLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLLONGLINE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLLONGLINE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":1986 + * outinteger = 0 + * retCode = lib.TA_CDLLONGLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLONGLINE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLLONGLINE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1986, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1987 + * retCode = lib.TA_CDLLONGLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLLONGLINE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -50091,6 +75052,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_468stream_CDLLONGLINE(CYTHON_UNUSED Py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1955 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLONGLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLINE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -50107,6 +75075,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_468stream_CDLLONGLINE(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":1991 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMARUBOZU(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_471stream_CDLMARUBOZU(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -50227,45 +75202,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_470stream_CDLMARUBOZU(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2011 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2011, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2012 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2013 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2013, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2014 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2015 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2015, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2016 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2017 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2017, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2018 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2019 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2019, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2020 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMARUBOZU", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2021 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMARUBOZU", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMARUBOZU((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2022 + * outinteger = 0 + * retCode = lib.TA_CDLMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMARUBOZU", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMARUBOZU, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2022, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2023 + * retCode = lib.TA_CDLMARUBOZU( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMARUBOZU", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2023, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -50273,6 +75339,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_470stream_CDLMARUBOZU(CYTHON_UNUSED Py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":1991 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMARUBOZU(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -50289,6 +75362,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_470stream_CDLMARUBOZU(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":2027 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMATCHINGLOW( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMATCHINGLOW(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_473stream_CDLMATCHINGLOW(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -50409,45 +75489,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_472stream_CDLMATCHINGLOW(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2047 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2047, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2048 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2049 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2049, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2050 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2051 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2051, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2052 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2053 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2053, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2054 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2055 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLMATCHINGLOW( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2055, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2056 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMATCHINGLOW( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMATCHINGLOW", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2057 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLMATCHINGLOW( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMATCHINGLOW", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMATCHINGLOW((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2058 + * outinteger = 0 + * retCode = lib.TA_CDLMATCHINGLOW( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMATCHINGLOW", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMATCHINGLOW, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2058, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2059 + * retCode = lib.TA_CDLMATCHINGLOW( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMATCHINGLOW", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2059, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -50455,6 +75626,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_472stream_CDLMATCHINGLOW(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2027 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMATCHINGLOW( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMATCHINGLOW(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -50471,6 +75649,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_472stream_CDLMATCHINGLOW(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":2063 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMATHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLMATHOLD(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_475stream_CDLMATHOLD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -50609,45 +75794,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_474stream_CDLMATHOLD(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2085 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2086 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2087 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2087, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2088 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2089 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2089, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2090 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2091 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2091, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2092 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2093 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLMATHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2093, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2094 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMATHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMATHOLD", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2095 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLMATHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMATHOLD", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMATHOLD((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2096 + * outinteger = 0 + * retCode = lib.TA_CDLMATHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMATHOLD", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMATHOLD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2096, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2097 + * retCode = lib.TA_CDLMATHOLD( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMATHOLD", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2097, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -50655,6 +75931,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_474stream_CDLMATHOLD(CYTHON_UNUSED PyO __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2063 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMATHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLMATHOLD(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -50671,6 +75954,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_474stream_CDLMATHOLD(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_stream.pxi":2101 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMORNINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_477stream_CDLMORNINGDOJISTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -50809,45 +76099,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_476stream_CDLMORNINGDOJISTAR(CYTHON_UN __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2123 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2124 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2125 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2125, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2126 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2127 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2128 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2129 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2130 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2131 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLMORNINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2131, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2132 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMORNINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMORNINGDOJISTAR", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2133 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLMORNINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMORNINGDOJISTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMORNINGDOJISTAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2134 + * outinteger = 0 + * retCode = lib.TA_CDLMORNINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMORNINGDOJISTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMORNINGDOJISTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2135 + * retCode = lib.TA_CDLMORNINGDOJISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMORNINGDOJISTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -50855,6 +76236,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_476stream_CDLMORNINGDOJISTAR(CYTHON_UN __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2101 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMORNINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -50871,6 +76259,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_476stream_CDLMORNINGDOJISTAR(CYTHON_UN return __pyx_r; } +/* "talib/_stream.pxi":2139 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMORNINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGSTAR(open, high, low, close[, penetration=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_479stream_CDLMORNINGSTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -51009,45 +76404,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_478stream_CDLMORNINGSTAR(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2161 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2162 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2163 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2164 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2165 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2165, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2166 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2167 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2168 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2169 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLMORNINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2169, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2170 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLMORNINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMORNINGSTAR", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2171 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLMORNINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLMORNINGSTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLMORNINGSTAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_penetration, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2172 + * outinteger = 0 + * retCode = lib.TA_CDLMORNINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMORNINGSTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLMORNINGSTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2173 + * retCode = lib.TA_CDLMORNINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , penetration , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLMORNINGSTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2173, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -51055,6 +76541,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_478stream_CDLMORNINGSTAR(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2139 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMORNINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGSTAR(open, high, low, close[, penetration=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -51071,6 +76564,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_478stream_CDLMORNINGSTAR(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":2177 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLONNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLONNECK(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_481stream_CDLONNECK(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -51191,45 +76691,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_480stream_CDLONNECK(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2197 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2197, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2198 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2199 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2200 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2201 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2201, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2202 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2203 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2204 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2205 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLONNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2205, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2206 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLONNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLONNECK", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2207 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLONNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLONNECK", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLONNECK((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2208 + * outinteger = 0 + * retCode = lib.TA_CDLONNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLONNECK", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLONNECK, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2208, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2209 + * retCode = lib.TA_CDLONNECK( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLONNECK", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2209, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -51237,6 +76828,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_480stream_CDLONNECK(CYTHON_UNUSED PyOb __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2177 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLONNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLONNECK(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -51253,6 +76851,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_480stream_CDLONNECK(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_stream.pxi":2213 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLPIERCING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLPIERCING(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_483stream_CDLPIERCING(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -51373,45 +76978,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_482stream_CDLPIERCING(CYTHON_UNUSED Py __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2233 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2233, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2234 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2235 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2236 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2237 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2237, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2238 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2239 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2240 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2241 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLPIERCING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2241, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2242 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLPIERCING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLPIERCING", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2243 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLPIERCING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLPIERCING", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLPIERCING((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2244 + * outinteger = 0 + * retCode = lib.TA_CDLPIERCING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLPIERCING", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLPIERCING, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2245 + * retCode = lib.TA_CDLPIERCING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLPIERCING", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2245, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -51419,6 +77115,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_482stream_CDLPIERCING(CYTHON_UNUSED Py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2213 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLPIERCING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLPIERCING(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -51435,6 +77138,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_482stream_CDLPIERCING(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":2249 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLRICKSHAWMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRICKSHAWMAN(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_485stream_CDLRICKSHAWMAN(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -51555,45 +77265,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_484stream_CDLRICKSHAWMAN(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2269 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2270 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2271 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2272 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2273 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2274 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2275 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2275, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2276 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2277 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLRICKSHAWMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2277, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2278 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLRICKSHAWMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLRICKSHAWMAN", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2279 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLRICKSHAWMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLRICKSHAWMAN", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLRICKSHAWMAN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2280 + * outinteger = 0 + * retCode = lib.TA_CDLRICKSHAWMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLRICKSHAWMAN", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLRICKSHAWMAN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2281 + * retCode = lib.TA_CDLRICKSHAWMAN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLRICKSHAWMAN", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -51601,6 +77402,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_484stream_CDLRICKSHAWMAN(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2249 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLRICKSHAWMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRICKSHAWMAN(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -51617,6 +77425,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_484stream_CDLRICKSHAWMAN(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":2285 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLRISEFALL3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRISEFALL3METHODS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_487stream_CDLRISEFALL3METHODS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -51737,45 +77552,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_486stream_CDLRISEFALL3METHODS(CYTHON_U __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2305 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2306 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2307 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2308 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2309 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2310 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2311 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2312 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2313 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLRISEFALL3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2313, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2314 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLRISEFALL3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLRISEFALL3METHODS", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2315 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLRISEFALL3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLRISEFALL3METHODS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLRISEFALL3METHODS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2316 + * outinteger = 0 + * retCode = lib.TA_CDLRISEFALL3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLRISEFALL3METHODS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLRISEFALL3METHODS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2317 + * retCode = lib.TA_CDLRISEFALL3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLRISEFALL3METHODS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -51783,6 +77689,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_486stream_CDLRISEFALL3METHODS(CYTHON_U __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2285 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLRISEFALL3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRISEFALL3METHODS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -51799,6 +77712,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_486stream_CDLRISEFALL3METHODS(CYTHON_U return __pyx_r; } +/* "talib/_stream.pxi":2321 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSEPARATINGLINES( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSEPARATINGLINES(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_489stream_CDLSEPARATINGLINES(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -51919,45 +77839,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_488stream_CDLSEPARATINGLINES(CYTHON_UN __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2341 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2342 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2343 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2344 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2345 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2346 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2347 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2348 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2349 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLSEPARATINGLINES( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2349, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2350 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSEPARATINGLINES( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSEPARATINGLINES", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2351 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLSEPARATINGLINES( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSEPARATINGLINES", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSEPARATINGLINES((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2352 + * outinteger = 0 + * retCode = lib.TA_CDLSEPARATINGLINES( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSEPARATINGLINES", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSEPARATINGLINES, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2353 + * retCode = lib.TA_CDLSEPARATINGLINES( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSEPARATINGLINES", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2353, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -51965,6 +77976,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_488stream_CDLSEPARATINGLINES(CYTHON_UN __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2321 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSEPARATINGLINES( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSEPARATINGLINES(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -51981,6 +77999,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_488stream_CDLSEPARATINGLINES(CYTHON_UN return __pyx_r; } +/* "talib/_stream.pxi":2357 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSHOOTINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHOOTINGSTAR(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_491stream_CDLSHOOTINGSTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -52101,45 +78126,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_490stream_CDLSHOOTINGSTAR(CYTHON_UNUSE __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2377 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2378 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2379 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2380 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2381 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2382 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2383 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2384 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2385 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLSHOOTINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2385, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2386 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSHOOTINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSHOOTINGSTAR", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2387 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLSHOOTINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSHOOTINGSTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSHOOTINGSTAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2388 + * outinteger = 0 + * retCode = lib.TA_CDLSHOOTINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSHOOTINGSTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSHOOTINGSTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2389 + * retCode = lib.TA_CDLSHOOTINGSTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSHOOTINGSTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -52147,6 +78263,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_490stream_CDLSHOOTINGSTAR(CYTHON_UNUSE __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2357 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSHOOTINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHOOTINGSTAR(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -52163,6 +78286,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_490stream_CDLSHOOTINGSTAR(CYTHON_UNUSE return __pyx_r; } +/* "talib/_stream.pxi":2393 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSHORTLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHORTLINE(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_493stream_CDLSHORTLINE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -52283,45 +78413,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_492stream_CDLSHORTLINE(CYTHON_UNUSED P __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2413 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2414 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2415 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2416 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2417 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2418 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2419 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2420 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2421 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLSHORTLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2421, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2422 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSHORTLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSHORTLINE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2423 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLSHORTLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSHORTLINE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSHORTLINE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2424 + * outinteger = 0 + * retCode = lib.TA_CDLSHORTLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSHORTLINE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSHORTLINE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2425 + * retCode = lib.TA_CDLSHORTLINE( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSHORTLINE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -52329,6 +78550,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_492stream_CDLSHORTLINE(CYTHON_UNUSED P __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2393 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSHORTLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHORTLINE(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -52345,6 +78573,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_492stream_CDLSHORTLINE(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_stream.pxi":2429 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSPINNINGTOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSPINNINGTOP(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_495stream_CDLSPINNINGTOP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -52465,45 +78700,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_494stream_CDLSPINNINGTOP(CYTHON_UNUSED __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2449 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2450 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2451 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2452 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2453 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2454 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2455 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2455, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2456 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2457 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLSPINNINGTOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2457, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2458 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSPINNINGTOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSPINNINGTOP", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2459 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLSPINNINGTOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSPINNINGTOP", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSPINNINGTOP((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2460 + * outinteger = 0 + * retCode = lib.TA_CDLSPINNINGTOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSPINNINGTOP", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSPINNINGTOP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2461 + * retCode = lib.TA_CDLSPINNINGTOP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSPINNINGTOP", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -52511,6 +78837,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_494stream_CDLSPINNINGTOP(CYTHON_UNUSED __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2429 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSPINNINGTOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSPINNINGTOP(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -52527,6 +78860,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_494stream_CDLSPINNINGTOP(CYTHON_UNUSED return __pyx_r; } +/* "talib/_stream.pxi":2465 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSTALLEDPATTERN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTALLEDPATTERN(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_497stream_CDLSTALLEDPATTERN(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -52647,45 +78987,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_496stream_CDLSTALLEDPATTERN(CYTHON_UNU __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2485 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2486 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2487 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2487, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2488 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2489 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2489, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2490 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2491 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2492 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2493 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLSTALLEDPATTERN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2493, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2494 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSTALLEDPATTERN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSTALLEDPATTERN", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2495 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLSTALLEDPATTERN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSTALLEDPATTERN", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSTALLEDPATTERN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2496 + * outinteger = 0 + * retCode = lib.TA_CDLSTALLEDPATTERN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSTALLEDPATTERN", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSTALLEDPATTERN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2497 + * retCode = lib.TA_CDLSTALLEDPATTERN( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSTALLEDPATTERN", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -52693,6 +79124,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_496stream_CDLSTALLEDPATTERN(CYTHON_UNU __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2465 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSTALLEDPATTERN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTALLEDPATTERN(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -52709,6 +79147,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_496stream_CDLSTALLEDPATTERN(CYTHON_UNU return __pyx_r; } +/* "talib/_stream.pxi":2501 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSTICKSANDWICH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTICKSANDWICH(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_499stream_CDLSTICKSANDWICH(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -52829,45 +79274,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_498stream_CDLSTICKSANDWICH(CYTHON_UNUS __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2521 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2522 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2523 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2524 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2525 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2525, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2526 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2527 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2528 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2529 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLSTICKSANDWICH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2529, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2530 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLSTICKSANDWICH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSTICKSANDWICH", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2531 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLSTICKSANDWICH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLSTICKSANDWICH", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLSTICKSANDWICH((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2532 + * outinteger = 0 + * retCode = lib.TA_CDLSTICKSANDWICH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSTICKSANDWICH", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLSTICKSANDWICH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2533 + * retCode = lib.TA_CDLSTICKSANDWICH( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLSTICKSANDWICH", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -52875,6 +79411,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_498stream_CDLSTICKSANDWICH(CYTHON_UNUS __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2501 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSTICKSANDWICH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTICKSANDWICH(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -52891,6 +79434,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_498stream_CDLSTICKSANDWICH(CYTHON_UNUS return __pyx_r; } +/* "talib/_stream.pxi":2537 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTAKURI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTAKURI(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_501stream_CDLTAKURI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -53011,45 +79561,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_500stream_CDLTAKURI(CYTHON_UNUSED PyOb __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2557 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2557, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2558 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2559 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2560 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2561 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2561, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2562 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2563 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2563, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2564 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2565 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLTAKURI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2565, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2566 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLTAKURI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTAKURI", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2567 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLTAKURI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLTAKURI", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLTAKURI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2568 + * outinteger = 0 + * retCode = lib.TA_CDLTAKURI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTAKURI", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLTAKURI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2568, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2569 + * retCode = lib.TA_CDLTAKURI( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTAKURI", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -53057,6 +79698,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_500stream_CDLTAKURI(CYTHON_UNUSED PyOb __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2537 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTAKURI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTAKURI(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -53073,6 +79721,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_500stream_CDLTAKURI(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_stream.pxi":2573 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTASUKIGAP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTASUKIGAP(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_503stream_CDLTASUKIGAP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -53193,45 +79848,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_502stream_CDLTASUKIGAP(CYTHON_UNUSED P __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2593 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2594 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2595 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2596 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2597 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2598 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2599 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2600 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2601 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLTASUKIGAP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2601, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2602 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLTASUKIGAP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTASUKIGAP", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2603 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLTASUKIGAP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLTASUKIGAP", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLTASUKIGAP((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2604 + * outinteger = 0 + * retCode = lib.TA_CDLTASUKIGAP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTASUKIGAP", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLTASUKIGAP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2605 + * retCode = lib.TA_CDLTASUKIGAP( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTASUKIGAP", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -53239,6 +79985,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_502stream_CDLTASUKIGAP(CYTHON_UNUSED P __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2573 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTASUKIGAP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTASUKIGAP(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -53255,6 +80008,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_502stream_CDLTASUKIGAP(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_stream.pxi":2609 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTHRUSTING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTHRUSTING(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_505stream_CDLTHRUSTING(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -53375,45 +80135,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_504stream_CDLTHRUSTING(CYTHON_UNUSED P __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2629 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2630 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2631 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2632 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2633 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2634 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2635 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2636 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2637 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLTHRUSTING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2637, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2638 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLTHRUSTING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTHRUSTING", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2639 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLTHRUSTING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLTHRUSTING", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLTHRUSTING((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2640 + * outinteger = 0 + * retCode = lib.TA_CDLTHRUSTING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTHRUSTING", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLTHRUSTING, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2641 + * retCode = lib.TA_CDLTHRUSTING( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTHRUSTING", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -53421,6 +80272,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_504stream_CDLTHRUSTING(CYTHON_UNUSED P __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2609 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTHRUSTING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTHRUSTING(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -53437,6 +80295,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_504stream_CDLTHRUSTING(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_stream.pxi":2645 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTRISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTRISTAR(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_507stream_CDLTRISTAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -53557,45 +80422,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_506stream_CDLTRISTAR(CYTHON_UNUSED PyO __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2665 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2666 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2667 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2668 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2669 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2670 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2671 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2672 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2673 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLTRISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2673, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2674 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLTRISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTRISTAR", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2675 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLTRISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLTRISTAR", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLTRISTAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2676 + * outinteger = 0 + * retCode = lib.TA_CDLTRISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTRISTAR", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLTRISTAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2677 + * retCode = lib.TA_CDLTRISTAR( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLTRISTAR", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -53603,6 +80559,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_506stream_CDLTRISTAR(CYTHON_UNUSED PyO __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2645 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTRISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTRISTAR(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -53619,6 +80582,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_506stream_CDLTRISTAR(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_stream.pxi":2681 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLUNIQUE3RIVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUNIQUE3RIVER(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_509stream_CDLUNIQUE3RIVER(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -53739,45 +80709,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_508stream_CDLUNIQUE3RIVER(CYTHON_UNUSE __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2701 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2702 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2703 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2704 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2705 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2706 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2707 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2708 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2709 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLUNIQUE3RIVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2709, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2710 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLUNIQUE3RIVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLUNIQUE3RIVER", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2711 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLUNIQUE3RIVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLUNIQUE3RIVER", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLUNIQUE3RIVER((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2712 + * outinteger = 0 + * retCode = lib.TA_CDLUNIQUE3RIVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLUNIQUE3RIVER", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLUNIQUE3RIVER, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2712, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2713 + * retCode = lib.TA_CDLUNIQUE3RIVER( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLUNIQUE3RIVER", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -53785,6 +80846,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_508stream_CDLUNIQUE3RIVER(CYTHON_UNUSE __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2681 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLUNIQUE3RIVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUNIQUE3RIVER(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -53801,6 +80869,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_508stream_CDLUNIQUE3RIVER(CYTHON_UNUSE return __pyx_r; } +/* "talib/_stream.pxi":2717 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLUPSIDEGAP2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUPSIDEGAP2CROWS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_511stream_CDLUPSIDEGAP2CROWS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -53921,45 +80996,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_510stream_CDLUPSIDEGAP2CROWS(CYTHON_UN __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2737 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2738 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2739 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2740 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2741 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2742 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2743 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2743, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2744 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2745 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2745, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2746 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLUPSIDEGAP2CROWS", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2747 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLUPSIDEGAP2CROWS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLUPSIDEGAP2CROWS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2748 + * outinteger = 0 + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLUPSIDEGAP2CROWS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLUPSIDEGAP2CROWS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2749 + * retCode = lib.TA_CDLUPSIDEGAP2CROWS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLUPSIDEGAP2CROWS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -53967,6 +81133,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_510stream_CDLUPSIDEGAP2CROWS(CYTHON_UN __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2717 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLUPSIDEGAP2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUPSIDEGAP2CROWS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -53983,6 +81156,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_510stream_CDLUPSIDEGAP2CROWS(CYTHON_UN return __pyx_r; } +/* "talib/_stream.pxi":2753 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLXSIDEGAP3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLXSIDEGAP3METHODS(open, high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_513stream_CDLXSIDEGAP3METHODS(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -54103,45 +81283,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_512stream_CDLXSIDEGAP3METHODS(CYTHON_U __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":2773 + * int outnbelement + * int outinteger + * open = check_array(open) # <<<<<<<<<<<<<< + * open_data = open.data + * high = check_array(high) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_open)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_open, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2774 + * int outinteger + * open = check_array(open) + * open_data = open.data # <<<<<<<<<<<<<< + * high = check_array(high) + * high_data = high.data + */ __pyx_v_open_data = ((double *)__pyx_v_open->data); + /* "talib/_stream.pxi":2775 + * open = check_array(open) + * open_data = open.data + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2775, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2776 + * open_data = open.data + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":2777 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2777, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2778 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":2779 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length4(open, high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2779, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2780 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length4(open, high, low, close) + * outinteger = 0 + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":2781 + * close = check_array(close) + * close_data = close.data + * length = check_length4(open, high, low, close) # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_CDLXSIDEGAP3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_open, __pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2781, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2782 + * close_data = close.data + * length = check_length4(open, high, low, close) + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_CDLXSIDEGAP3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLXSIDEGAP3METHODS", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":2783 + * length = check_length4(open, high, low, close) + * outinteger = 0 + * retCode = lib.TA_CDLXSIDEGAP3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CDLXSIDEGAP3METHODS", retCode) + * return outinteger + */ __pyx_v_retCode = TA_CDLXSIDEGAP3METHODS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_open_data, __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":2784 + * outinteger = 0 + * retCode = lib.TA_CDLXSIDEGAP3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLXSIDEGAP3METHODS", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CDLXSIDEGAP3METHODS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2784, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2785 + * retCode = lib.TA_CDLXSIDEGAP3METHODS( (length) - 1 , (length) - 1 , open_data , high_data , low_data , close_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_CDLXSIDEGAP3METHODS", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -54149,6 +81420,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_512stream_CDLXSIDEGAP3METHODS(CYTHON_U __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2753 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLXSIDEGAP3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLXSIDEGAP3METHODS(open, high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -54165,6 +81443,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_512stream_CDLXSIDEGAP3METHODS(CYTHON_U return __pyx_r; } +/* "talib/_stream.pxi":2789 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CEIL( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ CEIL(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_515stream_CEIL(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -54205,23 +81490,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_514stream_CEIL(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_CEIL", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":2806 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2807 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":2808 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_CEIL( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":2809 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_CEIL( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CEIL", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":2810 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_CEIL( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CEIL", retCode) + * return outreal + */ __pyx_v_retCode = TA_CEIL((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":2811 + * outreal = NaN + * retCode = lib.TA_CEIL( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CEIL", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CEIL, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2812 + * retCode = lib.TA_CEIL( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CEIL", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -54229,6 +81563,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_514stream_CEIL(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2789 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CEIL( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ CEIL(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -54242,6 +81583,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_514stream_CEIL(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":2816 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CMO( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CMO(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_517stream_CMO(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -54337,23 +81685,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_516stream_CMO(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_CMO", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":2835 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2835, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2836 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":2837 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_CMO( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":2838 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_CMO( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CMO", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":2839 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_CMO( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CMO", retCode) + * return outreal + */ __pyx_v_retCode = TA_CMO((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":2840 + * outreal = NaN + * retCode = lib.TA_CMO( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CMO", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CMO, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2840, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2841 + * retCode = lib.TA_CMO( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CMO", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2841, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -54361,6 +81758,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_516stream_CMO(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2816 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CMO( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CMO(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -54374,6 +81778,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_516stream_CMO(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":2845 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CORREL( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CORREL(real0, real1[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_519stream_CORREL(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -54484,31 +81895,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_518stream_CORREL(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_stream.pxi":2866 + * int outnbelement + * double outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real0_data = real0.data + * real1 = check_array(real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2867 + * double outreal + * real0 = check_array(real0) + * real0_data = real0.data # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * real1_data = real1.data + */ __pyx_v_real0_data = ((double *)__pyx_v_real0->data); + /* "talib/_stream.pxi":2868 + * real0 = check_array(real0) + * real0_data = real0.data + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * real1_data = real1.data + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2868, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2869 + * real0_data = real0.data + * real1 = check_array(real1) + * real1_data = real1.data # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * outreal = NaN + */ __pyx_v_real1_data = ((double *)__pyx_v_real1->data); + /* "talib/_stream.pxi":2870 + * real1 = check_array(real1) + * real1_data = real1.data + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_CORREL( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2870, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2871 + * real1_data = real1.data + * length = check_length2(real0, real1) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_CORREL( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CORREL", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":2872 + * length = check_length2(real0, real1) + * outreal = NaN + * retCode = lib.TA_CORREL( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_CORREL", retCode) + * return outreal + */ __pyx_v_retCode = TA_CORREL((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real0_data, __pyx_v_real1_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":2873 + * outreal = NaN + * retCode = lib.TA_CORREL( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CORREL", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_CORREL, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2874 + * retCode = lib.TA_CORREL( (length) - 1 , (length) - 1 , real0_data , real1_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_CORREL", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2874, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -54516,6 +81990,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_518stream_CORREL(CYTHON_UNUSED PyObjec __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2845 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CORREL( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CORREL(real0, real1[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -54530,6 +82011,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_518stream_CORREL(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_stream.pxi":2878 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_COS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COS(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_521stream_COS(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -54570,23 +82058,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_520stream_COS(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_COS", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":2895 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2896 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":2897 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_COS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":2898 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_COS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_COS", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":2899 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_COS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_COS", retCode) + * return outreal + */ __pyx_v_retCode = TA_COS((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":2900 + * outreal = NaN + * retCode = lib.TA_COS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_COS", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_COS, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2900, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2901 + * retCode = lib.TA_COS( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_COS", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -54594,6 +82131,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_520stream_COS(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2878 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_COS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COS(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -54607,6 +82151,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_520stream_COS(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":2905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_COSH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COSH(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_523stream_COSH(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -54647,23 +82198,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_522stream_COSH(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_COSH", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":2922 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2923 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":2924 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_COSH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":2925 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_COSH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_COSH", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":2926 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_COSH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_COSH", retCode) + * return outreal + */ __pyx_v_retCode = TA_COSH((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":2927 + * outreal = NaN + * retCode = lib.TA_COSH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_COSH", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_COSH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2928 + * retCode = lib.TA_COSH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_COSH", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2928, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -54671,6 +82271,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_522stream_COSH(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_COSH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COSH(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -54684,6 +82291,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_522stream_COSH(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":2932 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DEMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_525stream_DEMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -54779,23 +82393,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_524stream_DEMA(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_DEMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":2951 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2951, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2952 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":2953 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_DEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":2954 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_DEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DEMA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":2955 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_DEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_DEMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_DEMA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":2956 + * outreal = NaN + * retCode = lib.TA_DEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DEMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_DEMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2957 + * retCode = lib.TA_DEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DEMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -54803,6 +82466,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_524stream_DEMA(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2932 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DEMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -54816,6 +82486,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_524stream_DEMA(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":2961 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DIV( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ DIV(real0, real1) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_527stream_DIV(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -54908,31 +82585,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_526stream_DIV(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_stream.pxi":2980 + * int outnbelement + * double outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real0_data = real0.data + * real1 = check_array(real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2981 + * double outreal + * real0 = check_array(real0) + * real0_data = real0.data # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * real1_data = real1.data + */ __pyx_v_real0_data = ((double *)__pyx_v_real0->data); + /* "talib/_stream.pxi":2982 + * real0 = check_array(real0) + * real0_data = real0.data + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * real1_data = real1.data + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2982, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2983 + * real0_data = real0.data + * real1 = check_array(real1) + * real1_data = real1.data # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * outreal = NaN + */ __pyx_v_real1_data = ((double *)__pyx_v_real1->data); + /* "talib/_stream.pxi":2984 + * real1 = check_array(real1) + * real1_data = real1.data + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_DIV( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 2984, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":2985 + * real1_data = real1.data + * length = check_length2(real0, real1) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_DIV( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DIV", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":2986 + * length = check_length2(real0, real1) + * outreal = NaN + * retCode = lib.TA_DIV( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_DIV", retCode) + * return outreal + */ __pyx_v_retCode = TA_DIV((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real0_data, __pyx_v_real1_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":2987 + * outreal = NaN + * retCode = lib.TA_DIV( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DIV", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_DIV, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2988 + * retCode = lib.TA_DIV( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DIV", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -54940,6 +82680,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_526stream_DIV(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2961 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DIV( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ DIV(real0, real1) + * + */ /* function exit code */ __pyx_L1_error:; @@ -54954,6 +82701,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_526stream_DIV(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":2992 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DX(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_529stream_DX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -55078,38 +82832,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_528stream_DX(CYTHON_UNUSED PyObject *_ __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":3013 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3013, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3014 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":3015 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3015, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3016 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":3017 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3017, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3018 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":3019 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_DX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 3019, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":3020 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_DX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DX", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3021 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_DX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_DX", retCode) + * return outreal + */ __pyx_v_retCode = TA_DX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3022 + * outreal = NaN + * retCode = lib.TA_DX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DX", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_DX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3022, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3023 + * retCode = lib.TA_DX( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_DX", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3023, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55117,6 +82948,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_528stream_DX(CYTHON_UNUSED PyObject *_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":2992 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DX(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55132,6 +82970,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_528stream_DX(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_stream.pxi":3027 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_EMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ EMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_531stream_EMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -55227,23 +83072,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_530stream_EMA(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_EMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3046 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3046, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3047 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3048 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_EMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3049 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_EMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_EMA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3050 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_EMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_EMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_EMA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3051 + * outreal = NaN + * retCode = lib.TA_EMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_EMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_EMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3051, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3052 + * retCode = lib.TA_EMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_EMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3052, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55251,6 +83145,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_530stream_EMA(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3027 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_EMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ EMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55264,6 +83165,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_530stream_EMA(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":3056 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_EXP( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ EXP(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_533stream_EXP(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -55304,23 +83212,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_532stream_EXP(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_EXP", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3073 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3074 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3075 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_EXP( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3076 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_EXP( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_EXP", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3077 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_EXP( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_EXP", retCode) + * return outreal + */ __pyx_v_retCode = TA_EXP((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3078 + * outreal = NaN + * retCode = lib.TA_EXP( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_EXP", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_EXP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3078, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3079 + * retCode = lib.TA_EXP( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_EXP", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55328,6 +83285,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_532stream_EXP(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3056 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_EXP( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ EXP(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55341,6 +83305,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_532stream_EXP(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":3083 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_FLOOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ FLOOR(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_535stream_FLOOR(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -55381,23 +83352,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_534stream_FLOOR(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_FLOOR", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3100 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3101 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3102 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_FLOOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3103 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_FLOOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_FLOOR", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3104 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_FLOOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_FLOOR", retCode) + * return outreal + */ __pyx_v_retCode = TA_FLOOR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3105 + * outreal = NaN + * retCode = lib.TA_FLOOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_FLOOR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_FLOOR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3106 + * retCode = lib.TA_FLOOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_FLOOR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3106, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55405,6 +83425,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_534stream_FLOOR(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3083 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_FLOOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ FLOOR(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55418,6 +83445,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_534stream_FLOOR(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":3110 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_DCPERIOD( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPERIOD(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_537stream_HT_DCPERIOD(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -55458,23 +83492,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_536stream_HT_DCPERIOD(CYTHON_UNUSED Py __Pyx_RefNannySetupContext("stream_HT_DCPERIOD", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3127 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3128 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3129 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_HT_DCPERIOD( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3130 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_DCPERIOD( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_DCPERIOD", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3131 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_HT_DCPERIOD( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_DCPERIOD", retCode) + * return outreal + */ __pyx_v_retCode = TA_HT_DCPERIOD((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3132 + * outreal = NaN + * retCode = lib.TA_HT_DCPERIOD( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_DCPERIOD", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_DCPERIOD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3133 + * retCode = lib.TA_HT_DCPERIOD( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_DCPERIOD", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55482,6 +83565,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_536stream_HT_DCPERIOD(CYTHON_UNUSED Py __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3110 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_DCPERIOD( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPERIOD(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55495,6 +83585,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_536stream_HT_DCPERIOD(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":3137 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_DCPHASE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPHASE(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_539stream_HT_DCPHASE(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -55535,23 +83632,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_538stream_HT_DCPHASE(CYTHON_UNUSED PyO __Pyx_RefNannySetupContext("stream_HT_DCPHASE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3154 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3155 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3156 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_HT_DCPHASE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3157 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_DCPHASE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_DCPHASE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3158 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_HT_DCPHASE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_DCPHASE", retCode) + * return outreal + */ __pyx_v_retCode = TA_HT_DCPHASE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3159 + * outreal = NaN + * retCode = lib.TA_HT_DCPHASE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_DCPHASE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_DCPHASE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3160 + * retCode = lib.TA_HT_DCPHASE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_DCPHASE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55559,6 +83705,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_538stream_HT_DCPHASE(CYTHON_UNUSED PyO __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3137 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_DCPHASE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPHASE(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55572,6 +83725,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_538stream_HT_DCPHASE(CYTHON_UNUSED PyO return __pyx_r; } +/* "talib/_stream.pxi":3164 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_PHASOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_PHASOR(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_541stream_HT_PHASOR(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -55615,25 +83775,81 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_540stream_HT_PHASOR(CYTHON_UNUSED PyOb __Pyx_RefNannySetupContext("stream_HT_PHASOR", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3183 + * double outinphase + * double outquadrature + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3184 + * double outquadrature + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outinphase = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3185 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outinphase = NaN + * outquadrature = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3186 + * real_data = real.data + * length = real.shape[0] + * outinphase = NaN # <<<<<<<<<<<<<< + * outquadrature = NaN + * retCode = lib.TA_HT_PHASOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinphase , &outquadrature ) + */ __pyx_v_outinphase = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3187 + * length = real.shape[0] + * outinphase = NaN + * outquadrature = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_PHASOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinphase , &outquadrature ) + * _ta_check_success("TA_HT_PHASOR", retCode) + */ __pyx_v_outquadrature = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3188 + * outinphase = NaN + * outquadrature = NaN + * retCode = lib.TA_HT_PHASOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinphase , &outquadrature ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_PHASOR", retCode) + * return outinphase , outquadrature + */ __pyx_v_retCode = TA_HT_PHASOR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinphase), (&__pyx_v_outquadrature)); + /* "talib/_stream.pxi":3189 + * outquadrature = NaN + * retCode = lib.TA_HT_PHASOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinphase , &outquadrature ) + * _ta_check_success("TA_HT_PHASOR", retCode) # <<<<<<<<<<<<<< + * return outinphase , outquadrature + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_PHASOR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3189, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3190 + * retCode = lib.TA_HT_PHASOR( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinphase , &outquadrature ) + * _ta_check_success("TA_HT_PHASOR", retCode) + * return outinphase , outquadrature # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outinphase); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3190, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55651,6 +83867,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_540stream_HT_PHASOR(CYTHON_UNUSED PyOb __pyx_t_3 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3164 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_PHASOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_PHASOR(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55666,6 +83889,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_540stream_HT_PHASOR(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_stream.pxi":3194 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_SINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_SINE(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_543stream_HT_SINE(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -55709,25 +83939,81 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_542stream_HT_SINE(CYTHON_UNUSED PyObje __Pyx_RefNannySetupContext("stream_HT_SINE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3213 + * double outsine + * double outleadsine + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3213, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3214 + * double outleadsine + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outsine = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3215 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outsine = NaN + * outleadsine = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3216 + * real_data = real.data + * length = real.shape[0] + * outsine = NaN # <<<<<<<<<<<<<< + * outleadsine = NaN + * retCode = lib.TA_HT_SINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outsine , &outleadsine ) + */ __pyx_v_outsine = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3217 + * length = real.shape[0] + * outsine = NaN + * outleadsine = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_SINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outsine , &outleadsine ) + * _ta_check_success("TA_HT_SINE", retCode) + */ __pyx_v_outleadsine = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3218 + * outsine = NaN + * outleadsine = NaN + * retCode = lib.TA_HT_SINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outsine , &outleadsine ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_SINE", retCode) + * return outsine , outleadsine + */ __pyx_v_retCode = TA_HT_SINE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outsine), (&__pyx_v_outleadsine)); + /* "talib/_stream.pxi":3219 + * outleadsine = NaN + * retCode = lib.TA_HT_SINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outsine , &outleadsine ) + * _ta_check_success("TA_HT_SINE", retCode) # <<<<<<<<<<<<<< + * return outsine , outleadsine + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_SINE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3220 + * retCode = lib.TA_HT_SINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outsine , &outleadsine ) + * _ta_check_success("TA_HT_SINE", retCode) + * return outsine , outleadsine # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outsine); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3220, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55745,6 +84031,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_542stream_HT_SINE(CYTHON_UNUSED PyObje __pyx_t_3 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3194 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_SINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_SINE(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55760,6 +84053,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_542stream_HT_SINE(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_stream.pxi":3224 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_TRENDLINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDLINE(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_545stream_HT_TRENDLINE(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -55800,23 +84100,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_544stream_HT_TRENDLINE(CYTHON_UNUSED P __Pyx_RefNannySetupContext("stream_HT_TRENDLINE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3241 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3242 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3243 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_HT_TRENDLINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3244 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_TRENDLINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_TRENDLINE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3245 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_HT_TRENDLINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_TRENDLINE", retCode) + * return outreal + */ __pyx_v_retCode = TA_HT_TRENDLINE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3246 + * outreal = NaN + * retCode = lib.TA_HT_TRENDLINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_TRENDLINE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_TRENDLINE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3247 + * retCode = lib.TA_HT_TRENDLINE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_HT_TRENDLINE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55824,6 +84173,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_544stream_HT_TRENDLINE(CYTHON_UNUSED P __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3224 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_TRENDLINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDLINE(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55837,6 +84193,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_544stream_HT_TRENDLINE(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_stream.pxi":3251 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_TRENDMODE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDMODE(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_547stream_HT_TRENDMODE(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -55877,23 +84240,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_546stream_HT_TRENDMODE(CYTHON_UNUSED P __Pyx_RefNannySetupContext("stream_HT_TRENDMODE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3268 + * int outnbelement + * int outinteger + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3269 + * int outinteger + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outinteger = 0 + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3270 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_HT_TRENDMODE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3271 + * real_data = real.data + * length = real.shape[0] + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_HT_TRENDMODE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_HT_TRENDMODE", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":3272 + * length = real.shape[0] + * outinteger = 0 + * retCode = lib.TA_HT_TRENDMODE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_HT_TRENDMODE", retCode) + * return outinteger + */ __pyx_v_retCode = TA_HT_TRENDMODE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":3273 + * outinteger = 0 + * retCode = lib.TA_HT_TRENDMODE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_HT_TRENDMODE", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_HT_TRENDMODE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3274 + * retCode = lib.TA_HT_TRENDMODE( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_HT_TRENDMODE", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3274, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -55901,6 +84313,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_546stream_HT_TRENDMODE(CYTHON_UNUSED P __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3251 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_TRENDMODE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDMODE(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -55914,6 +84333,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_546stream_HT_TRENDMODE(CYTHON_UNUSED P return __pyx_r; } +/* "talib/_stream.pxi":3278 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_KAMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ KAMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_549stream_KAMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -56009,23 +84435,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_548stream_KAMA(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_KAMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3297 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3298 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3299 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_KAMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3300 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_KAMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_KAMA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3301 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_KAMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_KAMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_KAMA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3302 + * outreal = NaN + * retCode = lib.TA_KAMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_KAMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_KAMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3303 + * retCode = lib.TA_KAMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_KAMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -56033,6 +84508,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_548stream_KAMA(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3278 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_KAMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ KAMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -56046,6 +84528,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_548stream_KAMA(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":3307 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_551stream_LINEARREG(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -56141,23 +84630,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_550stream_LINEARREG(CYTHON_UNUSED PyOb __Pyx_RefNannySetupContext("stream_LINEARREG", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3326 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3327 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3328 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_LINEARREG( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3329 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_LINEARREG( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3330 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_LINEARREG( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LINEARREG", retCode) + * return outreal + */ __pyx_v_retCode = TA_LINEARREG((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3331 + * outreal = NaN + * retCode = lib.TA_LINEARREG( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LINEARREG, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3331, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3332 + * retCode = lib.TA_LINEARREG( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -56165,6 +84703,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_550stream_LINEARREG(CYTHON_UNUSED PyOb __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3307 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -56178,6 +84723,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_550stream_LINEARREG(CYTHON_UNUSED PyOb return __pyx_r; } +/* "talib/_stream.pxi":3336 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_ANGLE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_ANGLE(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_553stream_LINEARREG_ANGLE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -56273,23 +84825,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_552stream_LINEARREG_ANGLE(CYTHON_UNUSE __Pyx_RefNannySetupContext("stream_LINEARREG_ANGLE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3355 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3356 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3357 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_LINEARREG_ANGLE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3358 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_LINEARREG_ANGLE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_ANGLE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3359 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_LINEARREG_ANGLE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LINEARREG_ANGLE", retCode) + * return outreal + */ __pyx_v_retCode = TA_LINEARREG_ANGLE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3360 + * outreal = NaN + * retCode = lib.TA_LINEARREG_ANGLE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_ANGLE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LINEARREG_ANGLE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3361 + * retCode = lib.TA_LINEARREG_ANGLE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_ANGLE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -56297,6 +84898,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_552stream_LINEARREG_ANGLE(CYTHON_UNUSE __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3336 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_ANGLE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_ANGLE(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -56310,6 +84918,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_552stream_LINEARREG_ANGLE(CYTHON_UNUSE return __pyx_r; } +/* "talib/_stream.pxi":3365 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_INTERCEPT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_INTERCEPT(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_555stream_LINEARREG_INTERCEPT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -56405,23 +85020,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_554stream_LINEARREG_INTERCEPT(CYTHON_U __Pyx_RefNannySetupContext("stream_LINEARREG_INTERCEPT", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3384 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3385 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3386 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_LINEARREG_INTERCEPT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3387 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_LINEARREG_INTERCEPT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_INTERCEPT", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3388 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_LINEARREG_INTERCEPT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LINEARREG_INTERCEPT", retCode) + * return outreal + */ __pyx_v_retCode = TA_LINEARREG_INTERCEPT((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3389 + * outreal = NaN + * retCode = lib.TA_LINEARREG_INTERCEPT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_INTERCEPT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LINEARREG_INTERCEPT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3390 + * retCode = lib.TA_LINEARREG_INTERCEPT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_INTERCEPT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3390, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -56429,6 +85093,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_554stream_LINEARREG_INTERCEPT(CYTHON_U __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3365 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_INTERCEPT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_INTERCEPT(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -56442,6 +85113,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_554stream_LINEARREG_INTERCEPT(CYTHON_U return __pyx_r; } +/* "talib/_stream.pxi":3394 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_SLOPE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_SLOPE(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_557stream_LINEARREG_SLOPE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -56537,23 +85215,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_556stream_LINEARREG_SLOPE(CYTHON_UNUSE __Pyx_RefNannySetupContext("stream_LINEARREG_SLOPE", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3413 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3414 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3415 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_LINEARREG_SLOPE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3416 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_LINEARREG_SLOPE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_SLOPE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3417 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_LINEARREG_SLOPE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LINEARREG_SLOPE", retCode) + * return outreal + */ __pyx_v_retCode = TA_LINEARREG_SLOPE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3418 + * outreal = NaN + * retCode = lib.TA_LINEARREG_SLOPE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_SLOPE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LINEARREG_SLOPE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3418, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3419 + * retCode = lib.TA_LINEARREG_SLOPE( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LINEARREG_SLOPE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -56561,6 +85288,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_556stream_LINEARREG_SLOPE(CYTHON_UNUSE __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3394 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_SLOPE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_SLOPE(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -56574,6 +85308,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_556stream_LINEARREG_SLOPE(CYTHON_UNUSE return __pyx_r; } +/* "talib/_stream.pxi":3423 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_559stream_LN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -56614,23 +85355,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_558stream_LN(CYTHON_UNUSED PyObject *_ __Pyx_RefNannySetupContext("stream_LN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3440 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3441 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3442 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_LN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3443 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_LN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LN", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3444 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_LN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LN", retCode) + * return outreal + */ __pyx_v_retCode = TA_LN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3445 + * outreal = NaN + * retCode = lib.TA_LN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3446 + * retCode = lib.TA_LN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -56638,6 +85428,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_558stream_LN(CYTHON_UNUSED PyObject *_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3423 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -56651,6 +85448,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_558stream_LN(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_stream.pxi":3450 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LOG10( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LOG10(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_561stream_LOG10(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -56691,23 +85495,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_560stream_LOG10(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_LOG10", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3467 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3468 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3469 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_LOG10( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3470 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_LOG10( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LOG10", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3471 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_LOG10( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_LOG10", retCode) + * return outreal + */ __pyx_v_retCode = TA_LOG10((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3472 + * outreal = NaN + * retCode = lib.TA_LOG10( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LOG10", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_LOG10, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3473 + * retCode = lib.TA_LOG10( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_LOG10", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3473, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -56715,6 +85568,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_560stream_LOG10(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3450 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LOG10( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LOG10(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -56728,6 +85588,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_560stream_LOG10(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":3477 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MA( np.ndarray real not None , int timeperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MA(real[, timeperiod=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_563stream_MA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -56839,23 +85706,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_562stream_MA(CYTHON_UNUSED PyObject *_ __Pyx_RefNannySetupContext("stream_MA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3497 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3498 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3499 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MA( (length) - 1 , (length) - 1 , real_data , timeperiod , matype , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3500 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MA( (length) - 1 , (length) - 1 , real_data , timeperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3501 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_MA( (length) - 1 , (length) - 1 , real_data , timeperiod , matype , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MA", retCode) + * return outreal + */ __pyx_v_retCode = TA_MA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3502 + * outreal = NaN + * retCode = lib.TA_MA( (length) - 1 , (length) - 1 , real_data , timeperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3502, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3503 + * retCode = lib.TA_MA( (length) - 1 , (length) - 1 , real_data , timeperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3503, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -56863,6 +85779,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_562stream_MA(CYTHON_UNUSED PyObject *_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3477 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MA( np.ndarray real not None , int timeperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MA(real[, timeperiod=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -56876,6 +85799,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_562stream_MA(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_stream.pxi":3507 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACD( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACD(real[, fastperiod=?, slowperiod=?, signalperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_565stream_MACD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -57008,27 +85938,90 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_564stream_MACD(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_MACD", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3532 + * double outmacdsignal + * double outmacdhist + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3533 + * double outmacdhist + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outmacd = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3534 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outmacd = NaN + * outmacdsignal = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3535 + * real_data = real.data + * length = real.shape[0] + * outmacd = NaN # <<<<<<<<<<<<<< + * outmacdsignal = NaN + * outmacdhist = NaN + */ __pyx_v_outmacd = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3536 + * length = real.shape[0] + * outmacd = NaN + * outmacdsignal = NaN # <<<<<<<<<<<<<< + * outmacdhist = NaN + * retCode = lib.TA_MACD( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + */ __pyx_v_outmacdsignal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3537 + * outmacd = NaN + * outmacdsignal = NaN + * outmacdhist = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MACD( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACD", retCode) + */ __pyx_v_outmacdhist = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3538 + * outmacdsignal = NaN + * outmacdhist = NaN + * retCode = lib.TA_MACD( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MACD", retCode) + * return outmacd , outmacdsignal , outmacdhist + */ __pyx_v_retCode = TA_MACD((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_signalperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outmacd), (&__pyx_v_outmacdsignal), (&__pyx_v_outmacdhist)); + /* "talib/_stream.pxi":3539 + * outmacdhist = NaN + * retCode = lib.TA_MACD( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACD", retCode) # <<<<<<<<<<<<<< + * return outmacd , outmacdsignal , outmacdhist + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MACD, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3540 + * retCode = lib.TA_MACD( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACD", retCode) + * return outmacd , outmacdsignal , outmacdhist # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outmacd); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -57051,6 +86044,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_564stream_MACD(CYTHON_UNUSED PyObject __pyx_t_4 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3507 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACD( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACD(real[, fastperiod=?, slowperiod=?, signalperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -57067,6 +86067,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_564stream_MACD(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":3544 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACDEXT( np.ndarray real not None , int fastperiod=-2**31 , int fastmatype=0 , int slowperiod=-2**31 , int slowmatype=0 , int signalperiod=-2**31 , int signalmatype=0 ): # <<<<<<<<<<<<<< + * """ MACDEXT(real[, fastperiod=?, fastmatype=?, slowperiod=?, slowmatype=?, signalperiod=?, signalmatype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_567stream_MACDEXT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -57247,27 +86254,90 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_566stream_MACDEXT(CYTHON_UNUSED PyObje __Pyx_RefNannySetupContext("stream_MACDEXT", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3572 + * double outmacdsignal + * double outmacdhist + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3573 + * double outmacdhist + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outmacd = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3574 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outmacd = NaN + * outmacdsignal = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3575 + * real_data = real.data + * length = real.shape[0] + * outmacd = NaN # <<<<<<<<<<<<<< + * outmacdsignal = NaN + * outmacdhist = NaN + */ __pyx_v_outmacd = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3576 + * length = real.shape[0] + * outmacd = NaN + * outmacdsignal = NaN # <<<<<<<<<<<<<< + * outmacdhist = NaN + * retCode = lib.TA_MACDEXT( (length) - 1 , (length) - 1 , real_data , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + */ __pyx_v_outmacdsignal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3577 + * outmacd = NaN + * outmacdsignal = NaN + * outmacdhist = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MACDEXT( (length) - 1 , (length) - 1 , real_data , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACDEXT", retCode) + */ __pyx_v_outmacdhist = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3578 + * outmacdsignal = NaN + * outmacdhist = NaN + * retCode = lib.TA_MACDEXT( (length) - 1 , (length) - 1 , real_data , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MACDEXT", retCode) + * return outmacd , outmacdsignal , outmacdhist + */ __pyx_v_retCode = TA_MACDEXT((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_fastperiod, __pyx_v_fastmatype, __pyx_v_slowperiod, __pyx_v_slowmatype, __pyx_v_signalperiod, __pyx_v_signalmatype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outmacd), (&__pyx_v_outmacdsignal), (&__pyx_v_outmacdhist)); + /* "talib/_stream.pxi":3579 + * outmacdhist = NaN + * retCode = lib.TA_MACDEXT( (length) - 1 , (length) - 1 , real_data , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACDEXT", retCode) # <<<<<<<<<<<<<< + * return outmacd , outmacdsignal , outmacdhist + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MACDEXT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3580 + * retCode = lib.TA_MACDEXT( (length) - 1 , (length) - 1 , real_data , fastperiod , fastmatype , slowperiod , slowmatype , signalperiod , signalmatype , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACDEXT", retCode) + * return outmacd , outmacdsignal , outmacdhist # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outmacd); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3580, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -57290,6 +86360,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_566stream_MACDEXT(CYTHON_UNUSED PyObje __pyx_t_4 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3544 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACDEXT( np.ndarray real not None , int fastperiod=-2**31 , int fastmatype=0 , int slowperiod=-2**31 , int slowmatype=0 , int signalperiod=-2**31 , int signalmatype=0 ): # <<<<<<<<<<<<<< + * """ MACDEXT(real[, fastperiod=?, fastmatype=?, slowperiod=?, slowmatype=?, signalperiod=?, signalmatype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -57306,6 +86383,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_566stream_MACDEXT(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_stream.pxi":3584 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACDFIX( np.ndarray real not None , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACDFIX(real[, signalperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_569stream_MACDFIX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -57406,27 +86490,90 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_568stream_MACDFIX(CYTHON_UNUSED PyObje __Pyx_RefNannySetupContext("stream_MACDFIX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3607 + * double outmacdsignal + * double outmacdhist + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3608 + * double outmacdhist + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outmacd = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3609 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outmacd = NaN + * outmacdsignal = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3610 + * real_data = real.data + * length = real.shape[0] + * outmacd = NaN # <<<<<<<<<<<<<< + * outmacdsignal = NaN + * outmacdhist = NaN + */ __pyx_v_outmacd = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3611 + * length = real.shape[0] + * outmacd = NaN + * outmacdsignal = NaN # <<<<<<<<<<<<<< + * outmacdhist = NaN + * retCode = lib.TA_MACDFIX( (length) - 1 , (length) - 1 , real_data , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + */ __pyx_v_outmacdsignal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3612 + * outmacd = NaN + * outmacdsignal = NaN + * outmacdhist = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MACDFIX( (length) - 1 , (length) - 1 , real_data , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACDFIX", retCode) + */ __pyx_v_outmacdhist = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3613 + * outmacdsignal = NaN + * outmacdhist = NaN + * retCode = lib.TA_MACDFIX( (length) - 1 , (length) - 1 , real_data , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MACDFIX", retCode) + * return outmacd , outmacdsignal , outmacdhist + */ __pyx_v_retCode = TA_MACDFIX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_signalperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outmacd), (&__pyx_v_outmacdsignal), (&__pyx_v_outmacdhist)); + /* "talib/_stream.pxi":3614 + * outmacdhist = NaN + * retCode = lib.TA_MACDFIX( (length) - 1 , (length) - 1 , real_data , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACDFIX", retCode) # <<<<<<<<<<<<<< + * return outmacd , outmacdsignal , outmacdhist + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MACDFIX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3614, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3615 + * retCode = lib.TA_MACDFIX( (length) - 1 , (length) - 1 , real_data , signalperiod , &outbegidx , &outnbelement , &outmacd , &outmacdsignal , &outmacdhist ) + * _ta_check_success("TA_MACDFIX", retCode) + * return outmacd , outmacdsignal , outmacdhist # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outmacd); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -57449,6 +86596,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_568stream_MACDFIX(CYTHON_UNUSED PyObje __pyx_t_4 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3584 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACDFIX( np.ndarray real not None , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACDFIX(real[, signalperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -57465,6 +86619,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_568stream_MACDFIX(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_stream.pxi":3619 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAMA( np.ndarray real not None , double fastlimit=-4e37 , double slowlimit=-4e37 ): # <<<<<<<<<<<<<< + * """ MAMA(real[, fastlimit=?, slowlimit=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_571stream_MAMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -57579,25 +86740,81 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_570stream_MAMA(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_MAMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3641 + * double outmama + * double outfama + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3642 + * double outfama + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outmama = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3643 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outmama = NaN + * outfama = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3644 + * real_data = real.data + * length = real.shape[0] + * outmama = NaN # <<<<<<<<<<<<<< + * outfama = NaN + * retCode = lib.TA_MAMA( (length) - 1 , (length) - 1 , real_data , fastlimit , slowlimit , &outbegidx , &outnbelement , &outmama , &outfama ) + */ __pyx_v_outmama = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3645 + * length = real.shape[0] + * outmama = NaN + * outfama = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MAMA( (length) - 1 , (length) - 1 , real_data , fastlimit , slowlimit , &outbegidx , &outnbelement , &outmama , &outfama ) + * _ta_check_success("TA_MAMA", retCode) + */ __pyx_v_outfama = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3646 + * outmama = NaN + * outfama = NaN + * retCode = lib.TA_MAMA( (length) - 1 , (length) - 1 , real_data , fastlimit , slowlimit , &outbegidx , &outnbelement , &outmama , &outfama ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MAMA", retCode) + * return outmama , outfama + */ __pyx_v_retCode = TA_MAMA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_fastlimit, __pyx_v_slowlimit, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outmama), (&__pyx_v_outfama)); + /* "talib/_stream.pxi":3647 + * outfama = NaN + * retCode = lib.TA_MAMA( (length) - 1 , (length) - 1 , real_data , fastlimit , slowlimit , &outbegidx , &outnbelement , &outmama , &outfama ) + * _ta_check_success("TA_MAMA", retCode) # <<<<<<<<<<<<<< + * return outmama , outfama + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MAMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3648 + * retCode = lib.TA_MAMA( (length) - 1 , (length) - 1 , real_data , fastlimit , slowlimit , &outbegidx , &outnbelement , &outmama , &outfama ) + * _ta_check_success("TA_MAMA", retCode) + * return outmama , outfama # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outmama); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -57615,6 +86832,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_570stream_MAMA(CYTHON_UNUSED PyObject __pyx_t_3 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3619 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAMA( np.ndarray real not None , double fastlimit=-4e37 , double slowlimit=-4e37 ): # <<<<<<<<<<<<<< + * """ MAMA(real[, fastlimit=?, slowlimit=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -57630,6 +86854,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_570stream_MAMA(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":3652 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAVP( np.ndarray real not None , np.ndarray periods not None , int minperiod=-2**31 , int maxperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MAVP(real, periods[, minperiod=?, maxperiod=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_573stream_MAVP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -57772,31 +87003,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_572stream_MAVP(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_real); __Pyx_INCREF((PyObject *)__pyx_v_periods); + /* "talib/_stream.pxi":3675 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * periods = check_array(periods) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3676 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * periods = check_array(periods) + * periods_data = periods.data + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3677 + * real = check_array(real) + * real_data = real.data + * periods = check_array(periods) # <<<<<<<<<<<<<< + * periods_data = periods.data + * length = check_length2(real, periods) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_periods)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_periods, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3678 + * real_data = real.data + * periods = check_array(periods) + * periods_data = periods.data # <<<<<<<<<<<<<< + * length = check_length2(real, periods) + * outreal = NaN + */ __pyx_v_periods_data = ((double *)__pyx_v_periods->data); + /* "talib/_stream.pxi":3679 + * periods = check_array(periods) + * periods_data = periods.data + * length = check_length2(real, periods) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MAVP( (length) - 1 , (length) - 1 , real_data , periods_data , minperiod , maxperiod , matype , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real, __pyx_v_periods); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 3679, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":3680 + * periods_data = periods.data + * length = check_length2(real, periods) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MAVP( (length) - 1 , (length) - 1 , real_data , periods_data , minperiod , maxperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MAVP", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3681 + * length = check_length2(real, periods) + * outreal = NaN + * retCode = lib.TA_MAVP( (length) - 1 , (length) - 1 , real_data , periods_data , minperiod , maxperiod , matype , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MAVP", retCode) + * return outreal + */ __pyx_v_retCode = TA_MAVP((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_periods_data, __pyx_v_minperiod, __pyx_v_maxperiod, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3682 + * outreal = NaN + * retCode = lib.TA_MAVP( (length) - 1 , (length) - 1 , real_data , periods_data , minperiod , maxperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MAVP", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MAVP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3683 + * retCode = lib.TA_MAVP( (length) - 1 , (length) - 1 , real_data , periods_data , minperiod , maxperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MAVP", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -57804,6 +87098,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_572stream_MAVP(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3652 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAVP( np.ndarray real not None , np.ndarray periods not None , int minperiod=-2**31 , int maxperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MAVP(real, periods[, minperiod=?, maxperiod=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -57818,6 +87119,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_572stream_MAVP(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":3687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_575stream_MAX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -57913,23 +87221,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_574stream_MAX(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_MAX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3706 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3707 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3708 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3709 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MAX", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3710 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_MAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MAX", retCode) + * return outreal + */ __pyx_v_retCode = TA_MAX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3711 + * outreal = NaN + * retCode = lib.TA_MAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MAX", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MAX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3711, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3712 + * retCode = lib.TA_MAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MAX", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3712, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -57937,6 +87294,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_574stream_MAX(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -57950,6 +87314,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_574stream_MAX(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":3716 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAXINDEX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_577stream_MAXINDEX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -58045,23 +87416,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_576stream_MAXINDEX(CYTHON_UNUSED PyObj __Pyx_RefNannySetupContext("stream_MAXINDEX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3735 + * int outnbelement + * int outinteger + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3736 + * int outinteger + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outinteger = 0 + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3737 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_MAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3738 + * real_data = real.data + * length = real.shape[0] + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_MAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_MAXINDEX", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":3739 + * length = real.shape[0] + * outinteger = 0 + * retCode = lib.TA_MAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MAXINDEX", retCode) + * return outinteger + */ __pyx_v_retCode = TA_MAXINDEX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":3740 + * outinteger = 0 + * retCode = lib.TA_MAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_MAXINDEX", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MAXINDEX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3740, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3741 + * retCode = lib.TA_MAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_MAXINDEX", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -58069,6 +87489,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_576stream_MAXINDEX(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3716 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAXINDEX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -58082,6 +87509,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_576stream_MAXINDEX(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":3745 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MEDPRICE( np.ndarray high not None , np.ndarray low not None ): # <<<<<<<<<<<<<< + * """ MEDPRICE(high, low) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_579stream_MEDPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -58174,31 +87608,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_578stream_MEDPRICE(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_stream.pxi":3763 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3763, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3764 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":3765 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3765, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3766 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * outreal = NaN + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":3767 + * low = check_array(low) + * low_data = low.data + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MEDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 3767, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":3768 + * low_data = low.data + * length = check_length2(high, low) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MEDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MEDPRICE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3769 + * length = check_length2(high, low) + * outreal = NaN + * retCode = lib.TA_MEDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MEDPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_MEDPRICE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3770 + * outreal = NaN + * retCode = lib.TA_MEDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MEDPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MEDPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3771 + * retCode = lib.TA_MEDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MEDPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3771, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -58206,6 +87703,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_578stream_MEDPRICE(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3745 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MEDPRICE( np.ndarray high not None , np.ndarray low not None ): # <<<<<<<<<<<<<< + * """ MEDPRICE(high, low) + * + */ /* function exit code */ __pyx_L1_error:; @@ -58220,6 +87724,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_578stream_MEDPRICE(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":3775 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MFI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MFI(high, low, close, volume[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_581stream_MFI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -58358,45 +87869,136 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_580stream_MFI(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_close); __Pyx_INCREF((PyObject *)__pyx_v_volume); + /* "talib/_stream.pxi":3797 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3797, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3798 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":3799 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3800 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":3801 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * volume = check_array(volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3802 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * volume = check_array(volume) + * volume_data = volume.data + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":3803 + * close = check_array(close) + * close_data = close.data + * volume = check_array(volume) # <<<<<<<<<<<<<< + * volume_data = volume.data + * length = check_length4(high, low, close, volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_volume)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_volume, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3804 + * close_data = close.data + * volume = check_array(volume) + * volume_data = volume.data # <<<<<<<<<<<<<< + * length = check_length4(high, low, close, volume) + * outreal = NaN + */ __pyx_v_volume_data = ((double *)__pyx_v_volume->data); + /* "talib/_stream.pxi":3805 + * volume = check_array(volume) + * volume_data = volume.data + * length = check_length4(high, low, close, volume) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MFI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length4(__pyx_v_high, __pyx_v_low, __pyx_v_close, __pyx_v_volume); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 3805, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":3806 + * volume_data = volume.data + * length = check_length4(high, low, close, volume) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MFI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MFI", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3807 + * length = check_length4(high, low, close, volume) + * outreal = NaN + * retCode = lib.TA_MFI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MFI", retCode) + * return outreal + */ __pyx_v_retCode = TA_MFI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_volume_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3808 + * outreal = NaN + * retCode = lib.TA_MFI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MFI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MFI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3809 + * retCode = lib.TA_MFI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , volume_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MFI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3809, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -58404,6 +88006,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_580stream_MFI(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3775 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MFI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MFI(high, low, close, volume[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -58420,6 +88029,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_580stream_MFI(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":3813 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIDPOINT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPOINT(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_583stream_MIDPOINT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -58515,23 +88131,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_582stream_MIDPOINT(CYTHON_UNUSED PyObj __Pyx_RefNannySetupContext("stream_MIDPOINT", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3832 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3832, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3833 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3834 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MIDPOINT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3835 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MIDPOINT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIDPOINT", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3836 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_MIDPOINT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MIDPOINT", retCode) + * return outreal + */ __pyx_v_retCode = TA_MIDPOINT((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3837 + * outreal = NaN + * retCode = lib.TA_MIDPOINT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIDPOINT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MIDPOINT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3837, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3838 + * retCode = lib.TA_MIDPOINT( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIDPOINT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3838, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -58539,6 +88204,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_582stream_MIDPOINT(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3813 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIDPOINT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPOINT(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -58552,6 +88224,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_582stream_MIDPOINT(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":3842 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIDPRICE( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPRICE(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_585stream_MIDPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -58662,31 +88341,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_584stream_MIDPRICE(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_stream.pxi":3862 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3863 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":3864 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3865 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * outreal = NaN + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":3866 + * low = check_array(low) + * low_data = low.data + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MIDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 3866, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":3867 + * low_data = low.data + * length = check_length2(high, low) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MIDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIDPRICE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3868 + * length = check_length2(high, low) + * outreal = NaN + * retCode = lib.TA_MIDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MIDPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_MIDPRICE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3869 + * outreal = NaN + * retCode = lib.TA_MIDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIDPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MIDPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3870 + * retCode = lib.TA_MIDPRICE( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIDPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -58694,6 +88436,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_584stream_MIDPRICE(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3842 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIDPRICE( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPRICE(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -58708,6 +88457,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_584stream_MIDPRICE(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":3874 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIN( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIN(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_587stream_MIN(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -58803,23 +88559,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_586stream_MIN(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_MIN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3893 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3894 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3895 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MIN( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3896 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MIN( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIN", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3897 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_MIN( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MIN", retCode) + * return outreal + */ __pyx_v_retCode = TA_MIN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":3898 + * outreal = NaN + * retCode = lib.TA_MIN( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MIN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3899 + * retCode = lib.TA_MIN( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MIN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -58827,6 +88632,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_586stream_MIN(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3874 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIN( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIN(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -58840,6 +88652,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_586stream_MIN(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":3903 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MININDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MININDEX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_589stream_MININDEX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -58935,23 +88754,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_588stream_MININDEX(CYTHON_UNUSED PyObj __Pyx_RefNannySetupContext("stream_MININDEX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3922 + * int outnbelement + * int outinteger + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3923 + * int outinteger + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outinteger = 0 + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3924 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outinteger = 0 + * retCode = lib.TA_MININDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3925 + * real_data = real.data + * length = real.shape[0] + * outinteger = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_MININDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_MININDEX", retCode) + */ __pyx_v_outinteger = 0; + /* "talib/_stream.pxi":3926 + * length = real.shape[0] + * outinteger = 0 + * retCode = lib.TA_MININDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MININDEX", retCode) + * return outinteger + */ __pyx_v_retCode = TA_MININDEX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outinteger)); + /* "talib/_stream.pxi":3927 + * outinteger = 0 + * retCode = lib.TA_MININDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_MININDEX", retCode) # <<<<<<<<<<<<<< + * return outinteger + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MININDEX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3928 + * retCode = lib.TA_MININDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outinteger ) + * _ta_check_success("TA_MININDEX", retCode) + * return outinteger # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outinteger); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3928, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -58959,6 +88827,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_588stream_MININDEX(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3903 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MININDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MININDEX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -58972,6 +88847,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_588stream_MININDEX(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":3932 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINMAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_591stream_MINMAX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -59070,25 +88952,81 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_590stream_MINMAX(CYTHON_UNUSED PyObjec __Pyx_RefNannySetupContext("stream_MINMAX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3953 + * double outmin + * double outmax + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3954 + * double outmax + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outmin = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3955 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outmin = NaN + * outmax = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3956 + * real_data = real.data + * length = real.shape[0] + * outmin = NaN # <<<<<<<<<<<<<< + * outmax = NaN + * retCode = lib.TA_MINMAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outmin , &outmax ) + */ __pyx_v_outmin = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3957 + * length = real.shape[0] + * outmin = NaN + * outmax = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MINMAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outmin , &outmax ) + * _ta_check_success("TA_MINMAX", retCode) + */ __pyx_v_outmax = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":3958 + * outmin = NaN + * outmax = NaN + * retCode = lib.TA_MINMAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outmin , &outmax ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MINMAX", retCode) + * return outmin , outmax + */ __pyx_v_retCode = TA_MINMAX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outmin), (&__pyx_v_outmax)); + /* "talib/_stream.pxi":3959 + * outmax = NaN + * retCode = lib.TA_MINMAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outmin , &outmax ) + * _ta_check_success("TA_MINMAX", retCode) # <<<<<<<<<<<<<< + * return outmin , outmax + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MINMAX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3960 + * retCode = lib.TA_MINMAX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outmin , &outmax ) + * _ta_check_success("TA_MINMAX", retCode) + * return outmin , outmax # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outmin); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -59106,6 +89044,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_590stream_MINMAX(CYTHON_UNUSED PyObjec __pyx_t_3 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3932 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINMAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -59121,6 +89066,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_590stream_MINMAX(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_stream.pxi":3964 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINMAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAXINDEX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_593stream_MINMAXINDEX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -59219,25 +89171,81 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_592stream_MINMAXINDEX(CYTHON_UNUSED Py __Pyx_RefNannySetupContext("stream_MINMAXINDEX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":3985 + * int outminidx + * int outmaxidx + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3986 + * int outmaxidx + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outminidx = 0 + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":3987 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outminidx = 0 + * outmaxidx = 0 + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":3988 + * real_data = real.data + * length = real.shape[0] + * outminidx = 0 # <<<<<<<<<<<<<< + * outmaxidx = 0 + * retCode = lib.TA_MINMAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outminidx , &outmaxidx ) + */ __pyx_v_outminidx = 0; + /* "talib/_stream.pxi":3989 + * length = real.shape[0] + * outminidx = 0 + * outmaxidx = 0 # <<<<<<<<<<<<<< + * retCode = lib.TA_MINMAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outminidx , &outmaxidx ) + * _ta_check_success("TA_MINMAXINDEX", retCode) + */ __pyx_v_outmaxidx = 0; + /* "talib/_stream.pxi":3990 + * outminidx = 0 + * outmaxidx = 0 + * retCode = lib.TA_MINMAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outminidx , &outmaxidx ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MINMAXINDEX", retCode) + * return outminidx , outmaxidx + */ __pyx_v_retCode = TA_MINMAXINDEX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outminidx), (&__pyx_v_outmaxidx)); + /* "talib/_stream.pxi":3991 + * outmaxidx = 0 + * retCode = lib.TA_MINMAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outminidx , &outmaxidx ) + * _ta_check_success("TA_MINMAXINDEX", retCode) # <<<<<<<<<<<<<< + * return outminidx , outmaxidx + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MINMAXINDEX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3992 + * retCode = lib.TA_MINMAXINDEX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outminidx , &outmaxidx ) + * _ta_check_success("TA_MINMAXINDEX", retCode) + * return outminidx , outmaxidx # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_outminidx); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -59255,6 +89263,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_592stream_MINMAXINDEX(CYTHON_UNUSED Py __pyx_t_3 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3964 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINMAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAXINDEX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -59270,6 +89285,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_592stream_MINMAXINDEX(CYTHON_UNUSED Py return __pyx_r; } +/* "talib/_stream.pxi":3996 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DI(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_595stream_MINUS_DI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -59394,38 +89416,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_594stream_MINUS_DI(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":4017 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4017, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4018 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4019 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4019, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4020 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4021 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4022 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":4023 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MINUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4023, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4024 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MINUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MINUS_DI", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4025 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_MINUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MINUS_DI", retCode) + * return outreal + */ __pyx_v_retCode = TA_MINUS_DI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4026 + * outreal = NaN + * retCode = lib.TA_MINUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MINUS_DI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MINUS_DI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4026, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4027 + * retCode = lib.TA_MINUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MINUS_DI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4027, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -59433,6 +89532,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_594stream_MINUS_DI(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":3996 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DI(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -59448,6 +89554,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_594stream_MINUS_DI(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":4031 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DM(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_597stream_MINUS_DM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -59558,31 +89671,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_596stream_MINUS_DM(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_stream.pxi":4051 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4051, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4052 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4053 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4053, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4054 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * outreal = NaN + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4055 + * low = check_array(low) + * low_data = low.data + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MINUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4055, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4056 + * low_data = low.data + * length = check_length2(high, low) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MINUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MINUS_DM", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4057 + * length = check_length2(high, low) + * outreal = NaN + * retCode = lib.TA_MINUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MINUS_DM", retCode) + * return outreal + */ __pyx_v_retCode = TA_MINUS_DM((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4058 + * outreal = NaN + * retCode = lib.TA_MINUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MINUS_DM", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MINUS_DM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4058, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4059 + * retCode = lib.TA_MINUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MINUS_DM", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4059, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -59590,6 +89766,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_596stream_MINUS_DM(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4031 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DM(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -59604,6 +89787,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_596stream_MINUS_DM(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":4063 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MOM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MOM(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_599stream_MOM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -59699,23 +89889,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_598stream_MOM(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_MOM", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4082 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4082, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4083 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4084 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MOM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4085 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MOM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MOM", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4086 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_MOM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MOM", retCode) + * return outreal + */ __pyx_v_retCode = TA_MOM((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4087 + * outreal = NaN + * retCode = lib.TA_MOM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MOM", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MOM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4087, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4088 + * retCode = lib.TA_MOM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MOM", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4088, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -59723,6 +89962,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_598stream_MOM(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4063 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MOM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MOM(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -59736,6 +89982,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_598stream_MOM(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4092 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MULT( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ MULT(real0, real1) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_601stream_MULT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -59828,31 +90081,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_600stream_MULT(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_stream.pxi":4111 + * int outnbelement + * double outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real0_data = real0.data + * real1 = check_array(real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4112 + * double outreal + * real0 = check_array(real0) + * real0_data = real0.data # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * real1_data = real1.data + */ __pyx_v_real0_data = ((double *)__pyx_v_real0->data); + /* "talib/_stream.pxi":4113 + * real0 = check_array(real0) + * real0_data = real0.data + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * real1_data = real1.data + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4114 + * real0_data = real0.data + * real1 = check_array(real1) + * real1_data = real1.data # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * outreal = NaN + */ __pyx_v_real1_data = ((double *)__pyx_v_real1->data); + /* "talib/_stream.pxi":4115 + * real1 = check_array(real1) + * real1_data = real1.data + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_MULT( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4115, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4116 + * real1_data = real1.data + * length = check_length2(real0, real1) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_MULT( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MULT", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4117 + * length = check_length2(real0, real1) + * outreal = NaN + * retCode = lib.TA_MULT( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_MULT", retCode) + * return outreal + */ __pyx_v_retCode = TA_MULT((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real0_data, __pyx_v_real1_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4118 + * outreal = NaN + * retCode = lib.TA_MULT( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MULT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_MULT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4119 + * retCode = lib.TA_MULT( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_MULT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -59860,6 +90176,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_600stream_MULT(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4092 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MULT( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ MULT(real0, real1) + * + */ /* function exit code */ __pyx_L1_error:; @@ -59874,6 +90197,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_600stream_MULT(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4123 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_NATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ NATR(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_603stream_NATR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -59998,38 +90328,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_602stream_NATR(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":4144 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4144, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4145 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4146 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4147 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4148 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4149 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":4150 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_NATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4150, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4151 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_NATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_NATR", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4152 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_NATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_NATR", retCode) + * return outreal + */ __pyx_v_retCode = TA_NATR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4153 + * outreal = NaN + * retCode = lib.TA_NATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_NATR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_NATR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4154 + * retCode = lib.TA_NATR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_NATR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -60037,6 +90444,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_602stream_NATR(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4123 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_NATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ NATR(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -60052,6 +90466,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_602stream_NATR(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4158 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_OBV( np.ndarray real not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ OBV(real, volume) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_605stream_OBV(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -60144,31 +90565,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_604stream_OBV(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_real); __Pyx_INCREF((PyObject *)__pyx_v_volume); + /* "talib/_stream.pxi":4177 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * volume = check_array(volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4178 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * volume = check_array(volume) + * volume_data = volume.data + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4179 + * real = check_array(real) + * real_data = real.data + * volume = check_array(volume) # <<<<<<<<<<<<<< + * volume_data = volume.data + * length = check_length2(real, volume) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_volume)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_volume, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4180 + * real_data = real.data + * volume = check_array(volume) + * volume_data = volume.data # <<<<<<<<<<<<<< + * length = check_length2(real, volume) + * outreal = NaN + */ __pyx_v_volume_data = ((double *)__pyx_v_volume->data); + /* "talib/_stream.pxi":4181 + * volume = check_array(volume) + * volume_data = volume.data + * length = check_length2(real, volume) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_OBV( (length) - 1 , (length) - 1 , real_data , volume_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real, __pyx_v_volume); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4181, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4182 + * volume_data = volume.data + * length = check_length2(real, volume) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_OBV( (length) - 1 , (length) - 1 , real_data , volume_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_OBV", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4183 + * length = check_length2(real, volume) + * outreal = NaN + * retCode = lib.TA_OBV( (length) - 1 , (length) - 1 , real_data , volume_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_OBV", retCode) + * return outreal + */ __pyx_v_retCode = TA_OBV((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_volume_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4184 + * outreal = NaN + * retCode = lib.TA_OBV( (length) - 1 , (length) - 1 , real_data , volume_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_OBV", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_OBV, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4185 + * retCode = lib.TA_OBV( (length) - 1 , (length) - 1 , real_data , volume_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_OBV", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -60176,6 +90660,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_604stream_OBV(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4158 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_OBV( np.ndarray real not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ OBV(real, volume) + * + */ /* function exit code */ __pyx_L1_error:; @@ -60190,6 +90681,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_604stream_OBV(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4189 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PLUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DI(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_607stream_PLUS_DI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -60314,38 +90812,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_606stream_PLUS_DI(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":4210 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4211 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4212 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4212, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4213 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4214 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4214, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4215 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":4216 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_PLUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4216, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4217 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_PLUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PLUS_DI", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4218 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_PLUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_PLUS_DI", retCode) + * return outreal + */ __pyx_v_retCode = TA_PLUS_DI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4219 + * outreal = NaN + * retCode = lib.TA_PLUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PLUS_DI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_PLUS_DI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4220 + * retCode = lib.TA_PLUS_DI( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PLUS_DI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4220, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -60353,6 +90928,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_606stream_PLUS_DI(CYTHON_UNUSED PyObje __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4189 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PLUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DI(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -60368,6 +90950,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_606stream_PLUS_DI(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_stream.pxi":4224 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PLUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DM(high, low[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_609stream_PLUS_DM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -60478,31 +91067,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_608stream_PLUS_DM(CYTHON_UNUSED PyObje __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_stream.pxi":4244 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4245 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4246 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4247 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * outreal = NaN + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4248 + * low = check_array(low) + * low_data = low.data + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_PLUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4248, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4249 + * low_data = low.data + * length = check_length2(high, low) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_PLUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PLUS_DM", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4250 + * length = check_length2(high, low) + * outreal = NaN + * retCode = lib.TA_PLUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_PLUS_DM", retCode) + * return outreal + */ __pyx_v_retCode = TA_PLUS_DM((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4251 + * outreal = NaN + * retCode = lib.TA_PLUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PLUS_DM", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_PLUS_DM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4252 + * retCode = lib.TA_PLUS_DM( (length) - 1 , (length) - 1 , high_data , low_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PLUS_DM", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -60510,6 +91162,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_608stream_PLUS_DM(CYTHON_UNUSED PyObje __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4224 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PLUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DM(high, low[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -60524,6 +91183,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_608stream_PLUS_DM(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_stream.pxi":4256 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PPO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ PPO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_611stream_PPO(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -60651,23 +91317,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_610stream_PPO(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_PPO", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4277 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4277, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4278 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4279 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_PPO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4280 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_PPO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PPO", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4281 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_PPO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_PPO", retCode) + * return outreal + */ __pyx_v_retCode = TA_PPO((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_fastperiod, __pyx_v_slowperiod, __pyx_v_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4282 + * outreal = NaN + * retCode = lib.TA_PPO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PPO", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_PPO, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4283 + * retCode = lib.TA_PPO( (length) - 1 , (length) - 1 , real_data , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_PPO", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -60675,6 +91390,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_610stream_PPO(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4256 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PPO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ PPO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -60688,6 +91410,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_610stream_PPO(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4287 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROC( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROC(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_613stream_ROC(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -60783,23 +91512,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_612stream_ROC(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_ROC", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4306 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4307 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4308 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ROC( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4309 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ROC( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROC", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4310 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_ROC( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ROC", retCode) + * return outreal + */ __pyx_v_retCode = TA_ROC((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4311 + * outreal = NaN + * retCode = lib.TA_ROC( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROC", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ROC, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4312 + * retCode = lib.TA_ROC( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROC", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -60807,6 +91585,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_612stream_ROC(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4287 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROC( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROC(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -60820,6 +91605,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_612stream_ROC(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4316 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCP( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCP(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_615stream_ROCP(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -60915,23 +91707,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_614stream_ROCP(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_ROCP", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4335 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4336 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4337 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ROCP( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4338 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ROCP( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCP", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4339 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_ROCP( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ROCP", retCode) + * return outreal + */ __pyx_v_retCode = TA_ROCP((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4340 + * outreal = NaN + * retCode = lib.TA_ROCP( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCP", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ROCP, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4341 + * retCode = lib.TA_ROCP( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCP", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -60939,6 +91780,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_614stream_ROCP(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4316 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCP( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCP(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -60952,6 +91800,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_614stream_ROCP(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4345 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCR( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_617stream_ROCR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -61047,23 +91902,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_616stream_ROCR(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_ROCR", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4364 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4365 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4366 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ROCR( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4367 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ROCR( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCR", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4368 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_ROCR( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ROCR", retCode) + * return outreal + */ __pyx_v_retCode = TA_ROCR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4369 + * outreal = NaN + * retCode = lib.TA_ROCR( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ROCR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4370 + * retCode = lib.TA_ROCR( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -61071,6 +91975,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_616stream_ROCR(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4345 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCR( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -61084,6 +91995,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_616stream_ROCR(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4374 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCR100( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR100(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_619stream_ROCR100(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -61179,23 +92097,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_618stream_ROCR100(CYTHON_UNUSED PyObje __Pyx_RefNannySetupContext("stream_ROCR100", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4393 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4394 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4395 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ROCR100( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4396 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ROCR100( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCR100", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4397 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_ROCR100( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ROCR100", retCode) + * return outreal + */ __pyx_v_retCode = TA_ROCR100((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4398 + * outreal = NaN + * retCode = lib.TA_ROCR100( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCR100", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ROCR100, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4399 + * retCode = lib.TA_ROCR100( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ROCR100", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -61203,6 +92170,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_618stream_ROCR100(CYTHON_UNUSED PyObje __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4374 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCR100( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR100(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -61216,6 +92190,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_618stream_ROCR100(CYTHON_UNUSED PyObje return __pyx_r; } +/* "talib/_stream.pxi":4403 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_RSI( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ RSI(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_621stream_RSI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -61311,23 +92292,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_620stream_RSI(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_RSI", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4422 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4423 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4424 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_RSI( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4425 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_RSI( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_RSI", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4426 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_RSI( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_RSI", retCode) + * return outreal + */ __pyx_v_retCode = TA_RSI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4427 + * outreal = NaN + * retCode = lib.TA_RSI( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_RSI", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_RSI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4428 + * retCode = lib.TA_RSI( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_RSI", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -61335,6 +92365,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_620stream_RSI(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4403 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_RSI( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ RSI(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -61348,6 +92385,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_620stream_RSI(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4432 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SAR( np.ndarray high not None , np.ndarray low not None , double acceleration=0.02 , double maximum=0.2 ): # <<<<<<<<<<<<<< + * """ SAR(high, low[, acceleration=?, maximum=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_623stream_SAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -61474,31 +92518,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_622stream_SAR(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_stream.pxi":4453 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4454 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4455 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4455, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4456 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * outreal = NaN + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4457 + * low = check_array(low) + * low_data = low.data + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_SAR( (length) - 1 , (length) - 1 , high_data , low_data , acceleration , maximum , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4457, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4458 + * low_data = low.data + * length = check_length2(high, low) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_SAR( (length) - 1 , (length) - 1 , high_data , low_data , acceleration , maximum , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SAR", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4459 + * length = check_length2(high, low) + * outreal = NaN + * retCode = lib.TA_SAR( (length) - 1 , (length) - 1 , high_data , low_data , acceleration , maximum , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SAR", retCode) + * return outreal + */ __pyx_v_retCode = TA_SAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_acceleration, __pyx_v_maximum, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4460 + * outreal = NaN + * retCode = lib.TA_SAR( (length) - 1 , (length) - 1 , high_data , low_data , acceleration , maximum , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SAR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4461 + * retCode = lib.TA_SAR( (length) - 1 , (length) - 1 , high_data , low_data , acceleration , maximum , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SAR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -61506,6 +92613,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_622stream_SAR(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4432 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SAR( np.ndarray high not None , np.ndarray low not None , double acceleration=0.02 , double maximum=0.2 ): # <<<<<<<<<<<<<< + * """ SAR(high, low[, acceleration=?, maximum=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -61520,6 +92634,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_622stream_SAR(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4465 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SAREXT( np.ndarray high not None , np.ndarray low not None , double startvalue=-4e37 , double offsetonreverse=-4e37 , double accelerationinitlong=-4e37 , double accelerationlong=-4e37 , double accelerationmaxlong=-4e37 , double accelerationinitshort=-4e37 , double accelerationshort=-4e37 , double accelerationmaxshort=-4e37 ): # <<<<<<<<<<<<<< + * """ SAREXT(high, low[, startvalue=?, offsetonreverse=?, accelerationinitlong=?, accelerationlong=?, accelerationmaxlong=?, accelerationinitshort=?, accelerationshort=?, accelerationmaxshort=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_625stream_SAREXT(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -61742,31 +92863,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_624stream_SAREXT(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_high); __Pyx_INCREF((PyObject *)__pyx_v_low); + /* "talib/_stream.pxi":4492 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4493 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4494 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * length = check_length2(high, low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4495 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * length = check_length2(high, low) + * outreal = NaN + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4496 + * low = check_array(low) + * low_data = low.data + * length = check_length2(high, low) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_SAREXT( (length) - 1 , (length) - 1 , high_data , low_data , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_high, __pyx_v_low); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4496, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4497 + * low_data = low.data + * length = check_length2(high, low) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_SAREXT( (length) - 1 , (length) - 1 , high_data , low_data , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SAREXT", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4498 + * length = check_length2(high, low) + * outreal = NaN + * retCode = lib.TA_SAREXT( (length) - 1 , (length) - 1 , high_data , low_data , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SAREXT", retCode) + * return outreal + */ __pyx_v_retCode = TA_SAREXT((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_startvalue, __pyx_v_offsetonreverse, __pyx_v_accelerationinitlong, __pyx_v_accelerationlong, __pyx_v_accelerationmaxlong, __pyx_v_accelerationinitshort, __pyx_v_accelerationshort, __pyx_v_accelerationmaxshort, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4499 + * outreal = NaN + * retCode = lib.TA_SAREXT( (length) - 1 , (length) - 1 , high_data , low_data , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SAREXT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SAREXT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4500 + * retCode = lib.TA_SAREXT( (length) - 1 , (length) - 1 , high_data , low_data , startvalue , offsetonreverse , accelerationinitlong , accelerationlong , accelerationmaxlong , accelerationinitshort , accelerationshort , accelerationmaxshort , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SAREXT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -61774,6 +92958,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_624stream_SAREXT(CYTHON_UNUSED PyObjec __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4465 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SAREXT( np.ndarray high not None , np.ndarray low not None , double startvalue=-4e37 , double offsetonreverse=-4e37 , double accelerationinitlong=-4e37 , double accelerationlong=-4e37 , double accelerationmaxlong=-4e37 , double accelerationinitshort=-4e37 , double accelerationshort=-4e37 , double accelerationmaxshort=-4e37 ): # <<<<<<<<<<<<<< + * """ SAREXT(high, low[, startvalue=?, offsetonreverse=?, accelerationinitlong=?, accelerationlong=?, accelerationmaxlong=?, accelerationinitshort=?, accelerationshort=?, accelerationmaxshort=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -61788,6 +92979,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_624stream_SAREXT(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_stream.pxi":4504 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SIN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_627stream_SIN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -61828,23 +93026,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_626stream_SIN(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_SIN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4521 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4522 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4523 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_SIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4524 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_SIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SIN", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4525 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_SIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SIN", retCode) + * return outreal + */ __pyx_v_retCode = TA_SIN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4526 + * outreal = NaN + * retCode = lib.TA_SIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SIN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SIN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4526, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4527 + * retCode = lib.TA_SIN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SIN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -61852,6 +93099,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_626stream_SIN(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4504 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SIN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -61865,6 +93119,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_626stream_SIN(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4531 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SINH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SINH(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_629stream_SINH(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -61905,23 +93166,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_628stream_SINH(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_SINH", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4548 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4549 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4550 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_SINH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4551 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_SINH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SINH", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4552 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_SINH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SINH", retCode) + * return outreal + */ __pyx_v_retCode = TA_SINH((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4553 + * outreal = NaN + * retCode = lib.TA_SINH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SINH", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SINH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4553, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4554 + * retCode = lib.TA_SINH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SINH", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4554, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -61929,6 +93239,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_628stream_SINH(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4531 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SINH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SINH(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -61942,6 +93259,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_628stream_SINH(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4558 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_631stream_SMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -62037,23 +93361,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_630stream_SMA(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_SMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4577 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4578 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4579 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_SMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4580 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_SMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SMA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4581 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_SMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_SMA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4582 + * outreal = NaN + * retCode = lib.TA_SMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4583 + * retCode = lib.TA_SMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -62061,6 +93434,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_630stream_SMA(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4558 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -62074,6 +93454,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_630stream_SMA(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4587 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SQRT( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SQRT(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_633stream_SQRT(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -62114,23 +93501,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_632stream_SQRT(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_SQRT", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4604 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4605 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4606 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_SQRT( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4607 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_SQRT( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SQRT", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4608 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_SQRT( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SQRT", retCode) + * return outreal + */ __pyx_v_retCode = TA_SQRT((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4609 + * outreal = NaN + * retCode = lib.TA_SQRT( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SQRT", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SQRT, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4610 + * retCode = lib.TA_SQRT( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SQRT", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -62138,6 +93574,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_632stream_SQRT(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4587 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SQRT( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SQRT(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -62151,6 +93594,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_632stream_SQRT(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4614 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STDDEV( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ STDDEV(real[, timeperiod=?, nbdev=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_635stream_STDDEV(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -62262,23 +93712,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_634stream_STDDEV(CYTHON_UNUSED PyObjec __Pyx_RefNannySetupContext("stream_STDDEV", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4634 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4634, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4635 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4636 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_STDDEV( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4637 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_STDDEV( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_STDDEV", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4638 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_STDDEV( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_STDDEV", retCode) + * return outreal + */ __pyx_v_retCode = TA_STDDEV((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, __pyx_v_nbdev, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4639 + * outreal = NaN + * retCode = lib.TA_STDDEV( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_STDDEV", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_STDDEV, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4640 + * retCode = lib.TA_STDDEV( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_STDDEV", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -62286,6 +93785,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_634stream_STDDEV(CYTHON_UNUSED PyObjec __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4614 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STDDEV( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ STDDEV(real[, timeperiod=?, nbdev=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -62299,6 +93805,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_634stream_STDDEV(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_stream.pxi":4644 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCH( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int slowk_period=-2**31 , int slowk_matype=0 , int slowd_period=-2**31 , int slowd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_637stream_STOCH(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -62490,40 +94003,124 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_636stream_STOCH(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":4671 + * double outslowk + * double outslowd + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4672 + * double outslowd + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4673 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4674 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4675 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4676 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outslowk = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":4677 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outslowk = NaN + * outslowd = NaN + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4677, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4678 + * close_data = close.data + * length = check_length3(high, low, close) + * outslowk = NaN # <<<<<<<<<<<<<< + * outslowd = NaN + * retCode = lib.TA_STOCH( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , &outslowk , &outslowd ) + */ __pyx_v_outslowk = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4679 + * length = check_length3(high, low, close) + * outslowk = NaN + * outslowd = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_STOCH( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , &outslowk , &outslowd ) + * _ta_check_success("TA_STOCH", retCode) + */ __pyx_v_outslowd = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4680 + * outslowk = NaN + * outslowd = NaN + * retCode = lib.TA_STOCH( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , &outslowk , &outslowd ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_STOCH", retCode) + * return outslowk , outslowd + */ __pyx_v_retCode = TA_STOCH((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_fastk_period, __pyx_v_slowk_period, __pyx_v_slowk_matype, __pyx_v_slowd_period, __pyx_v_slowd_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outslowk), (&__pyx_v_outslowd)); + /* "talib/_stream.pxi":4681 + * outslowd = NaN + * retCode = lib.TA_STOCH( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , &outslowk , &outslowd ) + * _ta_check_success("TA_STOCH", retCode) # <<<<<<<<<<<<<< + * return outslowk , outslowd + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_STOCH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4682 + * retCode = lib.TA_STOCH( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , slowk_period , slowk_matype , slowd_period , slowd_matype , &outbegidx , &outnbelement , &outslowk , &outslowd ) + * _ta_check_success("TA_STOCH", retCode) + * return outslowk , outslowd # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outslowk); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -62541,6 +94138,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_636stream_STOCH(CYTHON_UNUSED PyObject __pyx_t_4 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4644 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCH( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int slowk_period=-2**31 , int slowk_matype=0 , int slowd_period=-2**31 , int slowd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -62558,6 +94162,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_636stream_STOCH(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4686 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCHF( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_639stream_STOCHF(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -62717,40 +94328,124 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_638stream_STOCHF(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":4711 + * double outfastk + * double outfastd + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4711, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4712 + * double outfastd + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4713 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4714 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4715 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4716 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outfastk = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":4717 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outfastk = NaN + * outfastd = NaN + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4717, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4718 + * close_data = close.data + * length = check_length3(high, low, close) + * outfastk = NaN # <<<<<<<<<<<<<< + * outfastd = NaN + * retCode = lib.TA_STOCHF( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) + */ __pyx_v_outfastk = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4719 + * length = check_length3(high, low, close) + * outfastk = NaN + * outfastd = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_STOCHF( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) + * _ta_check_success("TA_STOCHF", retCode) + */ __pyx_v_outfastd = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4720 + * outfastk = NaN + * outfastd = NaN + * retCode = lib.TA_STOCHF( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_STOCHF", retCode) + * return outfastk , outfastd + */ __pyx_v_retCode = TA_STOCHF((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_fastk_period, __pyx_v_fastd_period, __pyx_v_fastd_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outfastk), (&__pyx_v_outfastd)); + /* "talib/_stream.pxi":4721 + * outfastd = NaN + * retCode = lib.TA_STOCHF( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) + * _ta_check_success("TA_STOCHF", retCode) # <<<<<<<<<<<<<< + * return outfastk , outfastd + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_STOCHF, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4722 + * retCode = lib.TA_STOCHF( (length) - 1 , (length) - 1 , high_data , low_data , close_data , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) + * _ta_check_success("TA_STOCHF", retCode) + * return outfastk , outfastd # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outfastk); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -62768,6 +94463,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_638stream_STOCHF(CYTHON_UNUSED PyObjec __pyx_t_4 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4686 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCHF( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -62785,6 +94487,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_638stream_STOCHF(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_stream.pxi":4726 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCHRSI( np.ndarray real not None , int timeperiod=-2**31 , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHRSI(real[, timeperiod=?, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_641stream_STOCHRSI(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -62931,25 +94640,81 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_640stream_STOCHRSI(CYTHON_UNUSED PyObj __Pyx_RefNannySetupContext("stream_STOCHRSI", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4750 + * double outfastk + * double outfastd + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4751 + * double outfastd + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outfastk = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4752 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outfastk = NaN + * outfastd = NaN + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4753 + * real_data = real.data + * length = real.shape[0] + * outfastk = NaN # <<<<<<<<<<<<<< + * outfastd = NaN + * retCode = lib.TA_STOCHRSI( (length) - 1 , (length) - 1 , real_data , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) + */ __pyx_v_outfastk = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4754 + * length = real.shape[0] + * outfastk = NaN + * outfastd = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_STOCHRSI( (length) - 1 , (length) - 1 , real_data , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) + * _ta_check_success("TA_STOCHRSI", retCode) + */ __pyx_v_outfastd = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4755 + * outfastk = NaN + * outfastd = NaN + * retCode = lib.TA_STOCHRSI( (length) - 1 , (length) - 1 , real_data , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_STOCHRSI", retCode) + * return outfastk , outfastd + */ __pyx_v_retCode = TA_STOCHRSI((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, __pyx_v_fastk_period, __pyx_v_fastd_period, __pyx_v_fastd_matype, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outfastk), (&__pyx_v_outfastd)); + /* "talib/_stream.pxi":4756 + * outfastd = NaN + * retCode = lib.TA_STOCHRSI( (length) - 1 , (length) - 1 , real_data , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) + * _ta_check_success("TA_STOCHRSI", retCode) # <<<<<<<<<<<<<< + * return outfastk , outfastd + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_STOCHRSI, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4757 + * retCode = lib.TA_STOCHRSI( (length) - 1 , (length) - 1 , real_data , timeperiod , fastk_period , fastd_period , fastd_matype , &outbegidx , &outnbelement , &outfastk , &outfastd ) + * _ta_check_success("TA_STOCHRSI", retCode) + * return outfastk , outfastd # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outfastk); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4757, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -62967,6 +94732,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_640stream_STOCHRSI(CYTHON_UNUSED PyObj __pyx_t_3 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4726 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCHRSI( np.ndarray real not None , int timeperiod=-2**31 , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHRSI(real[, timeperiod=?, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -62982,6 +94754,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_640stream_STOCHRSI(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":4761 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SUB( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ SUB(real0, real1) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_643stream_SUB(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -63074,31 +94853,94 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_642stream_SUB(CYTHON_UNUSED PyObject * __Pyx_INCREF((PyObject *)__pyx_v_real0); __Pyx_INCREF((PyObject *)__pyx_v_real1); + /* "talib/_stream.pxi":4780 + * int outnbelement + * double outreal + * real0 = check_array(real0) # <<<<<<<<<<<<<< + * real0_data = real0.data + * real1 = check_array(real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real0, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4781 + * double outreal + * real0 = check_array(real0) + * real0_data = real0.data # <<<<<<<<<<<<<< + * real1 = check_array(real1) + * real1_data = real1.data + */ __pyx_v_real0_data = ((double *)__pyx_v_real0->data); + /* "talib/_stream.pxi":4782 + * real0 = check_array(real0) + * real0_data = real0.data + * real1 = check_array(real1) # <<<<<<<<<<<<<< + * real1_data = real1.data + * length = check_length2(real0, real1) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real1, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4783 + * real0_data = real0.data + * real1 = check_array(real1) + * real1_data = real1.data # <<<<<<<<<<<<<< + * length = check_length2(real0, real1) + * outreal = NaN + */ __pyx_v_real1_data = ((double *)__pyx_v_real1->data); + /* "talib/_stream.pxi":4784 + * real1 = check_array(real1) + * real1_data = real1.data + * length = check_length2(real0, real1) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_SUB( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length2(__pyx_v_real0, __pyx_v_real1); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4784, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4785 + * real1_data = real1.data + * length = check_length2(real0, real1) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_SUB( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SUB", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4786 + * length = check_length2(real0, real1) + * outreal = NaN + * retCode = lib.TA_SUB( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SUB", retCode) + * return outreal + */ __pyx_v_retCode = TA_SUB((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real0_data, __pyx_v_real1_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4787 + * outreal = NaN + * retCode = lib.TA_SUB( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SUB", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SUB, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4787, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4788 + * retCode = lib.TA_SUB( (length) - 1 , (length) - 1 , real0_data , real1_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SUB", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -63106,6 +94948,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_642stream_SUB(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4761 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SUB( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ SUB(real0, real1) + * + */ /* function exit code */ __pyx_L1_error:; @@ -63120,6 +94969,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_642stream_SUB(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4792 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SUM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SUM(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_645stream_SUM(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -63215,23 +95071,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_644stream_SUM(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_SUM", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4811 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4812 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4813 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_SUM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4814 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_SUM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SUM", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4815 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_SUM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_SUM", retCode) + * return outreal + */ __pyx_v_retCode = TA_SUM((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4816 + * outreal = NaN + * retCode = lib.TA_SUM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SUM", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_SUM, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4817 + * retCode = lib.TA_SUM( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_SUM", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4817, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -63239,6 +95144,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_644stream_SUM(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4792 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SUM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SUM(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -63252,6 +95164,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_644stream_SUM(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4821 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_T3( np.ndarray real not None , int timeperiod=-2**31 , double vfactor=-4e37 ): # <<<<<<<<<<<<<< + * """ T3(real[, timeperiod=?, vfactor=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_647stream_T3(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -63363,23 +95282,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_646stream_T3(CYTHON_UNUSED PyObject *_ __Pyx_RefNannySetupContext("stream_T3", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4841 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4841, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4842 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4843 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_T3( (length) - 1 , (length) - 1 , real_data , timeperiod , vfactor , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4844 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_T3( (length) - 1 , (length) - 1 , real_data , timeperiod , vfactor , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_T3", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4845 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_T3( (length) - 1 , (length) - 1 , real_data , timeperiod , vfactor , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_T3", retCode) + * return outreal + */ __pyx_v_retCode = TA_T3((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, __pyx_v_vfactor, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4846 + * outreal = NaN + * retCode = lib.TA_T3( (length) - 1 , (length) - 1 , real_data , timeperiod , vfactor , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_T3", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_T3, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4847 + * retCode = lib.TA_T3( (length) - 1 , (length) - 1 , real_data , timeperiod , vfactor , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_T3", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4847, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -63387,6 +95355,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_646stream_T3(CYTHON_UNUSED PyObject *_ __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4821 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_T3( np.ndarray real not None , int timeperiod=-2**31 , double vfactor=-4e37 ): # <<<<<<<<<<<<<< + * """ T3(real[, timeperiod=?, vfactor=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -63400,6 +95375,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_646stream_T3(CYTHON_UNUSED PyObject *_ return __pyx_r; } +/* "talib/_stream.pxi":4851 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TAN(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_649stream_TAN(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -63440,23 +95422,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_648stream_TAN(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_TAN", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4868 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4868, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4869 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4870 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_TAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4871 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_TAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TAN", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4872 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_TAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TAN", retCode) + * return outreal + */ __pyx_v_retCode = TA_TAN((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4873 + * outreal = NaN + * retCode = lib.TA_TAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TAN", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TAN, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4874 + * retCode = lib.TA_TAN( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TAN", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4874, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -63464,6 +95495,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_648stream_TAN(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4851 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TAN(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -63477,6 +95515,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_648stream_TAN(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":4878 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TANH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TANH(real) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_651stream_TANH(PyObject *__pyx_self, PyObject *__pyx_v_real); /*proto*/ @@ -63517,23 +95562,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_650stream_TANH(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_TANH", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4895 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4896 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4897 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_TANH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4898 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_TANH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TANH", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4899 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_TANH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TANH", retCode) + * return outreal + */ __pyx_v_retCode = TA_TANH((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4900 + * outreal = NaN + * retCode = lib.TA_TANH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TANH", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TANH, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4900, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4901 + * retCode = lib.TA_TANH( (length) - 1 , (length) - 1 , real_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TANH", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -63541,6 +95635,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_650stream_TANH(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4878 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TANH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TANH(real) + * + */ /* function exit code */ __pyx_L1_error:; @@ -63554,6 +95655,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_650stream_TANH(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TEMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_653stream_TEMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -63649,23 +95757,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_652stream_TEMA(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_TEMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4924 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4925 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4926 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_TEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4927 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_TEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TEMA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4928 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_TEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TEMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_TEMA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4929 + * outreal = NaN + * retCode = lib.TA_TEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TEMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TEMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4929, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4930 + * retCode = lib.TA_TEMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TEMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4930, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -63673,6 +95830,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_652stream_TEMA(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TEMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -63686,6 +95850,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_652stream_TEMA(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4934 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRANGE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TRANGE(high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_655stream_TRANGE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -63792,38 +95963,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_654stream_TRANGE(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":4953 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4954 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":4955 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4955, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4956 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":4957 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4958 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":4959 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_TRANGE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 4959, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":4960 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_TRANGE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRANGE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4961 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_TRANGE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TRANGE", retCode) + * return outreal + */ __pyx_v_retCode = TA_TRANGE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4962 + * outreal = NaN + * retCode = lib.TA_TRANGE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRANGE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TRANGE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4963 + * retCode = lib.TA_TRANGE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRANGE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -63831,6 +96079,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_654stream_TRANGE(CYTHON_UNUSED PyObjec __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4934 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRANGE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TRANGE(high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -63846,6 +96101,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_654stream_TRANGE(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_stream.pxi":4967 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRIMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_657stream_TRIMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -63941,23 +96203,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_656stream_TRIMA(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_TRIMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":4986 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4986, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4987 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":4988 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_TRIMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":4989 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_TRIMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRIMA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":4990 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_TRIMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TRIMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_TRIMA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":4991 + * outreal = NaN + * retCode = lib.TA_TRIMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRIMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TRIMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4992 + * retCode = lib.TA_TRIMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRIMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -63965,6 +96276,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_656stream_TRIMA(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4967 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRIMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -63978,6 +96296,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_656stream_TRIMA(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":4996 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRIX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIX(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_659stream_TRIX(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -64073,23 +96398,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_658stream_TRIX(CYTHON_UNUSED PyObject __Pyx_RefNannySetupContext("stream_TRIX", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":5015 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5015, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5016 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":5017 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_TRIX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":5018 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_TRIX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRIX", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":5019 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_TRIX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TRIX", retCode) + * return outreal + */ __pyx_v_retCode = TA_TRIX((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":5020 + * outreal = NaN + * retCode = lib.TA_TRIX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRIX", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TRIX, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5020, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5021 + * retCode = lib.TA_TRIX( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TRIX", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -64097,6 +96471,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_658stream_TRIX(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":4996 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRIX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIX(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -64110,6 +96491,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_658stream_TRIX(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":5025 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TSF( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TSF(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_661stream_TSF(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -64205,23 +96593,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_660stream_TSF(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_TSF", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":5044 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5045 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":5046 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_TSF( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":5047 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_TSF( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TSF", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":5048 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_TSF( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TSF", retCode) + * return outreal + */ __pyx_v_retCode = TA_TSF((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":5049 + * outreal = NaN + * retCode = lib.TA_TSF( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TSF", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TSF, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5049, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5050 + * retCode = lib.TA_TSF( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TSF", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5050, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -64229,6 +96666,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_660stream_TSF(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":5025 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TSF( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TSF(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -64242,6 +96686,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_660stream_TSF(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":5054 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TYPPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TYPPRICE(high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_663stream_TYPPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -64348,38 +96799,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_662stream_TYPPRICE(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":5073 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5074 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":5075 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5075, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5076 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":5077 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5078 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":5079 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_TYPPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 5079, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":5080 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_TYPPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TYPPRICE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":5081 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_TYPPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_TYPPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_TYPPRICE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":5082 + * outreal = NaN + * retCode = lib.TA_TYPPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TYPPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_TYPPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5082, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5083 + * retCode = lib.TA_TYPPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_TYPPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5083, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -64387,6 +96915,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_662stream_TYPPRICE(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":5054 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TYPPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TYPPRICE(high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -64402,6 +96937,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_662stream_TYPPRICE(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":5087 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ULTOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod1=-2**31 , int timeperiod2=-2**31 , int timeperiod3=-2**31 ): # <<<<<<<<<<<<<< + * """ ULTOSC(high, low, close[, timeperiod1=?, timeperiod2=?, timeperiod3=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_665stream_ULTOSC(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -64558,38 +97100,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_664stream_ULTOSC(CYTHON_UNUSED PyObjec __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":5110 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5111 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":5112 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5113 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":5114 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5115 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":5116 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_ULTOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 5116, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":5117 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_ULTOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ULTOSC", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":5118 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_ULTOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_ULTOSC", retCode) + * return outreal + */ __pyx_v_retCode = TA_ULTOSC((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod1, __pyx_v_timeperiod2, __pyx_v_timeperiod3, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":5119 + * outreal = NaN + * retCode = lib.TA_ULTOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ULTOSC", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_ULTOSC, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5120 + * retCode = lib.TA_ULTOSC( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod1 , timeperiod2 , timeperiod3 , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_ULTOSC", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -64597,6 +97216,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_664stream_ULTOSC(CYTHON_UNUSED PyObjec __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":5087 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ULTOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod1=-2**31 , int timeperiod2=-2**31 , int timeperiod3=-2**31 ): # <<<<<<<<<<<<<< + * """ ULTOSC(high, low, close[, timeperiod1=?, timeperiod2=?, timeperiod3=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -64612,6 +97238,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_664stream_ULTOSC(CYTHON_UNUSED PyObjec return __pyx_r; } +/* "talib/_stream.pxi":5124 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_VAR( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ VAR(real[, timeperiod=?, nbdev=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_667stream_VAR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -64723,23 +97356,72 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_666stream_VAR(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_VAR", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":5144 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5144, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5145 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":5146 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_VAR( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":5147 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_VAR( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_VAR", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":5148 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_VAR( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_VAR", retCode) + * return outreal + */ __pyx_v_retCode = TA_VAR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, __pyx_v_nbdev, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":5149 + * outreal = NaN + * retCode = lib.TA_VAR( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_VAR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_VAR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5149, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5150 + * retCode = lib.TA_VAR( (length) - 1 , (length) - 1 , real_data , timeperiod , nbdev , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_VAR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -64747,6 +97429,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_666stream_VAR(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":5124 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_VAR( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ VAR(real[, timeperiod=?, nbdev=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -64760,6 +97449,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_666stream_VAR(CYTHON_UNUSED PyObject * return __pyx_r; } +/* "talib/_stream.pxi":5154 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WCLPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ WCLPRICE(high, low, close) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_669stream_WCLPRICE(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -64866,38 +97562,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_668stream_WCLPRICE(CYTHON_UNUSED PyObj __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":5173 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5173, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5174 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":5175 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5176 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":5177 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5178 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":5179 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_WCLPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 5179, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":5180 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_WCLPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WCLPRICE", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":5181 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_WCLPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_WCLPRICE", retCode) + * return outreal + */ __pyx_v_retCode = TA_WCLPRICE((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":5182 + * outreal = NaN + * retCode = lib.TA_WCLPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WCLPRICE", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_WCLPRICE, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5182, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5183 + * retCode = lib.TA_WCLPRICE( (length) - 1 , (length) - 1 , high_data , low_data , close_data , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WCLPRICE", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -64905,6 +97678,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_668stream_WCLPRICE(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":5154 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WCLPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ WCLPRICE(high, low, close) + * + */ /* function exit code */ __pyx_L1_error:; @@ -64920,6 +97700,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_668stream_WCLPRICE(CYTHON_UNUSED PyObj return __pyx_r; } +/* "talib/_stream.pxi":5187 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WILLR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WILLR(high, low, close[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_671stream_WILLR(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -65044,38 +97831,115 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_670stream_WILLR(CYTHON_UNUSED PyObject __Pyx_INCREF((PyObject *)__pyx_v_low); __Pyx_INCREF((PyObject *)__pyx_v_close); + /* "talib/_stream.pxi":5208 + * int outnbelement + * double outreal + * high = check_array(high) # <<<<<<<<<<<<<< + * high_data = high.data + * low = check_array(low) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_high)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5208, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_high, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5209 + * double outreal + * high = check_array(high) + * high_data = high.data # <<<<<<<<<<<<<< + * low = check_array(low) + * low_data = low.data + */ __pyx_v_high_data = ((double *)__pyx_v_high->data); + /* "talib/_stream.pxi":5210 + * high = check_array(high) + * high_data = high.data + * low = check_array(low) # <<<<<<<<<<<<<< + * low_data = low.data + * close = check_array(close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_low)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_low, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5211 + * high_data = high.data + * low = check_array(low) + * low_data = low.data # <<<<<<<<<<<<<< + * close = check_array(close) + * close_data = close.data + */ __pyx_v_low_data = ((double *)__pyx_v_low->data); + /* "talib/_stream.pxi":5212 + * low = check_array(low) + * low_data = low.data + * close = check_array(close) # <<<<<<<<<<<<<< + * close_data = close.data + * length = check_length3(high, low, close) + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5212, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_close, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5213 + * low_data = low.data + * close = check_array(close) + * close_data = close.data # <<<<<<<<<<<<<< + * length = check_length3(high, low, close) + * outreal = NaN + */ __pyx_v_close_data = ((double *)__pyx_v_close->data); + /* "talib/_stream.pxi":5214 + * close = check_array(close) + * close_data = close.data + * length = check_length3(high, low, close) # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_WILLR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_t_2 = __pyx_f_5talib_7_ta_lib_check_length3(__pyx_v_high, __pyx_v_low, __pyx_v_close); if (unlikely(__pyx_t_2 == ((npy_intp)-1))) __PYX_ERR(3, 5214, __pyx_L1_error) __pyx_v_length = __pyx_t_2; + /* "talib/_stream.pxi":5215 + * close_data = close.data + * length = check_length3(high, low, close) + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_WILLR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WILLR", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":5216 + * length = check_length3(high, low, close) + * outreal = NaN + * retCode = lib.TA_WILLR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_WILLR", retCode) + * return outreal + */ __pyx_v_retCode = TA_WILLR((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_high_data, __pyx_v_low_data, __pyx_v_close_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":5217 + * outreal = NaN + * retCode = lib.TA_WILLR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WILLR", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_WILLR, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5217, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5218 + * retCode = lib.TA_WILLR( (length) - 1 , (length) - 1 , high_data , low_data , close_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WILLR", retCode) + * return outreal # <<<<<<<<<<<<<< + * + * @wraparound(False) # turn off relative indexing from end of lists + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -65083,6 +97947,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_670stream_WILLR(CYTHON_UNUSED PyObject __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":5187 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WILLR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WILLR(high, low, close[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -65098,6 +97969,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_670stream_WILLR(CYTHON_UNUSED PyObject return __pyx_r; } +/* "talib/_stream.pxi":5222 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WMA(real[, timeperiod=?]) + * + */ /* Python wrapper */ static PyObject *__pyx_pw_5talib_7_ta_lib_673stream_WMA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -65193,23 +98071,71 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_672stream_WMA(CYTHON_UNUSED PyObject * __Pyx_RefNannySetupContext("stream_WMA", 0); __Pyx_INCREF((PyObject *)__pyx_v_real); + /* "talib/_stream.pxi":5241 + * int outnbelement + * double outreal + * real = check_array(real) # <<<<<<<<<<<<<< + * real_data = real.data + * length = real.shape[0] + */ __pyx_t_1 = ((PyObject *)__pyx_f_5talib_7_ta_lib_check_array(__pyx_v_real)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_real, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5242 + * double outreal + * real = check_array(real) + * real_data = real.data # <<<<<<<<<<<<<< + * length = real.shape[0] + * outreal = NaN + */ __pyx_v_real_data = ((double *)__pyx_v_real->data); + /* "talib/_stream.pxi":5243 + * real = check_array(real) + * real_data = real.data + * length = real.shape[0] # <<<<<<<<<<<<<< + * outreal = NaN + * retCode = lib.TA_WMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + */ __pyx_v_length = (__pyx_v_real->dimensions[0]); + /* "talib/_stream.pxi":5244 + * real_data = real.data + * length = real.shape[0] + * outreal = NaN # <<<<<<<<<<<<<< + * retCode = lib.TA_WMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WMA", retCode) + */ __pyx_v_outreal = __pyx_v_5talib_7_ta_lib_NaN; + /* "talib/_stream.pxi":5245 + * length = real.shape[0] + * outreal = NaN + * retCode = lib.TA_WMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) # <<<<<<<<<<<<<< + * _ta_check_success("TA_WMA", retCode) + * return outreal + */ __pyx_v_retCode = TA_WMA((((int)__pyx_v_length) - 1), (((int)__pyx_v_length) - 1), __pyx_v_real_data, __pyx_v_timeperiod, (&__pyx_v_outbegidx), (&__pyx_v_outnbelement), (&__pyx_v_outreal)); + /* "talib/_stream.pxi":5246 + * outreal = NaN + * retCode = lib.TA_WMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WMA", retCode) # <<<<<<<<<<<<<< + * return outreal + * + */ __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_WMA, __pyx_v_retCode, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5247 + * retCode = lib.TA_WMA( (length) - 1 , (length) - 1 , real_data , timeperiod , &outbegidx , &outnbelement , &outreal ) + * _ta_check_success("TA_WMA", retCode) + * return outreal # <<<<<<<<<<<<<< + * + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_outreal); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -65217,6 +98143,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_672stream_WMA(CYTHON_UNUSED PyObject * __pyx_t_1 = 0; goto __pyx_L0; + /* "talib/_stream.pxi":5222 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WMA(real[, timeperiod=?]) + * + */ /* function exit code */ __pyx_L1_error:; @@ -65230,6 +98163,13 @@ static PyObject *__pyx_pf_5talib_7_ta_lib_672stream_WMA(CYTHON_UNUSED PyObject * return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":735 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; @@ -65240,6 +98180,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":736 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -65247,6 +98194,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":735 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ /* function exit code */ __pyx_L1_error:; @@ -65259,6 +98213,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":738 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; @@ -65269,6 +98230,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":739 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -65276,6 +98244,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":738 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ /* function exit code */ __pyx_L1_error:; @@ -65288,6 +98263,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":741 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { PyObject *__pyx_r = NULL; @@ -65298,6 +98280,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":742 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -65305,6 +98294,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":741 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ /* function exit code */ __pyx_L1_error:; @@ -65317,6 +98313,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":744 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { PyObject *__pyx_r = NULL; @@ -65327,6 +98330,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":745 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -65334,6 +98344,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":744 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ /* function exit code */ __pyx_L1_error:; @@ -65346,6 +98363,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":747 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { PyObject *__pyx_r = NULL; @@ -65356,6 +98380,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":748 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -65363,6 +98394,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":747 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ /* function exit code */ __pyx_L1_error:; @@ -65375,6 +98413,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":750 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { PyObject *__pyx_r = NULL; @@ -65382,16 +98427,44 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ int __pyx_t_1; __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":751 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0); if (__pyx_t_1) { + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":752 + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape # <<<<<<<<<<<<<< + * else: + * return () + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape)); __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":751 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ } + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":754 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * + */ /*else*/ { __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_empty_tuple); @@ -65399,6 +98472,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ goto __pyx_L0; } + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":750 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ /* function exit code */ __pyx_L0:; @@ -65407,20 +98487,55 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":929 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_array_base", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":930 + * + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< + * PyArray_SetBaseObject(arr, base) + * + */ Py_INCREF(__pyx_v_base); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":931 + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base)); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":929 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ /* function exit code */ __Pyx_RefNannyFinishContext(); } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":933 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { PyObject *__pyx_v_base; @@ -65429,22 +98544,64 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":934 + * + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< + * if base is NULL: + * return None + */ __pyx_v_base = PyArray_BASE(__pyx_v_arr); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":935 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ __pyx_t_1 = ((__pyx_v_base == NULL) != 0); if (__pyx_t_1) { + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":936 + * base = PyArray_BASE(arr) + * if base is NULL: + * return None # <<<<<<<<<<<<<< + * return base + * + */ __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":935 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ } + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":937 + * if base is NULL: + * return None + * return base # <<<<<<<<<<<<<< + * + * # Versions of the import_* functions which are more suitable for + */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_base)); __pyx_r = ((PyObject *)__pyx_v_base); goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":933 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ /* function exit code */ __pyx_L0:; @@ -65453,6 +98610,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":941 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_r; @@ -65470,6 +98634,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_array", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":942 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -65479,8 +98650,22 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":943 + * cdef inline int import_array() except -1: + * try: + * __pyx_import_array() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") + */ __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 943, __pyx_L3_error) + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":942 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -65488,6 +98673,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { goto __pyx_L8_try_end; __pyx_L3_error:; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":944 + * try: + * __pyx_import_array() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.multiarray failed to import") + * + */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -65496,6 +98688,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_7); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":945 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 945, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); @@ -65505,6 +98704,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { goto __pyx_L5_except_error; __pyx_L5_except_error:; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":942 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); @@ -65513,6 +98719,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __pyx_L8_try_end:; } + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":941 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ /* function exit code */ __pyx_r = 0; @@ -65529,6 +98742,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":947 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_r; @@ -65546,6 +98766,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_umath", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":948 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -65555,8 +98782,22 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":949 + * cdef inline int import_umath() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") + */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 949, __pyx_L3_error) + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":948 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -65564,6 +98805,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { goto __pyx_L8_try_end; __pyx_L3_error:; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":950 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * + */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -65572,6 +98820,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_7); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":951 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 951, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); @@ -65581,6 +98836,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { goto __pyx_L5_except_error; __pyx_L5_except_error:; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":948 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); @@ -65589,6 +98851,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __pyx_L8_try_end:; } + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":947 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ /* function exit code */ __pyx_r = 0; @@ -65605,6 +98874,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":953 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_r; @@ -65622,6 +98898,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_ufunc", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":954 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -65631,8 +98914,22 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":955 + * cdef inline int import_ufunc() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") + */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 955, __pyx_L3_error) + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":954 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -65640,6 +98937,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { goto __pyx_L8_try_end; __pyx_L3_error:; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":956 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * + */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -65648,6 +98952,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_7); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":957 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef extern from *: + */ __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 957, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); @@ -65657,6 +98968,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { goto __pyx_L5_except_error; __pyx_L5_except_error:; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":954 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); @@ -65665,6 +98983,13 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __pyx_L8_try_end:; } + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":953 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ /* function exit code */ __pyx_r = 0; @@ -65681,15 +99006,36 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":967 + * + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_timedelta64_object", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":979 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< + * + * + */ __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":967 + * + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ /* function exit code */ __pyx_L0:; @@ -65697,15 +99043,36 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":982 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_datetime64_object", 0); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":994 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< + * + * + */ __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":982 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ /* function exit code */ __pyx_L0:; @@ -65713,39 +99080,100 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":997 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { npy_datetime __pyx_r; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":1004 + * also needed. That can be found using `get_datetime64_unit`. + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":997 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ /* function exit code */ __pyx_L0:; return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":1007 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { npy_timedelta __pyx_r; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":1011 + * returns the int64 value underlying scalar numpy timedelta64 object + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":1007 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ /* function exit code */ __pyx_L0:; return __pyx_r; } +/* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":1014 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { NPY_DATETIMEUNIT __pyx_r; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":1018 + * returns the unit part of the dtype for a numpy datetime64 object. + * """ + * return (obj).obmeta.base # <<<<<<<<<<<<<< + */ __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); goto __pyx_L0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":1014 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ /* function exit code */ __pyx_L0:; @@ -66740,972 +100168,2351 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + /* "talib/_func.pxi":22 + * cdef np.ndarray check_array(np.ndarray real): + * if PyArray_TYPE(real) != np.NPY_DOUBLE: + * raise Exception("input array type is not double") # <<<<<<<<<<<<<< + * if real.ndim != 1: + * raise Exception("input array has wrong dimensions") + */ __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_input_array_type_is_not_double); if (unlikely(!__pyx_tuple_)) __PYX_ERR(2, 22, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_); + /* "talib/_func.pxi":24 + * raise Exception("input array type is not double") + * if real.ndim != 1: + * raise Exception("input array has wrong dimensions") # <<<<<<<<<<<<<< + * if not (PyArray_FLAGS(real) & np.NPY_C_CONTIGUOUS): + * real = PyArray_GETCONTIGUOUS(real) + */ __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_input_array_has_wrong_dimensions); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(2, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__2); __Pyx_GIVEREF(__pyx_tuple__2); + /* "talib/_func.pxi":34 + * length = a1.shape[0] + * if length != a2.shape[0]: + * raise Exception("input array lengths are different") # <<<<<<<<<<<<<< + * return length + * + */ __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_input_array_lengths_are_differen); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(2, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3); + /* "talib/_func.pxi":68 + * return i + * else: + * raise Exception("inputs are all NaN") # <<<<<<<<<<<<<< + * + * cdef np.npy_int check_begidx2(np.npy_intp length, double* a1, double* a2) except -1: + */ __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_inputs_are_all_NaN); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(2, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); __Pyx_GIVEREF(__pyx_tuple__4); + /* "talib/_abstract.pxi":641 + * name = name[len('in'):].lower() + * if 'real' in name: + * name = name.replace('real', 'price') # <<<<<<<<<<<<<< + * elif 'price' in name: + * name = 'prices' + */ __pyx_tuple__7 = PyTuple_Pack(2, __pyx_n_s_real, __pyx_n_s_price); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 641, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__7); __Pyx_GIVEREF(__pyx_tuple__7); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":945 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(4, 945, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__12); __Pyx_GIVEREF(__pyx_tuple__12); + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":951 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(4, 951, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__13); __Pyx_GIVEREF(__pyx_tuple__13); + /* "talib/_common.pxi":50 + * function_name, ret_code, description)) + * + * def _ta_initialize(): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Initialize() + */ __pyx_tuple__14 = PyTuple_Pack(1, __pyx_n_s_ret_code); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__14); __Pyx_GIVEREF(__pyx_tuple__14); __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_ta_initialize, 50, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(0, 50, __pyx_L1_error) + /* "talib/_common.pxi":55 + * _ta_check_success('TA_Initialize', ret_code) + * + * def _ta_shutdown(): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Shutdown() + */ __pyx_tuple__16 = PyTuple_Pack(1, __pyx_n_s_ret_code); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 55, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__16); __Pyx_GIVEREF(__pyx_tuple__16); __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_ta_shutdown, 55, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(0, 55, __pyx_L1_error) + /* "talib/_common.pxi":60 + * _ta_check_success('TA_Shutdown', ret_code) + * + * class MA_Type(object): # <<<<<<<<<<<<<< + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) + * + */ __pyx_tuple__18 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__18); __Pyx_GIVEREF(__pyx_tuple__18); + /* "talib/_common.pxi":61 + * + * class MA_Type(object): + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) # <<<<<<<<<<<<<< + * + * def __init__(self): + */ __pyx_tuple__19 = PyTuple_Pack(1, __pyx_int_9); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__19); __Pyx_GIVEREF(__pyx_tuple__19); + /* "talib/_common.pxi":63 + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) + * + * def __init__(self): # <<<<<<<<<<<<<< + * self._lookup = { + * MA_Type.SMA: 'Simple Moving Average', + */ __pyx_tuple__20 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__20); __Pyx_GIVEREF(__pyx_tuple__20); __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_init, 63, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 63, __pyx_L1_error) + /* "talib/_common.pxi":76 + * } + * + * def __getitem__(self, type_): # <<<<<<<<<<<<<< + * return self._lookup[type_] + * + */ __pyx_tuple__22 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_type); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__22); __Pyx_GIVEREF(__pyx_tuple__22); __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_getitem, 76, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 76, __pyx_L1_error) + /* "talib/_common.pxi":90 + * _ta_func_unst_ids[name] = i + * + * def _ta_set_unstable_period(name, period): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + */ __pyx_tuple__24 = PyTuple_Pack(4, __pyx_n_s_name, __pyx_n_s_period, __pyx_n_s_ret_code, __pyx_n_s_id); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 90, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__24); __Pyx_GIVEREF(__pyx_tuple__24); __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_ta_set_unstable_period, 90, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 90, __pyx_L1_error) + /* "talib/_common.pxi":96 + * _ta_check_success('TA_SetUnstablePeriod', ret_code) + * + * def _ta_get_unstable_period(name): # <<<<<<<<<<<<<< + * cdef unsigned int period + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + */ __pyx_tuple__26 = PyTuple_Pack(3, __pyx_n_s_name, __pyx_n_s_period, __pyx_n_s_id); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 96, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__26); __Pyx_GIVEREF(__pyx_tuple__26); __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_ta_get_unstable_period, 96, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 96, __pyx_L1_error) + /* "talib/_common.pxi":102 + * return period + * + * def _ta_set_compatibility(value): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCompatibility(value) + */ __pyx_tuple__28 = PyTuple_Pack(2, __pyx_n_s_value, __pyx_n_s_ret_code); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 102, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__28); __Pyx_GIVEREF(__pyx_tuple__28); __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_ta_set_compatibility, 102, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 102, __pyx_L1_error) + /* "talib/_common.pxi":107 + * _ta_check_success('TA_SetCompatibility', ret_code) + * + * def _ta_get_compatibility(): # <<<<<<<<<<<<<< + * cdef int value + * value = lib.TA_GetCompatibility() + */ __pyx_tuple__30 = PyTuple_Pack(1, __pyx_n_s_value); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__30); __Pyx_GIVEREF(__pyx_tuple__30); __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_ta_get_compatibility, 107, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 107, __pyx_L1_error) + /* "talib/_common.pxi":112 + * return value + * + * class CandleSettingType(object): # <<<<<<<<<<<<<< + * BodyLong, BodyVeryLong, BodyShort, BodyDoji, ShadowLong, ShadowVeryLong, \ + * ShadowShort, ShadowVeryShort, Near, Far, Equal, AllCandleSettings = \ + */ __pyx_tuple__32 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32); + /* "talib/_common.pxi":115 + * BodyLong, BodyVeryLong, BodyShort, BodyDoji, ShadowLong, ShadowVeryLong, \ + * ShadowShort, ShadowVeryShort, Near, Far, Equal, AllCandleSettings = \ + * range(12) # <<<<<<<<<<<<<< + * + * CandleSettingType = CandleSettingType() + */ __pyx_tuple__33 = PyTuple_Pack(1, __pyx_int_12); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__33); __Pyx_GIVEREF(__pyx_tuple__33); + /* "talib/_common.pxi":119 + * CandleSettingType = CandleSettingType() + * + * class RangeType(object): # <<<<<<<<<<<<<< + * RealBody, HighLow, Shadows = range(3) + * + */ __pyx_tuple__34 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__34); __Pyx_GIVEREF(__pyx_tuple__34); + /* "talib/_common.pxi":120 + * + * class RangeType(object): + * RealBody, HighLow, Shadows = range(3) # <<<<<<<<<<<<<< + * + * RangeType = RangeType() + */ __pyx_tuple__35 = PyTuple_Pack(1, __pyx_int_3); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__35); __Pyx_GIVEREF(__pyx_tuple__35); + /* "talib/_common.pxi":124 + * RangeType = RangeType() + * + * def _ta_set_candle_settings(settingtype, rangetype, avgperiod, factor): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCandleSettings(settingtype, rangetype, avgperiod, factor) + */ __pyx_tuple__36 = PyTuple_Pack(5, __pyx_n_s_settingtype, __pyx_n_s_rangetype, __pyx_n_s_avgperiod, __pyx_n_s_factor, __pyx_n_s_ret_code); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__36); __Pyx_GIVEREF(__pyx_tuple__36); __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_ta_set_candle_settings, 124, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 124, __pyx_L1_error) + /* "talib/_common.pxi":129 + * _ta_check_success('TA_SetCandleSettings', ret_code) + * + * def _ta_restore_candle_default_settings(settingtype): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_RestoreCandleDefaultSettings(settingtype) + */ __pyx_tuple__38 = PyTuple_Pack(2, __pyx_n_s_settingtype, __pyx_n_s_ret_code); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__38); __Pyx_GIVEREF(__pyx_tuple__38); __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__common_pxi, __pyx_n_s_ta_restore_candle_default_setti, 129, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 129, __pyx_L1_error) + /* "talib/_func.pxi":144 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ACOS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ACOS(real) + * + */ __pyx_tuple__40 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(2, 144, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__40); __Pyx_GIVEREF(__pyx_tuple__40); __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ACOS, 144, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(2, 144, __pyx_L1_error) + /* "talib/_func.pxi":173 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ AD(high, low, close, volume) + * + */ __pyx_tuple__42 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_volume, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(2, 173, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__42); __Pyx_GIVEREF(__pyx_tuple__42); __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_AD, 173, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(2, 173, __pyx_L1_error) + /* "talib/_func.pxi":205 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADD( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ ADD(real0, real1) + * + */ __pyx_tuple__44 = PyTuple_Pack(10, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(2, 205, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__44); __Pyx_GIVEREF(__pyx_tuple__44); __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ADD, 205, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(2, 205, __pyx_L1_error) + /* "talib/_func.pxi":236 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?]) + * + */ __pyx_tuple__46 = PyTuple_Pack(14, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_volume, __pyx_n_s_fastperiod, __pyx_n_s_slowperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(2, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__46); __Pyx_GIVEREF(__pyx_tuple__46); __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(6, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ADOSC, 236, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(2, 236, __pyx_L1_error) + /* "talib/_func.pxi":271 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADX(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__48 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(2, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__48); __Pyx_GIVEREF(__pyx_tuple__48); __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ADX, 271, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(2, 271, __pyx_L1_error) + /* "talib/_func.pxi":304 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADXR(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__50 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(2, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__50); __Pyx_GIVEREF(__pyx_tuple__50); __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ADXR, 304, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(2, 304, __pyx_L1_error) + /* "talib/_func.pxi":337 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ APO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ __pyx_tuple__52 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_fastperiod, __pyx_n_s_slowperiod, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(2, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__52); __Pyx_GIVEREF(__pyx_tuple__52); __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_APO, 337, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(2, 337, __pyx_L1_error) + /* "talib/_func.pxi":370 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROON(high, low[, timeperiod=?]) + * + */ __pyx_tuple__54 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outaroondown, __pyx_n_s_outaroonup); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(2, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__54); __Pyx_GIVEREF(__pyx_tuple__54); __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(3, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_AROON, 370, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(2, 370, __pyx_L1_error) + /* "talib/_func.pxi":405 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROONOSC(high, low[, timeperiod=?]) + * + */ __pyx_tuple__56 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(2, 405, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__56); __Pyx_GIVEREF(__pyx_tuple__56); __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_AROONOSC, 405, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) __PYX_ERR(2, 405, __pyx_L1_error) + /* "talib/_func.pxi":437 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ASIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ASIN(real) + * + */ __pyx_tuple__58 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(2, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__58); __Pyx_GIVEREF(__pyx_tuple__58); __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ASIN, 437, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(2, 437, __pyx_L1_error) + /* "talib/_func.pxi":466 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ATAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ATAN(real) + * + */ __pyx_tuple__60 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(2, 466, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__60); __Pyx_GIVEREF(__pyx_tuple__60); __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ATAN, 466, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(2, 466, __pyx_L1_error) + /* "talib/_func.pxi":495 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ATR(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__62 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(2, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__62); __Pyx_GIVEREF(__pyx_tuple__62); __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ATR, 495, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(2, 495, __pyx_L1_error) + /* "talib/_func.pxi":528 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ AVGPRICE(open, high, low, close) + * + */ __pyx_tuple__64 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(2, 528, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__64); __Pyx_GIVEREF(__pyx_tuple__64); __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_AVGPRICE, 528, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(2, 528, __pyx_L1_error) + /* "talib/_func.pxi":560 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ): # <<<<<<<<<<<<<< + * """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?]) + * + */ __pyx_tuple__66 = PyTuple_Pack(15, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_nbdevup, __pyx_n_s_nbdevdn, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outrealupperband, __pyx_n_s_outrealmiddleband, __pyx_n_s_outreallowerband); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(2, 560, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__66); __Pyx_GIVEREF(__pyx_tuple__66); __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(5, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_BBANDS, 560, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(2, 560, __pyx_L1_error) + /* "talib/_func.pxi":600 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ BETA(real0, real1[, timeperiod=?]) + * + */ __pyx_tuple__68 = PyTuple_Pack(11, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(2, 600, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__68); __Pyx_GIVEREF(__pyx_tuple__68); __pyx_codeobj__69 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_BETA, 600, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__69)) __PYX_ERR(2, 600, __pyx_L1_error) + /* "talib/_func.pxi":633 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ BOP(open, high, low, close) + * + */ __pyx_tuple__70 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(2, 633, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__70); __Pyx_GIVEREF(__pyx_tuple__70); __pyx_codeobj__71 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_BOP, 633, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__71)) __PYX_ERR(2, 633, __pyx_L1_error) + /* "talib/_func.pxi":665 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CCI(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__72 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(2, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__72); __Pyx_GIVEREF(__pyx_tuple__72); __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CCI, 665, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(2, 665, __pyx_L1_error) + /* "talib/_func.pxi":698 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL2CROWS(open, high, low, close) + * + */ __pyx_tuple__74 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(2, 698, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__74); __Pyx_GIVEREF(__pyx_tuple__74); __pyx_codeobj__75 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDL2CROWS, 698, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__75)) __PYX_ERR(2, 698, __pyx_L1_error) + /* "talib/_func.pxi":730 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3BLACKCROWS(open, high, low, close) + * + */ __pyx_tuple__76 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(2, 730, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__76); __Pyx_GIVEREF(__pyx_tuple__76); __pyx_codeobj__77 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDL3BLACKCROWS, 730, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__77)) __PYX_ERR(2, 730, __pyx_L1_error) + /* "talib/_func.pxi":762 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3INSIDE(open, high, low, close) + * + */ __pyx_tuple__78 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(2, 762, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__78); __Pyx_GIVEREF(__pyx_tuple__78); __pyx_codeobj__79 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDL3INSIDE, 762, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__79)) __PYX_ERR(2, 762, __pyx_L1_error) + /* "talib/_func.pxi":794 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3LINESTRIKE(open, high, low, close) + * + */ __pyx_tuple__80 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(2, 794, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__80); __Pyx_GIVEREF(__pyx_tuple__80); __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDL3LINESTRIKE, 794, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(2, 794, __pyx_L1_error) + /* "talib/_func.pxi":826 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3OUTSIDE(open, high, low, close) + * + */ __pyx_tuple__82 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(2, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__82); __Pyx_GIVEREF(__pyx_tuple__82); __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDL3OUTSIDE, 826, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(2, 826, __pyx_L1_error) + /* "talib/_func.pxi":858 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3STARSINSOUTH(open, high, low, close) + * + */ __pyx_tuple__84 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(2, 858, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__84); __Pyx_GIVEREF(__pyx_tuple__84); __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDL3STARSINSOUTH, 858, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(2, 858, __pyx_L1_error) + /* "talib/_func.pxi":890 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3WHITESOLDIERS(open, high, low, close) + * + */ __pyx_tuple__86 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(2, 890, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__86); __Pyx_GIVEREF(__pyx_tuple__86); __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDL3WHITESOLDIERS, 890, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(2, 890, __pyx_L1_error) + /* "talib/_func.pxi":922 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLABANDONEDBABY(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__88 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(2, 922, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__88); __Pyx_GIVEREF(__pyx_tuple__88); __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLABANDONEDBABY, 922, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(2, 922, __pyx_L1_error) + /* "talib/_func.pxi":956 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLADVANCEBLOCK(open, high, low, close) + * + */ __pyx_tuple__90 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(2, 956, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__90); __Pyx_GIVEREF(__pyx_tuple__90); __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLADVANCEBLOCK, 956, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(2, 956, __pyx_L1_error) + /* "talib/_func.pxi":988 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBELTHOLD(open, high, low, close) + * + */ __pyx_tuple__92 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(2, 988, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__92); __Pyx_GIVEREF(__pyx_tuple__92); __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLBELTHOLD, 988, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) __PYX_ERR(2, 988, __pyx_L1_error) + /* "talib/_func.pxi":1020 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBREAKAWAY(open, high, low, close) + * + */ __pyx_tuple__94 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(2, 1020, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__94); __Pyx_GIVEREF(__pyx_tuple__94); __pyx_codeobj__95 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLBREAKAWAY, 1020, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__95)) __PYX_ERR(2, 1020, __pyx_L1_error) + /* "talib/_func.pxi":1052 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCLOSINGMARUBOZU(open, high, low, close) + * + */ __pyx_tuple__96 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(2, 1052, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__96); __Pyx_GIVEREF(__pyx_tuple__96); __pyx_codeobj__97 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__96, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLCLOSINGMARUBOZU, 1052, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__97)) __PYX_ERR(2, 1052, __pyx_L1_error) + /* "talib/_func.pxi":1084 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCONCEALBABYSWALL(open, high, low, close) + * + */ __pyx_tuple__98 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(2, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__98); __Pyx_GIVEREF(__pyx_tuple__98); __pyx_codeobj__99 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__98, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLCONCEALBABYSWALL, 1084, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__99)) __PYX_ERR(2, 1084, __pyx_L1_error) + /* "talib/_func.pxi":1116 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCOUNTERATTACK(open, high, low, close) + * + */ __pyx_tuple__100 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(2, 1116, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__100); __Pyx_GIVEREF(__pyx_tuple__100); __pyx_codeobj__101 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__100, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLCOUNTERATTACK, 1116, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__101)) __PYX_ERR(2, 1116, __pyx_L1_error) + /* "talib/_func.pxi":1148 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__102 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(2, 1148, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__102); __Pyx_GIVEREF(__pyx_tuple__102); __pyx_codeobj__103 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__102, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLDARKCLOUDCOVER, 1148, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__103)) __PYX_ERR(2, 1148, __pyx_L1_error) + /* "talib/_func.pxi":1182 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJI(open, high, low, close) + * + */ __pyx_tuple__104 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(2, 1182, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__104); __Pyx_GIVEREF(__pyx_tuple__104); __pyx_codeobj__105 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__104, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLDOJI, 1182, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__105)) __PYX_ERR(2, 1182, __pyx_L1_error) + /* "talib/_func.pxi":1214 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJISTAR(open, high, low, close) + * + */ __pyx_tuple__106 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__106)) __PYX_ERR(2, 1214, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__106); __Pyx_GIVEREF(__pyx_tuple__106); __pyx_codeobj__107 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__106, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLDOJISTAR, 1214, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__107)) __PYX_ERR(2, 1214, __pyx_L1_error) + /* "talib/_func.pxi":1246 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDRAGONFLYDOJI(open, high, low, close) + * + */ __pyx_tuple__108 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__108)) __PYX_ERR(2, 1246, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__108); __Pyx_GIVEREF(__pyx_tuple__108); __pyx_codeobj__109 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__108, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLDRAGONFLYDOJI, 1246, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__109)) __PYX_ERR(2, 1246, __pyx_L1_error) + /* "talib/_func.pxi":1278 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLENGULFING(open, high, low, close) + * + */ __pyx_tuple__110 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(2, 1278, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__110); __Pyx_GIVEREF(__pyx_tuple__110); __pyx_codeobj__111 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLENGULFING, 1278, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__111)) __PYX_ERR(2, 1278, __pyx_L1_error) + /* "talib/_func.pxi":1310 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__112 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__112)) __PYX_ERR(2, 1310, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__112); __Pyx_GIVEREF(__pyx_tuple__112); __pyx_codeobj__113 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__112, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLEVENINGDOJISTAR, 1310, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__113)) __PYX_ERR(2, 1310, __pyx_L1_error) + /* "talib/_func.pxi":1344 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLEVENINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGSTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__114 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(2, 1344, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__114); __Pyx_GIVEREF(__pyx_tuple__114); __pyx_codeobj__115 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLEVENINGSTAR, 1344, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__115)) __PYX_ERR(2, 1344, __pyx_L1_error) + /* "talib/_func.pxi":1378 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLGAPSIDESIDEWHITE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGAPSIDESIDEWHITE(open, high, low, close) + * + */ __pyx_tuple__116 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(2, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__116); __Pyx_GIVEREF(__pyx_tuple__116); __pyx_codeobj__117 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__116, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLGAPSIDESIDEWHITE, 1378, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__117)) __PYX_ERR(2, 1378, __pyx_L1_error) + /* "talib/_func.pxi":1410 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLGRAVESTONEDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGRAVESTONEDOJI(open, high, low, close) + * + */ __pyx_tuple__118 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(2, 1410, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__118); __Pyx_GIVEREF(__pyx_tuple__118); __pyx_codeobj__119 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__118, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLGRAVESTONEDOJI, 1410, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__119)) __PYX_ERR(2, 1410, __pyx_L1_error) + /* "talib/_func.pxi":1442 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHAMMER(open, high, low, close) + * + */ __pyx_tuple__120 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(2, 1442, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__120); __Pyx_GIVEREF(__pyx_tuple__120); __pyx_codeobj__121 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__120, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLHAMMER, 1442, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__121)) __PYX_ERR(2, 1442, __pyx_L1_error) + /* "talib/_func.pxi":1474 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHANGINGMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHANGINGMAN(open, high, low, close) + * + */ __pyx_tuple__122 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(2, 1474, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__122); __Pyx_GIVEREF(__pyx_tuple__122); __pyx_codeobj__123 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLHANGINGMAN, 1474, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__123)) __PYX_ERR(2, 1474, __pyx_L1_error) + /* "talib/_func.pxi":1506 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHARAMI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMI(open, high, low, close) + * + */ __pyx_tuple__124 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(2, 1506, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__124); __Pyx_GIVEREF(__pyx_tuple__124); __pyx_codeobj__125 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__124, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLHARAMI, 1506, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__125)) __PYX_ERR(2, 1506, __pyx_L1_error) + /* "talib/_func.pxi":1538 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHARAMICROSS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMICROSS(open, high, low, close) + * + */ __pyx_tuple__126 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(2, 1538, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__126); __Pyx_GIVEREF(__pyx_tuple__126); __pyx_codeobj__127 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__126, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLHARAMICROSS, 1538, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__127)) __PYX_ERR(2, 1538, __pyx_L1_error) + /* "talib/_func.pxi":1570 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIGHWAVE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIGHWAVE(open, high, low, close) + * + */ __pyx_tuple__128 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__128)) __PYX_ERR(2, 1570, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__128); __Pyx_GIVEREF(__pyx_tuple__128); __pyx_codeobj__129 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__128, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLHIGHWAVE, 1570, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__129)) __PYX_ERR(2, 1570, __pyx_L1_error) + /* "talib/_func.pxi":1602 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIKKAKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKE(open, high, low, close) + * + */ __pyx_tuple__130 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__130)) __PYX_ERR(2, 1602, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__130); __Pyx_GIVEREF(__pyx_tuple__130); __pyx_codeobj__131 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLHIKKAKE, 1602, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__131)) __PYX_ERR(2, 1602, __pyx_L1_error) + /* "talib/_func.pxi":1634 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIKKAKEMOD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKEMOD(open, high, low, close) + * + */ __pyx_tuple__132 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__132)) __PYX_ERR(2, 1634, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__132); __Pyx_GIVEREF(__pyx_tuple__132); __pyx_codeobj__133 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__132, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLHIKKAKEMOD, 1634, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__133)) __PYX_ERR(2, 1634, __pyx_L1_error) + /* "talib/_func.pxi":1666 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHOMINGPIGEON( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHOMINGPIGEON(open, high, low, close) + * + */ __pyx_tuple__134 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__134)) __PYX_ERR(2, 1666, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__134); __Pyx_GIVEREF(__pyx_tuple__134); __pyx_codeobj__135 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__134, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLHOMINGPIGEON, 1666, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__135)) __PYX_ERR(2, 1666, __pyx_L1_error) + /* "talib/_func.pxi":1698 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLIDENTICAL3CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLIDENTICAL3CROWS(open, high, low, close) + * + */ __pyx_tuple__136 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__136)) __PYX_ERR(2, 1698, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__136); __Pyx_GIVEREF(__pyx_tuple__136); __pyx_codeobj__137 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__136, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLIDENTICAL3CROWS, 1698, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__137)) __PYX_ERR(2, 1698, __pyx_L1_error) + /* "talib/_func.pxi":1730 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLINNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINNECK(open, high, low, close) + * + */ __pyx_tuple__138 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__138)) __PYX_ERR(2, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__138); __Pyx_GIVEREF(__pyx_tuple__138); __pyx_codeobj__139 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__138, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLINNECK, 1730, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__139)) __PYX_ERR(2, 1730, __pyx_L1_error) + /* "talib/_func.pxi":1762 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLINVERTEDHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINVERTEDHAMMER(open, high, low, close) + * + */ __pyx_tuple__140 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__140)) __PYX_ERR(2, 1762, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__140); __Pyx_GIVEREF(__pyx_tuple__140); __pyx_codeobj__141 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__140, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLINVERTEDHAMMER, 1762, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__141)) __PYX_ERR(2, 1762, __pyx_L1_error) + /* "talib/_func.pxi":1794 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLKICKING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKING(open, high, low, close) + * + */ __pyx_tuple__142 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__142)) __PYX_ERR(2, 1794, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__142); __Pyx_GIVEREF(__pyx_tuple__142); __pyx_codeobj__143 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__142, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLKICKING, 1794, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__143)) __PYX_ERR(2, 1794, __pyx_L1_error) + /* "talib/_func.pxi":1826 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLKICKINGBYLENGTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKINGBYLENGTH(open, high, low, close) + * + */ __pyx_tuple__144 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__144)) __PYX_ERR(2, 1826, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__144); __Pyx_GIVEREF(__pyx_tuple__144); __pyx_codeobj__145 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__144, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLKICKINGBYLENGTH, 1826, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__145)) __PYX_ERR(2, 1826, __pyx_L1_error) + /* "talib/_func.pxi":1858 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLADDERBOTTOM( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLADDERBOTTOM(open, high, low, close) + * + */ __pyx_tuple__146 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__146)) __PYX_ERR(2, 1858, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__146); __Pyx_GIVEREF(__pyx_tuple__146); __pyx_codeobj__147 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__146, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLLADDERBOTTOM, 1858, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__147)) __PYX_ERR(2, 1858, __pyx_L1_error) + /* "talib/_func.pxi":1890 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLONGLEGGEDDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLEGGEDDOJI(open, high, low, close) + * + */ __pyx_tuple__148 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__148)) __PYX_ERR(2, 1890, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__148); __Pyx_GIVEREF(__pyx_tuple__148); __pyx_codeobj__149 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__148, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLLONGLEGGEDDOJI, 1890, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__149)) __PYX_ERR(2, 1890, __pyx_L1_error) + /* "talib/_func.pxi":1922 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLONGLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLINE(open, high, low, close) + * + */ __pyx_tuple__150 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__150)) __PYX_ERR(2, 1922, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__150); __Pyx_GIVEREF(__pyx_tuple__150); __pyx_codeobj__151 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__150, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLLONGLINE, 1922, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__151)) __PYX_ERR(2, 1922, __pyx_L1_error) + /* "talib/_func.pxi":1954 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMARUBOZU(open, high, low, close) + * + */ __pyx_tuple__152 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__152)) __PYX_ERR(2, 1954, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__152); __Pyx_GIVEREF(__pyx_tuple__152); __pyx_codeobj__153 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__152, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLMARUBOZU, 1954, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__153)) __PYX_ERR(2, 1954, __pyx_L1_error) + /* "talib/_func.pxi":1986 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMATCHINGLOW( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMATCHINGLOW(open, high, low, close) + * + */ __pyx_tuple__154 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__154)) __PYX_ERR(2, 1986, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__154); __Pyx_GIVEREF(__pyx_tuple__154); __pyx_codeobj__155 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__154, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLMATCHINGLOW, 1986, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__155)) __PYX_ERR(2, 1986, __pyx_L1_error) + /* "talib/_func.pxi":2018 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMATHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLMATHOLD(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__156 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__156)) __PYX_ERR(2, 2018, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__156); __Pyx_GIVEREF(__pyx_tuple__156); __pyx_codeobj__157 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__156, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLMATHOLD, 2018, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__157)) __PYX_ERR(2, 2018, __pyx_L1_error) + /* "talib/_func.pxi":2052 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMORNINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__158 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__158)) __PYX_ERR(2, 2052, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__158); __Pyx_GIVEREF(__pyx_tuple__158); __pyx_codeobj__159 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__158, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLMORNINGDOJISTAR, 2052, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__159)) __PYX_ERR(2, 2052, __pyx_L1_error) + /* "talib/_func.pxi":2086 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMORNINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGSTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__160 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__160)) __PYX_ERR(2, 2086, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__160); __Pyx_GIVEREF(__pyx_tuple__160); __pyx_codeobj__161 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__160, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLMORNINGSTAR, 2086, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__161)) __PYX_ERR(2, 2086, __pyx_L1_error) + /* "talib/_func.pxi":2120 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLONNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLONNECK(open, high, low, close) + * + */ __pyx_tuple__162 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__162)) __PYX_ERR(2, 2120, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__162); __Pyx_GIVEREF(__pyx_tuple__162); __pyx_codeobj__163 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__162, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLONNECK, 2120, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__163)) __PYX_ERR(2, 2120, __pyx_L1_error) + /* "talib/_func.pxi":2152 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLPIERCING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLPIERCING(open, high, low, close) + * + */ __pyx_tuple__164 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__164)) __PYX_ERR(2, 2152, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__164); __Pyx_GIVEREF(__pyx_tuple__164); __pyx_codeobj__165 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__164, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLPIERCING, 2152, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__165)) __PYX_ERR(2, 2152, __pyx_L1_error) + /* "talib/_func.pxi":2184 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLRICKSHAWMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRICKSHAWMAN(open, high, low, close) + * + */ __pyx_tuple__166 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__166)) __PYX_ERR(2, 2184, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__166); __Pyx_GIVEREF(__pyx_tuple__166); __pyx_codeobj__167 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__166, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLRICKSHAWMAN, 2184, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__167)) __PYX_ERR(2, 2184, __pyx_L1_error) + /* "talib/_func.pxi":2216 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLRISEFALL3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRISEFALL3METHODS(open, high, low, close) + * + */ __pyx_tuple__168 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__168)) __PYX_ERR(2, 2216, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__168); __Pyx_GIVEREF(__pyx_tuple__168); __pyx_codeobj__169 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__168, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLRISEFALL3METHODS, 2216, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__169)) __PYX_ERR(2, 2216, __pyx_L1_error) + /* "talib/_func.pxi":2248 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSEPARATINGLINES( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSEPARATINGLINES(open, high, low, close) + * + */ __pyx_tuple__170 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__170)) __PYX_ERR(2, 2248, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__170); __Pyx_GIVEREF(__pyx_tuple__170); __pyx_codeobj__171 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__170, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLSEPARATINGLINES, 2248, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__171)) __PYX_ERR(2, 2248, __pyx_L1_error) + /* "talib/_func.pxi":2280 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSHOOTINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHOOTINGSTAR(open, high, low, close) + * + */ __pyx_tuple__172 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__172)) __PYX_ERR(2, 2280, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__172); __Pyx_GIVEREF(__pyx_tuple__172); __pyx_codeobj__173 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__172, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLSHOOTINGSTAR, 2280, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__173)) __PYX_ERR(2, 2280, __pyx_L1_error) + /* "talib/_func.pxi":2312 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSHORTLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHORTLINE(open, high, low, close) + * + */ __pyx_tuple__174 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__174)) __PYX_ERR(2, 2312, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__174); __Pyx_GIVEREF(__pyx_tuple__174); __pyx_codeobj__175 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__174, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLSHORTLINE, 2312, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__175)) __PYX_ERR(2, 2312, __pyx_L1_error) + /* "talib/_func.pxi":2344 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSPINNINGTOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSPINNINGTOP(open, high, low, close) + * + */ __pyx_tuple__176 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__176)) __PYX_ERR(2, 2344, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__176); __Pyx_GIVEREF(__pyx_tuple__176); __pyx_codeobj__177 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__176, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLSPINNINGTOP, 2344, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__177)) __PYX_ERR(2, 2344, __pyx_L1_error) + /* "talib/_func.pxi":2376 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSTALLEDPATTERN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTALLEDPATTERN(open, high, low, close) + * + */ __pyx_tuple__178 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__178)) __PYX_ERR(2, 2376, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__178); __Pyx_GIVEREF(__pyx_tuple__178); __pyx_codeobj__179 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__178, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLSTALLEDPATTERN, 2376, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__179)) __PYX_ERR(2, 2376, __pyx_L1_error) + /* "talib/_func.pxi":2408 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSTICKSANDWICH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTICKSANDWICH(open, high, low, close) + * + */ __pyx_tuple__180 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__180)) __PYX_ERR(2, 2408, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__180); __Pyx_GIVEREF(__pyx_tuple__180); __pyx_codeobj__181 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__180, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLSTICKSANDWICH, 2408, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__181)) __PYX_ERR(2, 2408, __pyx_L1_error) + /* "talib/_func.pxi":2440 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTAKURI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTAKURI(open, high, low, close) + * + */ __pyx_tuple__182 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__182)) __PYX_ERR(2, 2440, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__182); __Pyx_GIVEREF(__pyx_tuple__182); __pyx_codeobj__183 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__182, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLTAKURI, 2440, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__183)) __PYX_ERR(2, 2440, __pyx_L1_error) + /* "talib/_func.pxi":2472 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTASUKIGAP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTASUKIGAP(open, high, low, close) + * + */ __pyx_tuple__184 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__184)) __PYX_ERR(2, 2472, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__184); __Pyx_GIVEREF(__pyx_tuple__184); __pyx_codeobj__185 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__184, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLTASUKIGAP, 2472, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__185)) __PYX_ERR(2, 2472, __pyx_L1_error) + /* "talib/_func.pxi":2504 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTHRUSTING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTHRUSTING(open, high, low, close) + * + */ __pyx_tuple__186 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__186)) __PYX_ERR(2, 2504, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__186); __Pyx_GIVEREF(__pyx_tuple__186); __pyx_codeobj__187 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__186, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLTHRUSTING, 2504, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__187)) __PYX_ERR(2, 2504, __pyx_L1_error) + /* "talib/_func.pxi":2536 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTRISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTRISTAR(open, high, low, close) + * + */ __pyx_tuple__188 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__188)) __PYX_ERR(2, 2536, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__188); __Pyx_GIVEREF(__pyx_tuple__188); __pyx_codeobj__189 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__188, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLTRISTAR, 2536, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__189)) __PYX_ERR(2, 2536, __pyx_L1_error) + /* "talib/_func.pxi":2568 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLUNIQUE3RIVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUNIQUE3RIVER(open, high, low, close) + * + */ __pyx_tuple__190 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__190)) __PYX_ERR(2, 2568, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__190); __Pyx_GIVEREF(__pyx_tuple__190); __pyx_codeobj__191 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__190, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLUNIQUE3RIVER, 2568, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__191)) __PYX_ERR(2, 2568, __pyx_L1_error) + /* "talib/_func.pxi":2600 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLUPSIDEGAP2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUPSIDEGAP2CROWS(open, high, low, close) + * + */ __pyx_tuple__192 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__192)) __PYX_ERR(2, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__192); __Pyx_GIVEREF(__pyx_tuple__192); __pyx_codeobj__193 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__192, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLUPSIDEGAP2CROWS, 2600, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__193)) __PYX_ERR(2, 2600, __pyx_L1_error) + /* "talib/_func.pxi":2632 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLXSIDEGAP3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLXSIDEGAP3METHODS(open, high, low, close) + * + */ __pyx_tuple__194 = PyTuple_Pack(12, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__194)) __PYX_ERR(2, 2632, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__194); __Pyx_GIVEREF(__pyx_tuple__194); __pyx_codeobj__195 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__194, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CDLXSIDEGAP3METHODS, 2632, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__195)) __PYX_ERR(2, 2632, __pyx_L1_error) + /* "talib/_func.pxi":2664 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CEIL( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ CEIL(real) + * + */ __pyx_tuple__196 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__196)) __PYX_ERR(2, 2664, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__196); __Pyx_GIVEREF(__pyx_tuple__196); __pyx_codeobj__197 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__196, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CEIL, 2664, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__197)) __PYX_ERR(2, 2664, __pyx_L1_error) + /* "talib/_func.pxi":2693 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CMO( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CMO(real[, timeperiod=?]) + * + */ __pyx_tuple__198 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__198)) __PYX_ERR(2, 2693, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__198); __Pyx_GIVEREF(__pyx_tuple__198); __pyx_codeobj__199 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__198, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CMO, 2693, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__199)) __PYX_ERR(2, 2693, __pyx_L1_error) + /* "talib/_func.pxi":2724 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CORREL( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CORREL(real0, real1[, timeperiod=?]) + * + */ __pyx_tuple__200 = PyTuple_Pack(11, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__200)) __PYX_ERR(2, 2724, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__200); __Pyx_GIVEREF(__pyx_tuple__200); __pyx_codeobj__201 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__200, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_CORREL, 2724, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__201)) __PYX_ERR(2, 2724, __pyx_L1_error) + /* "talib/_func.pxi":2757 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def COS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COS(real) + * + */ __pyx_tuple__202 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__202)) __PYX_ERR(2, 2757, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__202); __Pyx_GIVEREF(__pyx_tuple__202); __pyx_codeobj__203 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__202, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_COS, 2757, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__203)) __PYX_ERR(2, 2757, __pyx_L1_error) + /* "talib/_func.pxi":2786 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def COSH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COSH(real) + * + */ __pyx_tuple__204 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__204)) __PYX_ERR(2, 2786, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__204); __Pyx_GIVEREF(__pyx_tuple__204); __pyx_codeobj__205 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__204, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_COSH, 2786, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__205)) __PYX_ERR(2, 2786, __pyx_L1_error) + /* "talib/_func.pxi":2815 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DEMA(real[, timeperiod=?]) + * + */ __pyx_tuple__206 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__206)) __PYX_ERR(2, 2815, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__206); __Pyx_GIVEREF(__pyx_tuple__206); __pyx_codeobj__207 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__206, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_DEMA, 2815, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__207)) __PYX_ERR(2, 2815, __pyx_L1_error) + /* "talib/_func.pxi":2846 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DIV( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ DIV(real0, real1) + * + */ __pyx_tuple__208 = PyTuple_Pack(10, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__208)) __PYX_ERR(2, 2846, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__208); __Pyx_GIVEREF(__pyx_tuple__208); __pyx_codeobj__209 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__208, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_DIV, 2846, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__209)) __PYX_ERR(2, 2846, __pyx_L1_error) + /* "talib/_func.pxi":2877 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DX(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__210 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__210)) __PYX_ERR(2, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__210); __Pyx_GIVEREF(__pyx_tuple__210); __pyx_codeobj__211 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__210, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_DX, 2877, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__211)) __PYX_ERR(2, 2877, __pyx_L1_error) + /* "talib/_func.pxi":2910 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def EMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ EMA(real[, timeperiod=?]) + * + */ __pyx_tuple__212 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__212)) __PYX_ERR(2, 2910, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__212); __Pyx_GIVEREF(__pyx_tuple__212); __pyx_codeobj__213 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__212, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_EMA, 2910, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__213)) __PYX_ERR(2, 2910, __pyx_L1_error) + /* "talib/_func.pxi":2941 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def EXP( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ EXP(real) + * + */ __pyx_tuple__214 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__214)) __PYX_ERR(2, 2941, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__214); __Pyx_GIVEREF(__pyx_tuple__214); __pyx_codeobj__215 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__214, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_EXP, 2941, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__215)) __PYX_ERR(2, 2941, __pyx_L1_error) + /* "talib/_func.pxi":2970 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def FLOOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ FLOOR(real) + * + */ __pyx_tuple__216 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__216)) __PYX_ERR(2, 2970, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__216); __Pyx_GIVEREF(__pyx_tuple__216); __pyx_codeobj__217 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__216, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_FLOOR, 2970, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__217)) __PYX_ERR(2, 2970, __pyx_L1_error) + /* "talib/_func.pxi":2999 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_DCPERIOD( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPERIOD(real) + * + */ __pyx_tuple__218 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__218)) __PYX_ERR(2, 2999, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__218); __Pyx_GIVEREF(__pyx_tuple__218); __pyx_codeobj__219 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__218, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_HT_DCPERIOD, 2999, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__219)) __PYX_ERR(2, 2999, __pyx_L1_error) + /* "talib/_func.pxi":3028 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_DCPHASE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPHASE(real) + * + */ __pyx_tuple__220 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__220)) __PYX_ERR(2, 3028, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__220); __Pyx_GIVEREF(__pyx_tuple__220); __pyx_codeobj__221 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__220, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_HT_DCPHASE, 3028, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__221)) __PYX_ERR(2, 3028, __pyx_L1_error) + /* "talib/_func.pxi":3057 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_PHASOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_PHASOR(real) + * + */ __pyx_tuple__222 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinphase, __pyx_n_s_outquadrature); if (unlikely(!__pyx_tuple__222)) __PYX_ERR(2, 3057, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__222); __Pyx_GIVEREF(__pyx_tuple__222); __pyx_codeobj__223 = (PyObject*)__Pyx_PyCode_New(1, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__222, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_HT_PHASOR, 3057, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__223)) __PYX_ERR(2, 3057, __pyx_L1_error) + /* "talib/_func.pxi":3089 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_SINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_SINE(real) + * + */ __pyx_tuple__224 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outsine, __pyx_n_s_outleadsine); if (unlikely(!__pyx_tuple__224)) __PYX_ERR(2, 3089, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__224); __Pyx_GIVEREF(__pyx_tuple__224); __pyx_codeobj__225 = (PyObject*)__Pyx_PyCode_New(1, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__224, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_HT_SINE, 3089, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__225)) __PYX_ERR(2, 3089, __pyx_L1_error) + /* "talib/_func.pxi":3121 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_TRENDLINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDLINE(real) + * + */ __pyx_tuple__226 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__226)) __PYX_ERR(2, 3121, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__226); __Pyx_GIVEREF(__pyx_tuple__226); __pyx_codeobj__227 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__226, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_HT_TRENDLINE, 3121, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__227)) __PYX_ERR(2, 3121, __pyx_L1_error) + /* "talib/_func.pxi":3150 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_TRENDMODE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDMODE(real) + * + */ __pyx_tuple__228 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__228)) __PYX_ERR(2, 3150, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__228); __Pyx_GIVEREF(__pyx_tuple__228); __pyx_codeobj__229 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__228, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_HT_TRENDMODE, 3150, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__229)) __PYX_ERR(2, 3150, __pyx_L1_error) + /* "talib/_func.pxi":3179 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def KAMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ KAMA(real[, timeperiod=?]) + * + */ __pyx_tuple__230 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__230)) __PYX_ERR(2, 3179, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__230); __Pyx_GIVEREF(__pyx_tuple__230); __pyx_codeobj__231 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__230, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_KAMA, 3179, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__231)) __PYX_ERR(2, 3179, __pyx_L1_error) + /* "talib/_func.pxi":3210 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG(real[, timeperiod=?]) + * + */ __pyx_tuple__232 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__232)) __PYX_ERR(2, 3210, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__232); __Pyx_GIVEREF(__pyx_tuple__232); __pyx_codeobj__233 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__232, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_LINEARREG, 3210, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__233)) __PYX_ERR(2, 3210, __pyx_L1_error) + /* "talib/_func.pxi":3241 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_ANGLE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_ANGLE(real[, timeperiod=?]) + * + */ __pyx_tuple__234 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__234)) __PYX_ERR(2, 3241, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__234); __Pyx_GIVEREF(__pyx_tuple__234); __pyx_codeobj__235 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__234, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_LINEARREG_ANGLE, 3241, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__235)) __PYX_ERR(2, 3241, __pyx_L1_error) + /* "talib/_func.pxi":3272 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_INTERCEPT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_INTERCEPT(real[, timeperiod=?]) + * + */ __pyx_tuple__236 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__236)) __PYX_ERR(2, 3272, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__236); __Pyx_GIVEREF(__pyx_tuple__236); __pyx_codeobj__237 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__236, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_LINEARREG_INTERCEPT, 3272, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__237)) __PYX_ERR(2, 3272, __pyx_L1_error) + /* "talib/_func.pxi":3303 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_SLOPE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_SLOPE(real[, timeperiod=?]) + * + */ __pyx_tuple__238 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__238)) __PYX_ERR(2, 3303, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__238); __Pyx_GIVEREF(__pyx_tuple__238); __pyx_codeobj__239 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__238, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_LINEARREG_SLOPE, 3303, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__239)) __PYX_ERR(2, 3303, __pyx_L1_error) + /* "talib/_func.pxi":3334 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LN(real) + * + */ __pyx_tuple__240 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__240)) __PYX_ERR(2, 3334, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__240); __Pyx_GIVEREF(__pyx_tuple__240); __pyx_codeobj__241 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__240, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_LN, 3334, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__241)) __PYX_ERR(2, 3334, __pyx_L1_error) + /* "talib/_func.pxi":3363 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LOG10( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LOG10(real) + * + */ __pyx_tuple__242 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__242)) __PYX_ERR(2, 3363, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__242); __Pyx_GIVEREF(__pyx_tuple__242); __pyx_codeobj__243 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__242, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_LOG10, 3363, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__243)) __PYX_ERR(2, 3363, __pyx_L1_error) + /* "talib/_func.pxi":3392 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MA( np.ndarray real not None , int timeperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MA(real[, timeperiod=?, matype=?]) + * + */ __pyx_tuple__244 = PyTuple_Pack(11, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__244)) __PYX_ERR(2, 3392, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__244); __Pyx_GIVEREF(__pyx_tuple__244); __pyx_codeobj__245 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__244, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MA, 3392, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__245)) __PYX_ERR(2, 3392, __pyx_L1_error) + /* "talib/_func.pxi":3424 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACD( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACD(real[, fastperiod=?, slowperiod=?, signalperiod=?]) + * + */ __pyx_tuple__246 = PyTuple_Pack(14, __pyx_n_s_real, __pyx_n_s_fastperiod, __pyx_n_s_slowperiod, __pyx_n_s_signalperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmacd, __pyx_n_s_outmacdsignal, __pyx_n_s_outmacdhist); if (unlikely(!__pyx_tuple__246)) __PYX_ERR(2, 3424, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__246); __Pyx_GIVEREF(__pyx_tuple__246); __pyx_codeobj__247 = (PyObject*)__Pyx_PyCode_New(4, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__246, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MACD, 3424, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__247)) __PYX_ERR(2, 3424, __pyx_L1_error) + /* "talib/_func.pxi":3463 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACDEXT( np.ndarray real not None , int fastperiod=-2**31 , int fastmatype=0 , int slowperiod=-2**31 , int slowmatype=0 , int signalperiod=-2**31 , int signalmatype=0 ): # <<<<<<<<<<<<<< + * """ MACDEXT(real[, fastperiod=?, fastmatype=?, slowperiod=?, slowmatype=?, signalperiod=?, signalmatype=?]) + * + */ __pyx_tuple__248 = PyTuple_Pack(17, __pyx_n_s_real, __pyx_n_s_fastperiod, __pyx_n_s_fastmatype, __pyx_n_s_slowperiod, __pyx_n_s_slowmatype, __pyx_n_s_signalperiod, __pyx_n_s_signalmatype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmacd, __pyx_n_s_outmacdsignal, __pyx_n_s_outmacdhist); if (unlikely(!__pyx_tuple__248)) __PYX_ERR(2, 3463, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__248); __Pyx_GIVEREF(__pyx_tuple__248); __pyx_codeobj__249 = (PyObject*)__Pyx_PyCode_New(7, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__248, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MACDEXT, 3463, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__249)) __PYX_ERR(2, 3463, __pyx_L1_error) + /* "talib/_func.pxi":3505 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACDFIX( np.ndarray real not None , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACDFIX(real[, signalperiod=?]) + * + */ __pyx_tuple__250 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_signalperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmacd, __pyx_n_s_outmacdsignal, __pyx_n_s_outmacdhist); if (unlikely(!__pyx_tuple__250)) __PYX_ERR(2, 3505, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__250); __Pyx_GIVEREF(__pyx_tuple__250); __pyx_codeobj__251 = (PyObject*)__Pyx_PyCode_New(2, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__250, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MACDFIX, 3505, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__251)) __PYX_ERR(2, 3505, __pyx_L1_error) + /* "talib/_func.pxi":3542 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAMA( np.ndarray real not None , double fastlimit=-4e37 , double slowlimit=-4e37 ): # <<<<<<<<<<<<<< + * """ MAMA(real[, fastlimit=?, slowlimit=?]) + * + */ __pyx_tuple__252 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_fastlimit, __pyx_n_s_slowlimit, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmama, __pyx_n_s_outfama); if (unlikely(!__pyx_tuple__252)) __PYX_ERR(2, 3542, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__252); __Pyx_GIVEREF(__pyx_tuple__252); __pyx_codeobj__253 = (PyObject*)__Pyx_PyCode_New(3, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__252, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MAMA, 3542, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__253)) __PYX_ERR(2, 3542, __pyx_L1_error) + /* "talib/_func.pxi":3577 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAVP( np.ndarray real not None , np.ndarray periods not None , int minperiod=-2**31 , int maxperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MAVP(real, periods[, minperiod=?, maxperiod=?, matype=?]) + * + */ __pyx_tuple__254 = PyTuple_Pack(13, __pyx_n_s_real, __pyx_n_s_periods, __pyx_n_s_minperiod, __pyx_n_s_maxperiod, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__254)) __PYX_ERR(2, 3577, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__254); __Pyx_GIVEREF(__pyx_tuple__254); __pyx_codeobj__255 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__254, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MAVP, 3577, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__255)) __PYX_ERR(2, 3577, __pyx_L1_error) + /* "talib/_func.pxi":3612 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAX(real[, timeperiod=?]) + * + */ __pyx_tuple__256 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__256)) __PYX_ERR(2, 3612, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__256); __Pyx_GIVEREF(__pyx_tuple__256); __pyx_codeobj__257 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MAX, 3612, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__257)) __PYX_ERR(2, 3612, __pyx_L1_error) + /* "talib/_func.pxi":3643 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAXINDEX(real[, timeperiod=?]) + * + */ __pyx_tuple__258 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger, __pyx_n_s_outinteger_data, __pyx_n_s_i); if (unlikely(!__pyx_tuple__258)) __PYX_ERR(2, 3643, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__258); __Pyx_GIVEREF(__pyx_tuple__258); __pyx_codeobj__259 = (PyObject*)__Pyx_PyCode_New(2, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__258, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MAXINDEX, 3643, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__259)) __PYX_ERR(2, 3643, __pyx_L1_error) + /* "talib/_func.pxi":3677 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MEDPRICE( np.ndarray high not None , np.ndarray low not None ): # <<<<<<<<<<<<<< + * """ MEDPRICE(high, low) + * + */ __pyx_tuple__260 = PyTuple_Pack(10, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__260)) __PYX_ERR(2, 3677, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__260); __Pyx_GIVEREF(__pyx_tuple__260); __pyx_codeobj__261 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__260, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MEDPRICE, 3677, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__261)) __PYX_ERR(2, 3677, __pyx_L1_error) + /* "talib/_func.pxi":3707 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MFI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MFI(high, low, close, volume[, timeperiod=?]) + * + */ __pyx_tuple__262 = PyTuple_Pack(13, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_volume, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__262)) __PYX_ERR(2, 3707, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__262); __Pyx_GIVEREF(__pyx_tuple__262); __pyx_codeobj__263 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__262, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MFI, 3707, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__263)) __PYX_ERR(2, 3707, __pyx_L1_error) + /* "talib/_func.pxi":3741 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIDPOINT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPOINT(real[, timeperiod=?]) + * + */ __pyx_tuple__264 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__264)) __PYX_ERR(2, 3741, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__264); __Pyx_GIVEREF(__pyx_tuple__264); __pyx_codeobj__265 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__264, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MIDPOINT, 3741, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__265)) __PYX_ERR(2, 3741, __pyx_L1_error) + /* "talib/_func.pxi":3772 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIDPRICE( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPRICE(high, low[, timeperiod=?]) + * + */ __pyx_tuple__266 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__266)) __PYX_ERR(2, 3772, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__266); __Pyx_GIVEREF(__pyx_tuple__266); __pyx_codeobj__267 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__266, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MIDPRICE, 3772, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__267)) __PYX_ERR(2, 3772, __pyx_L1_error) + /* "talib/_func.pxi":3804 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIN( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIN(real[, timeperiod=?]) + * + */ __pyx_tuple__268 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__268)) __PYX_ERR(2, 3804, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__268); __Pyx_GIVEREF(__pyx_tuple__268); __pyx_codeobj__269 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__268, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MIN, 3804, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__269)) __PYX_ERR(2, 3804, __pyx_L1_error) + /* "talib/_func.pxi":3835 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MININDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MININDEX(real[, timeperiod=?]) + * + */ __pyx_tuple__270 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger, __pyx_n_s_outinteger_data, __pyx_n_s_i); if (unlikely(!__pyx_tuple__270)) __PYX_ERR(2, 3835, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__270); __Pyx_GIVEREF(__pyx_tuple__270); __pyx_codeobj__271 = (PyObject*)__Pyx_PyCode_New(2, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__270, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MININDEX, 3835, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__271)) __PYX_ERR(2, 3835, __pyx_L1_error) + /* "talib/_func.pxi":3869 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINMAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAX(real[, timeperiod=?]) + * + */ __pyx_tuple__272 = PyTuple_Pack(11, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmin, __pyx_n_s_outmax); if (unlikely(!__pyx_tuple__272)) __PYX_ERR(2, 3869, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__272); __Pyx_GIVEREF(__pyx_tuple__272); __pyx_codeobj__273 = (PyObject*)__Pyx_PyCode_New(2, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__272, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MINMAX, 3869, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__273)) __PYX_ERR(2, 3869, __pyx_L1_error) + /* "talib/_func.pxi":3903 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINMAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAXINDEX(real[, timeperiod=?]) + * + */ __pyx_tuple__274 = PyTuple_Pack(14, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outminidx, __pyx_n_s_outmaxidx, __pyx_n_s_outminidx_data, __pyx_n_s_i, __pyx_n_s_outmaxidx_data); if (unlikely(!__pyx_tuple__274)) __PYX_ERR(2, 3903, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__274); __Pyx_GIVEREF(__pyx_tuple__274); __pyx_codeobj__275 = (PyObject*)__Pyx_PyCode_New(2, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__274, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MINMAXINDEX, 3903, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__275)) __PYX_ERR(2, 3903, __pyx_L1_error) + /* "talib/_func.pxi":3943 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DI(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__276 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__276)) __PYX_ERR(2, 3943, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__276); __Pyx_GIVEREF(__pyx_tuple__276); __pyx_codeobj__277 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__276, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MINUS_DI, 3943, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__277)) __PYX_ERR(2, 3943, __pyx_L1_error) + /* "talib/_func.pxi":3976 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DM(high, low[, timeperiod=?]) + * + */ __pyx_tuple__278 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__278)) __PYX_ERR(2, 3976, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__278); __Pyx_GIVEREF(__pyx_tuple__278); __pyx_codeobj__279 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__278, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MINUS_DM, 3976, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__279)) __PYX_ERR(2, 3976, __pyx_L1_error) + /* "talib/_func.pxi":4008 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MOM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MOM(real[, timeperiod=?]) + * + */ __pyx_tuple__280 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__280)) __PYX_ERR(2, 4008, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__280); __Pyx_GIVEREF(__pyx_tuple__280); __pyx_codeobj__281 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__280, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MOM, 4008, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__281)) __PYX_ERR(2, 4008, __pyx_L1_error) + /* "talib/_func.pxi":4039 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MULT( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ MULT(real0, real1) + * + */ __pyx_tuple__282 = PyTuple_Pack(10, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__282)) __PYX_ERR(2, 4039, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__282); __Pyx_GIVEREF(__pyx_tuple__282); __pyx_codeobj__283 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__282, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_MULT, 4039, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__283)) __PYX_ERR(2, 4039, __pyx_L1_error) + /* "talib/_func.pxi":4070 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def NATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ NATR(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__284 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__284)) __PYX_ERR(2, 4070, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__284); __Pyx_GIVEREF(__pyx_tuple__284); __pyx_codeobj__285 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__284, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_NATR, 4070, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__285)) __PYX_ERR(2, 4070, __pyx_L1_error) + /* "talib/_func.pxi":4103 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def OBV( np.ndarray real not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ OBV(real, volume) + * + */ __pyx_tuple__286 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_volume, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__286)) __PYX_ERR(2, 4103, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__286); __Pyx_GIVEREF(__pyx_tuple__286); __pyx_codeobj__287 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__286, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_OBV, 4103, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__287)) __PYX_ERR(2, 4103, __pyx_L1_error) + /* "talib/_func.pxi":4134 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PLUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DI(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__288 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__288)) __PYX_ERR(2, 4134, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__288); __Pyx_GIVEREF(__pyx_tuple__288); __pyx_codeobj__289 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__288, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_PLUS_DI, 4134, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__289)) __PYX_ERR(2, 4134, __pyx_L1_error) + /* "talib/_func.pxi":4167 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PLUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DM(high, low[, timeperiod=?]) + * + */ __pyx_tuple__290 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__290)) __PYX_ERR(2, 4167, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__290); __Pyx_GIVEREF(__pyx_tuple__290); __pyx_codeobj__291 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__290, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_PLUS_DM, 4167, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__291)) __PYX_ERR(2, 4167, __pyx_L1_error) + /* "talib/_func.pxi":4199 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PPO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ PPO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ __pyx_tuple__292 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_fastperiod, __pyx_n_s_slowperiod, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__292)) __PYX_ERR(2, 4199, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__292); __Pyx_GIVEREF(__pyx_tuple__292); __pyx_codeobj__293 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__292, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_PPO, 4199, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__293)) __PYX_ERR(2, 4199, __pyx_L1_error) + /* "talib/_func.pxi":4232 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROC( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROC(real[, timeperiod=?]) + * + */ __pyx_tuple__294 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__294)) __PYX_ERR(2, 4232, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__294); __Pyx_GIVEREF(__pyx_tuple__294); __pyx_codeobj__295 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__294, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ROC, 4232, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__295)) __PYX_ERR(2, 4232, __pyx_L1_error) + /* "talib/_func.pxi":4263 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCP( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCP(real[, timeperiod=?]) + * + */ __pyx_tuple__296 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__296)) __PYX_ERR(2, 4263, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__296); __Pyx_GIVEREF(__pyx_tuple__296); __pyx_codeobj__297 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__296, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ROCP, 4263, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__297)) __PYX_ERR(2, 4263, __pyx_L1_error) + /* "talib/_func.pxi":4294 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCR( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR(real[, timeperiod=?]) + * + */ __pyx_tuple__298 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__298)) __PYX_ERR(2, 4294, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__298); __Pyx_GIVEREF(__pyx_tuple__298); __pyx_codeobj__299 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__298, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ROCR, 4294, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__299)) __PYX_ERR(2, 4294, __pyx_L1_error) + /* "talib/_func.pxi":4325 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCR100( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR100(real[, timeperiod=?]) + * + */ __pyx_tuple__300 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__300)) __PYX_ERR(2, 4325, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__300); __Pyx_GIVEREF(__pyx_tuple__300); __pyx_codeobj__301 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__300, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ROCR100, 4325, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__301)) __PYX_ERR(2, 4325, __pyx_L1_error) + /* "talib/_func.pxi":4356 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def RSI( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ RSI(real[, timeperiod=?]) + * + */ __pyx_tuple__302 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__302)) __PYX_ERR(2, 4356, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__302); __Pyx_GIVEREF(__pyx_tuple__302); __pyx_codeobj__303 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__302, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_RSI, 4356, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__303)) __PYX_ERR(2, 4356, __pyx_L1_error) + /* "talib/_func.pxi":4387 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SAR( np.ndarray high not None , np.ndarray low not None , double acceleration=0.02 , double maximum=0.2 ): # <<<<<<<<<<<<<< + * """ SAR(high, low[, acceleration=?, maximum=?]) + * + */ __pyx_tuple__304 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_acceleration, __pyx_n_s_maximum, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__304)) __PYX_ERR(2, 4387, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__304); __Pyx_GIVEREF(__pyx_tuple__304); __pyx_codeobj__305 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__304, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_SAR, 4387, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__305)) __PYX_ERR(2, 4387, __pyx_L1_error) + /* "talib/_func.pxi":4420 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SAREXT( np.ndarray high not None , np.ndarray low not None , double startvalue=-4e37 , double offsetonreverse=-4e37 , double accelerationinitlong=-4e37 , double accelerationlong=-4e37 , double accelerationmaxlong=-4e37 , double accelerationinitshort=-4e37 , double accelerationshort=-4e37 , double accelerationmaxshort=-4e37 ): # <<<<<<<<<<<<<< + * """ SAREXT(high, low[, startvalue=?, offsetonreverse=?, accelerationinitlong=?, accelerationlong=?, accelerationmaxlong=?, accelerationinitshort=?, accelerationshort=?, accelerationmaxshort=?]) + * + */ __pyx_tuple__306 = PyTuple_Pack(18, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_startvalue, __pyx_n_s_offsetonreverse, __pyx_n_s_accelerationinitlong, __pyx_n_s_accelerationlong, __pyx_n_s_accelerationmaxlong, __pyx_n_s_accelerationinitshort, __pyx_n_s_accelerationshort, __pyx_n_s_accelerationmaxshort, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__306)) __PYX_ERR(2, 4420, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__306); __Pyx_GIVEREF(__pyx_tuple__306); __pyx_codeobj__307 = (PyObject*)__Pyx_PyCode_New(10, 0, 18, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__306, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_SAREXT, 4420, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__307)) __PYX_ERR(2, 4420, __pyx_L1_error) + /* "talib/_func.pxi":4459 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SIN(real) + * + */ __pyx_tuple__308 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__308)) __PYX_ERR(2, 4459, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__308); __Pyx_GIVEREF(__pyx_tuple__308); __pyx_codeobj__309 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__308, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_SIN, 4459, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__309)) __PYX_ERR(2, 4459, __pyx_L1_error) + /* "talib/_func.pxi":4488 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SINH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SINH(real) + * + */ __pyx_tuple__310 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__310)) __PYX_ERR(2, 4488, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__310); __Pyx_GIVEREF(__pyx_tuple__310); __pyx_codeobj__311 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__310, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_SINH, 4488, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__311)) __PYX_ERR(2, 4488, __pyx_L1_error) + /* "talib/_func.pxi":4517 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SMA(real[, timeperiod=?]) + * + */ __pyx_tuple__312 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__312)) __PYX_ERR(2, 4517, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__312); __Pyx_GIVEREF(__pyx_tuple__312); __pyx_codeobj__313 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__312, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_SMA, 4517, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__313)) __PYX_ERR(2, 4517, __pyx_L1_error) + /* "talib/_func.pxi":4548 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SQRT( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SQRT(real) + * + */ __pyx_tuple__314 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__314)) __PYX_ERR(2, 4548, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__314); __Pyx_GIVEREF(__pyx_tuple__314); __pyx_codeobj__315 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__314, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_SQRT, 4548, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__315)) __PYX_ERR(2, 4548, __pyx_L1_error) + /* "talib/_func.pxi":4577 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STDDEV( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ STDDEV(real[, timeperiod=?, nbdev=?]) + * + */ __pyx_tuple__316 = PyTuple_Pack(11, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_nbdev, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__316)) __PYX_ERR(2, 4577, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__316); __Pyx_GIVEREF(__pyx_tuple__316); __pyx_codeobj__317 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__316, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_STDDEV, 4577, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__317)) __PYX_ERR(2, 4577, __pyx_L1_error) + /* "talib/_func.pxi":4609 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCH( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int slowk_period=-2**31 , int slowk_matype=0 , int slowd_period=-2**31 , int slowd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?]) + * + */ __pyx_tuple__318 = PyTuple_Pack(17, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_fastk_period, __pyx_n_s_slowk_period, __pyx_n_s_slowk_matype, __pyx_n_s_slowd_period, __pyx_n_s_slowd_matype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outslowk, __pyx_n_s_outslowd); if (unlikely(!__pyx_tuple__318)) __PYX_ERR(2, 4609, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__318); __Pyx_GIVEREF(__pyx_tuple__318); __pyx_codeobj__319 = (PyObject*)__Pyx_PyCode_New(8, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__318, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_STOCH, 4609, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__319)) __PYX_ERR(2, 4609, __pyx_L1_error) + /* "talib/_func.pxi":4649 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCHF( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ __pyx_tuple__320 = PyTuple_Pack(15, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_fastk_period, __pyx_n_s_fastd_period, __pyx_n_s_fastd_matype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outfastk, __pyx_n_s_outfastd); if (unlikely(!__pyx_tuple__320)) __PYX_ERR(2, 4649, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__320); __Pyx_GIVEREF(__pyx_tuple__320); __pyx_codeobj__321 = (PyObject*)__Pyx_PyCode_New(6, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__320, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_STOCHF, 4649, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__321)) __PYX_ERR(2, 4649, __pyx_L1_error) + /* "talib/_func.pxi":4687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCHRSI( np.ndarray real not None , int timeperiod=-2**31 , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHRSI(real[, timeperiod=?, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ __pyx_tuple__322 = PyTuple_Pack(14, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_fastk_period, __pyx_n_s_fastd_period, __pyx_n_s_fastd_matype, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outfastk, __pyx_n_s_outfastd); if (unlikely(!__pyx_tuple__322)) __PYX_ERR(2, 4687, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__322); __Pyx_GIVEREF(__pyx_tuple__322); __pyx_codeobj__323 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__322, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_STOCHRSI, 4687, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__323)) __PYX_ERR(2, 4687, __pyx_L1_error) + /* "talib/_func.pxi":4724 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SUB( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ SUB(real0, real1) + * + */ __pyx_tuple__324 = PyTuple_Pack(10, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__324)) __PYX_ERR(2, 4724, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__324); __Pyx_GIVEREF(__pyx_tuple__324); __pyx_codeobj__325 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__324, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_SUB, 4724, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__325)) __PYX_ERR(2, 4724, __pyx_L1_error) + /* "talib/_func.pxi":4755 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SUM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SUM(real[, timeperiod=?]) + * + */ __pyx_tuple__326 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__326)) __PYX_ERR(2, 4755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__326); __Pyx_GIVEREF(__pyx_tuple__326); __pyx_codeobj__327 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__326, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_SUM, 4755, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__327)) __PYX_ERR(2, 4755, __pyx_L1_error) + /* "talib/_func.pxi":4786 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def T3( np.ndarray real not None , int timeperiod=-2**31 , double vfactor=-4e37 ): # <<<<<<<<<<<<<< + * """ T3(real[, timeperiod=?, vfactor=?]) + * + */ __pyx_tuple__328 = PyTuple_Pack(11, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_vfactor, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__328)) __PYX_ERR(2, 4786, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__328); __Pyx_GIVEREF(__pyx_tuple__328); __pyx_codeobj__329 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__328, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_T3, 4786, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__329)) __PYX_ERR(2, 4786, __pyx_L1_error) + /* "talib/_func.pxi":4818 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TAN(real) + * + */ __pyx_tuple__330 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__330)) __PYX_ERR(2, 4818, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__330); __Pyx_GIVEREF(__pyx_tuple__330); __pyx_codeobj__331 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__330, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_TAN, 4818, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__331)) __PYX_ERR(2, 4818, __pyx_L1_error) + /* "talib/_func.pxi":4847 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TANH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TANH(real) + * + */ __pyx_tuple__332 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__332)) __PYX_ERR(2, 4847, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__332); __Pyx_GIVEREF(__pyx_tuple__332); __pyx_codeobj__333 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__332, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_TANH, 4847, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__333)) __PYX_ERR(2, 4847, __pyx_L1_error) + /* "talib/_func.pxi":4876 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TEMA(real[, timeperiod=?]) + * + */ __pyx_tuple__334 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__334)) __PYX_ERR(2, 4876, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__334); __Pyx_GIVEREF(__pyx_tuple__334); __pyx_codeobj__335 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__334, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_TEMA, 4876, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__335)) __PYX_ERR(2, 4876, __pyx_L1_error) + /* "talib/_func.pxi":4907 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRANGE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TRANGE(high, low, close) + * + */ __pyx_tuple__336 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__336)) __PYX_ERR(2, 4907, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__336); __Pyx_GIVEREF(__pyx_tuple__336); __pyx_codeobj__337 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__336, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_TRANGE, 4907, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__337)) __PYX_ERR(2, 4907, __pyx_L1_error) + /* "talib/_func.pxi":4938 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRIMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIMA(real[, timeperiod=?]) + * + */ __pyx_tuple__338 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__338)) __PYX_ERR(2, 4938, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__338); __Pyx_GIVEREF(__pyx_tuple__338); __pyx_codeobj__339 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__338, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_TRIMA, 4938, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__339)) __PYX_ERR(2, 4938, __pyx_L1_error) + /* "talib/_func.pxi":4969 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRIX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIX(real[, timeperiod=?]) + * + */ __pyx_tuple__340 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__340)) __PYX_ERR(2, 4969, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__340); __Pyx_GIVEREF(__pyx_tuple__340); __pyx_codeobj__341 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__340, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_TRIX, 4969, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__341)) __PYX_ERR(2, 4969, __pyx_L1_error) + /* "talib/_func.pxi":5000 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TSF( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TSF(real[, timeperiod=?]) + * + */ __pyx_tuple__342 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__342)) __PYX_ERR(2, 5000, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__342); __Pyx_GIVEREF(__pyx_tuple__342); __pyx_codeobj__343 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__342, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_TSF, 5000, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__343)) __PYX_ERR(2, 5000, __pyx_L1_error) + /* "talib/_func.pxi":5031 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TYPPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TYPPRICE(high, low, close) + * + */ __pyx_tuple__344 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__344)) __PYX_ERR(2, 5031, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__344); __Pyx_GIVEREF(__pyx_tuple__344); __pyx_codeobj__345 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__344, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_TYPPRICE, 5031, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__345)) __PYX_ERR(2, 5031, __pyx_L1_error) + /* "talib/_func.pxi":5062 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ULTOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod1=-2**31 , int timeperiod2=-2**31 , int timeperiod3=-2**31 ): # <<<<<<<<<<<<<< + * """ ULTOSC(high, low, close[, timeperiod1=?, timeperiod2=?, timeperiod3=?]) + * + */ __pyx_tuple__346 = PyTuple_Pack(14, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod1, __pyx_n_s_timeperiod2, __pyx_n_s_timeperiod3, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__346)) __PYX_ERR(2, 5062, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__346); __Pyx_GIVEREF(__pyx_tuple__346); __pyx_codeobj__347 = (PyObject*)__Pyx_PyCode_New(6, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__346, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_ULTOSC, 5062, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__347)) __PYX_ERR(2, 5062, __pyx_L1_error) + /* "talib/_func.pxi":5097 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def VAR( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ VAR(real[, timeperiod=?, nbdev=?]) + * + */ __pyx_tuple__348 = PyTuple_Pack(11, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_nbdev, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__348)) __PYX_ERR(2, 5097, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__348); __Pyx_GIVEREF(__pyx_tuple__348); __pyx_codeobj__349 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__348, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_VAR, 5097, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__349)) __PYX_ERR(2, 5097, __pyx_L1_error) + /* "talib/_func.pxi":5129 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WCLPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ WCLPRICE(high, low, close) + * + */ __pyx_tuple__350 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__350)) __PYX_ERR(2, 5129, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__350); __Pyx_GIVEREF(__pyx_tuple__350); __pyx_codeobj__351 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_WCLPRICE, 5129, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__351)) __PYX_ERR(2, 5129, __pyx_L1_error) + /* "talib/_func.pxi":5160 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WILLR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WILLR(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__352 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__352)) __PYX_ERR(2, 5160, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__352); __Pyx_GIVEREF(__pyx_tuple__352); __pyx_codeobj__353 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__352, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_WILLR, 5160, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__353)) __PYX_ERR(2, 5160, __pyx_L1_error) + /* "talib/_func.pxi":5193 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WMA(real[, timeperiod=?]) + * + */ __pyx_tuple__354 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_begidx, __pyx_n_s_endidx, __pyx_n_s_lookback, __pyx_n_s_retCode, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__354)) __PYX_ERR(2, 5193, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__354); __Pyx_GIVEREF(__pyx_tuple__354); __pyx_codeobj__355 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__354, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__func_pxi, __pyx_n_s_WMA, 5193, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__355)) __PYX_ERR(2, 5193, __pyx_L1_error) + /* "talib/_abstract.pxi":56 + * if sys.version >= '3': + * + * def str2bytes(s): # <<<<<<<<<<<<<< + * return bytes(s, 'ascii') + * + */ __pyx_tuple__356 = PyTuple_Pack(1, __pyx_n_s_s); if (unlikely(!__pyx_tuple__356)) __PYX_ERR(1, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__356); __Pyx_GIVEREF(__pyx_tuple__356); __pyx_codeobj__357 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__356, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_str2bytes, 56, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__357)) __PYX_ERR(1, 56, __pyx_L1_error) + /* "talib/_abstract.pxi":59 + * return bytes(s, 'ascii') + * + * def bytes2str(b): # <<<<<<<<<<<<<< + * return b.decode('ascii') + * + */ __pyx_tuple__358 = PyTuple_Pack(1, __pyx_n_s_b); if (unlikely(!__pyx_tuple__358)) __PYX_ERR(1, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__358); __Pyx_GIVEREF(__pyx_tuple__358); __pyx_codeobj__359 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__358, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_bytes2str, 59, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__359)) __PYX_ERR(1, 59, __pyx_L1_error) + /* "talib/_abstract.pxi":64 + * else: + * + * def str2bytes(s): # <<<<<<<<<<<<<< + * return s + * + */ __pyx_tuple__360 = PyTuple_Pack(1, __pyx_n_s_s); if (unlikely(!__pyx_tuple__360)) __PYX_ERR(1, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__360); __Pyx_GIVEREF(__pyx_tuple__360); __pyx_codeobj__361 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__360, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_str2bytes, 64, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__361)) __PYX_ERR(1, 64, __pyx_L1_error) + /* "talib/_abstract.pxi":67 + * return s + * + * def bytes2str(b): # <<<<<<<<<<<<<< + * return b + * + */ __pyx_tuple__362 = PyTuple_Pack(1, __pyx_n_s_b); if (unlikely(!__pyx_tuple__362)) __PYX_ERR(1, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__362); __Pyx_GIVEREF(__pyx_tuple__362); __pyx_codeobj__363 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__362, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_bytes2str, 67, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__363)) __PYX_ERR(1, 67, __pyx_L1_error) + /* "talib/_abstract.pxi":70 + * return b + * + * class Function(object): # <<<<<<<<<<<<<< + * """ + * This is a pythonic wrapper around TALIB's abstract interface. It is + */ __pyx_tuple__364 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__364)) __PYX_ERR(1, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__364); __Pyx_GIVEREF(__pyx_tuple__364); + /* "talib/_abstract.pxi":99 + * """ + * + * def __init__(self, function_name, func_object, *args, **kwargs): # <<<<<<<<<<<<<< + * # make sure the function_name is valid and define all of our variables + * self.__name = function_name.upper() + */ __pyx_tuple__365 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_function_name, __pyx_n_s_func_object, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__365)) __PYX_ERR(1, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__365); __Pyx_GIVEREF(__pyx_tuple__365); __pyx_codeobj__366 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__365, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_init, 99, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__366)) __PYX_ERR(1, 99, __pyx_L1_error) + /* "talib/_abstract.pxi":118 + * self.func_object = func_object + * + * def __initialize_function_info(self): # <<<<<<<<<<<<<< + * # function info + * self.__info = _ta_getFuncInfo(self.__name) + */ __pyx_tuple__367 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_i, __pyx_n_s_info, __pyx_n_s_input_name, __pyx_n_s_param_name, __pyx_n_s_output_name); if (unlikely(!__pyx_tuple__367)) __PYX_ERR(1, 118, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__367); __Pyx_GIVEREF(__pyx_tuple__367); __pyx_codeobj__368 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__367, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_initialize_function_info, 118, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__368)) __PYX_ERR(1, 118, __pyx_L1_error) + /* "talib/_abstract.pxi":148 + * + * @property + * def info(self): # <<<<<<<<<<<<<< + * """ + * Returns a copy of the function's info dict. + */ __pyx_tuple__369 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__369)) __PYX_ERR(1, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__369); __Pyx_GIVEREF(__pyx_tuple__369); __pyx_codeobj__370 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__369, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_info, 148, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__370)) __PYX_ERR(1, 148, __pyx_L1_error) + /* "talib/_abstract.pxi":155 + * + * @property + * def function_flags(self): # <<<<<<<<<<<<<< + * """ + * Returns any function flags defined for this indicator function. + */ __pyx_tuple__371 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__371)) __PYX_ERR(1, 155, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__371); __Pyx_GIVEREF(__pyx_tuple__371); __pyx_codeobj__372 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__371, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_function_flags, 155, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__372)) __PYX_ERR(1, 155, __pyx_L1_error) + /* "talib/_abstract.pxi":162 + * + * @property + * def output_flags(self): # <<<<<<<<<<<<<< + * """ + * Returns the flags for each output for this indicator function. + */ __pyx_tuple__373 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__373)) __PYX_ERR(1, 162, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__373); __Pyx_GIVEREF(__pyx_tuple__373); __pyx_codeobj__374 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__373, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_output_flags, 162, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__374)) __PYX_ERR(1, 162, __pyx_L1_error) + /* "talib/_abstract.pxi":168 + * return self.__info['output_flags'].copy() + * + * def get_input_names(self): # <<<<<<<<<<<<<< + * """ + * Returns the dict of input price series names that specifies which + */ __pyx_tuple__375 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_ret, __pyx_n_s_input_name); if (unlikely(!__pyx_tuple__375)) __PYX_ERR(1, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__375); __Pyx_GIVEREF(__pyx_tuple__375); __pyx_codeobj__376 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__375, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_get_input_names, 168, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__376)) __PYX_ERR(1, 168, __pyx_L1_error) + /* "talib/_abstract.pxi":178 + * return ret + * + * def set_input_names(self, input_names): # <<<<<<<<<<<<<< + * """ + * Sets the input price series names to use. + */ __pyx_tuple__377 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_input_names, __pyx_n_s_input_name, __pyx_n_s_price_series); if (unlikely(!__pyx_tuple__377)) __PYX_ERR(1, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__377); __Pyx_GIVEREF(__pyx_tuple__377); __pyx_codeobj__378 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__377, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_set_input_names, 178, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__378)) __PYX_ERR(1, 178, __pyx_L1_error) + /* "talib/_abstract.pxi":189 + * input_names = property(get_input_names, set_input_names) + * + * def get_input_arrays(self): # <<<<<<<<<<<<<< + * """ + * Returns a copy of the dict of input arrays in use. + */ __pyx_tuple__379 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__379)) __PYX_ERR(1, 189, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__379); __Pyx_GIVEREF(__pyx_tuple__379); __pyx_codeobj__380 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__379, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_get_input_arrays, 189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__380)) __PYX_ERR(1, 189, __pyx_L1_error) + /* "talib/_abstract.pxi":199 + * return self.__input_arrays.copy() + * + * def set_input_arrays(self, input_arrays): # <<<<<<<<<<<<<< + * """ + * Sets the dict of input_arrays to use. Returns True/False for + */ __pyx_tuple__381 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_input_arrays, __pyx_n_s_missing_keys, __pyx_n_s_key, __pyx_n_s_missing); if (unlikely(!__pyx_tuple__381)) __PYX_ERR(1, 199, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__381); __Pyx_GIVEREF(__pyx_tuple__381); __pyx_codeobj__382 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__381, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_set_input_arrays, 199, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__382)) __PYX_ERR(1, 199, __pyx_L1_error) + /* "talib/_abstract.pxi":247 + * input_arrays = property(get_input_arrays, set_input_arrays) + * + * def get_parameters(self): # <<<<<<<<<<<<<< + * """ + * Returns the function's optional parameters and their default values. + */ __pyx_tuple__383 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_ret, __pyx_n_s_opt_input); if (unlikely(!__pyx_tuple__383)) __PYX_ERR(1, 247, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__383); __Pyx_GIVEREF(__pyx_tuple__383); __pyx_codeobj__384 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__383, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_get_parameters, 247, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__384)) __PYX_ERR(1, 247, __pyx_L1_error) + /* "talib/_abstract.pxi":256 + * return ret + * + * def set_parameters(self, parameters=None, **kwargs): # <<<<<<<<<<<<<< + * """ + * Sets the function parameter values. + */ __pyx_tuple__385 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_parameters, __pyx_n_s_kwargs, __pyx_n_s_param, __pyx_n_s_value); if (unlikely(!__pyx_tuple__385)) __PYX_ERR(1, 256, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__385); __Pyx_GIVEREF(__pyx_tuple__385); @@ -67714,26 +102521,61 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple__387); __Pyx_GIVEREF(__pyx_tuple__387); + /* "talib/_abstract.pxi":270 + * parameters = property(get_parameters, set_parameters) + * + * def set_function_args(self, *args, **kwargs): # <<<<<<<<<<<<<< + * """ + * optional args:[input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs] + */ __pyx_tuple__388 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_update_info, __pyx_n_s_key, __pyx_n_s_value, __pyx_n_s_skip_first, __pyx_n_s_i, __pyx_n_s_param_name); if (unlikely(!__pyx_tuple__388)) __PYX_ERR(1, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__388); __Pyx_GIVEREF(__pyx_tuple__388); __pyx_codeobj__389 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__388, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_set_function_args, 270, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__389)) __PYX_ERR(1, 270, __pyx_L1_error) + /* "talib/_abstract.pxi":305 + * + * @property + * def lookback(self): # <<<<<<<<<<<<<< + * """ + * Returns the lookback window size for the function with the parameter + */ __pyx_tuple__390 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_holder, __pyx_n_s_i, __pyx_n_s_opt_input, __pyx_n_s_value, __pyx_n_s_type, __pyx_n_s_lookback); if (unlikely(!__pyx_tuple__390)) __PYX_ERR(1, 305, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__390); __Pyx_GIVEREF(__pyx_tuple__390); __pyx_codeobj__391 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__390, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_lookback, 305, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__391)) __PYX_ERR(1, 305, __pyx_L1_error) + /* "talib/_abstract.pxi":325 + * + * @property + * def output_names(self): # <<<<<<<<<<<<<< + * """ + * Returns a list of the output names returned by this function. + */ __pyx_tuple__392 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ret); if (unlikely(!__pyx_tuple__392)) __PYX_ERR(1, 325, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__392); __Pyx_GIVEREF(__pyx_tuple__392); __pyx_codeobj__393 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__392, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_output_names, 325, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__393)) __PYX_ERR(1, 325, __pyx_L1_error) + /* "talib/_abstract.pxi":335 + * + * @property + * def outputs(self): # <<<<<<<<<<<<<< + * """ + * Returns the TA function values for the currently set input_arrays and + */ __pyx_tuple__394 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_ret, __pyx_n_s_index); if (unlikely(!__pyx_tuple__394)) __PYX_ERR(1, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__394); __Pyx_GIVEREF(__pyx_tuple__394); __pyx_codeobj__395 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__394, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_outputs, 335, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__395)) __PYX_ERR(1, 335, __pyx_L1_error) + /* "talib/_abstract.pxi":365 + * return ret[0] if len(ret) == 1 else ret + * + * def run(self, input_arrays=None): # <<<<<<<<<<<<<< + * """ + * run([input_arrays=None]) + */ __pyx_tuple__396 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_input_arrays); if (unlikely(!__pyx_tuple__396)) __PYX_ERR(1, 365, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__396); __Pyx_GIVEREF(__pyx_tuple__396); @@ -67742,871 +102584,2089 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple__398); __Pyx_GIVEREF(__pyx_tuple__398); + /* "talib/_abstract.pxi":377 + * return self.outputs + * + * def __call__(self, *args, **kwargs): # <<<<<<<<<<<<<< + * """ + * func_instance([input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs]) + */ __pyx_tuple__399 = PyTuple_Pack(15, __pyx_n_s_self, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_opt_input_values, __pyx_n_s_price_series_name_values, __pyx_n_s_input_arrays, __pyx_n_s_input_price_series_names, __pyx_n_s_i, __pyx_n_s_arg, __pyx_n_s_msg, __pyx_n_s_no_existing_input_arrays, __pyx_n_s_param_name, __pyx_n_s_value, __pyx_n_s_input_name, __pyx_n_s_n); if (unlikely(!__pyx_tuple__399)) __PYX_ERR(1, 377, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__399); __Pyx_GIVEREF(__pyx_tuple__399); __pyx_codeobj__400 = (PyObject*)__Pyx_PyCode_New(1, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__399, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_call, 377, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__400)) __PYX_ERR(1, 377, __pyx_L1_error) + /* "talib/_abstract.pxi":442 + * + * # figure out which price series names we're using for inputs + * def __input_price_series_names(self): # <<<<<<<<<<<<<< + * input_price_series_names = [] + * for input_name in self.__input_names: + */ __pyx_tuple__401 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_input_price_series_names, __pyx_n_s_input_name, __pyx_n_s_price_series, __pyx_n_s_name); if (unlikely(!__pyx_tuple__401)) __PYX_ERR(1, 442, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__401); __Pyx_GIVEREF(__pyx_tuple__401); __pyx_codeobj__402 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__401, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_input_price_series_names_2, 442, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__402)) __PYX_ERR(1, 442, __pyx_L1_error) + /* "talib/_abstract.pxi":453 + * return input_price_series_names + * + * def __call_function(self): # <<<<<<<<<<<<<< + * input_price_series_names = self.__input_price_series_names() + * + */ __pyx_tuple__403 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_input_price_series_names, __pyx_n_s_args, __pyx_n_s_price_series, __pyx_n_s_series, __pyx_n_s_opt_input, __pyx_n_s_value, __pyx_n_s_results, __pyx_n_s_keys, __pyx_n_s_i, __pyx_n_s_output); if (unlikely(!__pyx_tuple__403)) __PYX_ERR(1, 453, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__403); __Pyx_GIVEREF(__pyx_tuple__403); __pyx_codeobj__404 = (PyObject*)__Pyx_PyCode_New(1, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__403, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_call_function, 453, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__404)) __PYX_ERR(1, 453, __pyx_L1_error) + /* "talib/_abstract.pxi":483 + * self.__outputs_valid = True + * + * def __check_opt_input_value(self, input_name, value): # <<<<<<<<<<<<<< + * type_ = self.__opt_inputs[input_name]['type'] + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: + */ __pyx_tuple__405 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_input_name, __pyx_n_s_value, __pyx_n_s_type); if (unlikely(!__pyx_tuple__405)) __PYX_ERR(1, 483, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__405); __Pyx_GIVEREF(__pyx_tuple__405); __pyx_codeobj__406 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__405, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_check_opt_input_value, 483, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__406)) __PYX_ERR(1, 483, __pyx_L1_error) + /* "talib/_abstract.pxi":498 + * return False + * + * def __get_opt_input_value(self, input_name): # <<<<<<<<<<<<<< + * """ + * Returns the user-set value if there is one, otherwise the default. + */ __pyx_tuple__407 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_input_name, __pyx_n_s_value); if (unlikely(!__pyx_tuple__407)) __PYX_ERR(1, 498, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__407); __Pyx_GIVEREF(__pyx_tuple__407); __pyx_codeobj__408 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__407, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_get_opt_input_value, 498, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__408)) __PYX_ERR(1, 498, __pyx_L1_error) + /* "talib/_abstract.pxi":507 + * return value + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return '%s' % self.info + * + */ __pyx_tuple__409 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__409)) __PYX_ERR(1, 507, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__409); __Pyx_GIVEREF(__pyx_tuple__409); __pyx_codeobj__410 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__409, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_repr, 507, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__410)) __PYX_ERR(1, 507, __pyx_L1_error) + /* "talib/_abstract.pxi":510 + * return '%s' % self.info + * + * def __unicode__(self): # <<<<<<<<<<<<<< + * return unicode(self.__str__()) + * + */ __pyx_tuple__411 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__411)) __PYX_ERR(1, 510, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__411); __Pyx_GIVEREF(__pyx_tuple__411); __pyx_codeobj__412 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__411, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_unicode, 510, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__412)) __PYX_ERR(1, 510, __pyx_L1_error) + /* "talib/_abstract.pxi":513 + * return unicode(self.__str__()) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return _get_defaults_and_docs(self.info)[1] # docstring includes defaults + * + */ __pyx_tuple__413 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__413)) __PYX_ERR(1, 513, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__413); __Pyx_GIVEREF(__pyx_tuple__413); __pyx_codeobj__414 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__413, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_str, 513, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__414)) __PYX_ERR(1, 513, __pyx_L1_error) + /* "talib/_abstract.pxi":527 + * # therefore recommended over using these functions directly. + * + * def _ta_getGroupTable(): # <<<<<<<<<<<<<< + * """ + * Returns the list of available TALIB function group names. *slow* + */ __pyx_tuple__415 = PyTuple_Pack(3, __pyx_n_s_table, __pyx_n_s_groups, __pyx_n_s_i); if (unlikely(!__pyx_tuple__415)) __PYX_ERR(1, 527, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__415); __Pyx_GIVEREF(__pyx_tuple__415); __pyx_codeobj__416 = (PyObject*)__Pyx_PyCode_New(0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__415, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_ta_getGroupTable, 527, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__416)) __PYX_ERR(1, 527, __pyx_L1_error) + /* "talib/_abstract.pxi":539 + * return groups + * + * def _ta_getFuncTable(char *group): # <<<<<<<<<<<<<< + * """ + * Returns a list of the functions for the specified group name. *slow* + */ __pyx_tuple__417 = PyTuple_Pack(5, __pyx_n_s_group, __pyx_n_s_group, __pyx_n_s_table, __pyx_n_s_functions, __pyx_n_s_i); if (unlikely(!__pyx_tuple__417)) __PYX_ERR(1, 539, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__417); __Pyx_GIVEREF(__pyx_tuple__417); __pyx_codeobj__418 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__417, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_ta_getFuncTable, 539, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__418)) __PYX_ERR(1, 539, __pyx_L1_error) + /* "talib/_abstract.pxi":551 + * return functions + * + * def __get_flags(int flag, dict flags_lookup_dict): # <<<<<<<<<<<<<< + * """ + * TA-LIB provides hints for multiple flags as a bitwise-ORed int. + */ __pyx_tuple__419 = PyTuple_Pack(7, __pyx_n_s_flag, __pyx_n_s_flags_lookup_dict, __pyx_n_s_value_range, __pyx_n_s_min_int, __pyx_n_s_max_int, __pyx_n_s_ret, __pyx_n_s_i); if (unlikely(!__pyx_tuple__419)) __PYX_ERR(1, 551, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__419); __Pyx_GIVEREF(__pyx_tuple__419); __pyx_codeobj__420 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__419, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_get_flags, 551, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__420)) __PYX_ERR(1, 551, __pyx_L1_error) + /* "talib/_abstract.pxi":610 + * } + * + * def _ta_getFuncInfo(char *function_name): # <<<<<<<<<<<<<< + * """ + * Returns the info dict for the function. It has the following keys: name, + */ __pyx_tuple__421 = PyTuple_Pack(4, __pyx_n_s_function_name, __pyx_n_s_function_name, __pyx_n_s_info, __pyx_n_s_retCode); if (unlikely(!__pyx_tuple__421)) __PYX_ERR(1, 610, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__421); __Pyx_GIVEREF(__pyx_tuple__421); __pyx_codeobj__422 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__421, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_ta_getFuncInfo, 610, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__422)) __PYX_ERR(1, 610, __pyx_L1_error) + /* "talib/_abstract.pxi":629 + * } + * + * def _ta_getInputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's input info dict for the given index. It has two + */ __pyx_tuple__423 = PyTuple_Pack(5, __pyx_n_s_function_name, __pyx_n_s_idx, __pyx_n_s_info, __pyx_n_s_retCode, __pyx_n_s_name); if (unlikely(!__pyx_tuple__423)) __PYX_ERR(1, 629, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__423); __Pyx_GIVEREF(__pyx_tuple__423); __pyx_codeobj__424 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__423, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_ta_getInputParameterInfo, 629, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__424)) __PYX_ERR(1, 629, __pyx_L1_error) + /* "talib/_abstract.pxi":650 + * } + * + * def _ta_getOptInputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's opt_input info dict for the given index. It has the + */ __pyx_tuple__425 = PyTuple_Pack(6, __pyx_n_s_function_name, __pyx_n_s_idx, __pyx_n_s_info, __pyx_n_s_retCode, __pyx_n_s_name, __pyx_n_s_default_value); if (unlikely(!__pyx_tuple__425)) __PYX_ERR(1, 650, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__425); __Pyx_GIVEREF(__pyx_tuple__425); __pyx_codeobj__426 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__425, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_ta_getOptInputParameterInfo, 650, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__426)) __PYX_ERR(1, 650, __pyx_L1_error) + /* "talib/_abstract.pxi":674 + * } + * + * def _ta_getOutputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's output info dict for the given index. It has two + */ __pyx_tuple__427 = PyTuple_Pack(5, __pyx_n_s_function_name, __pyx_n_s_idx, __pyx_n_s_info, __pyx_n_s_retCode, __pyx_n_s_name); if (unlikely(!__pyx_tuple__427)) __PYX_ERR(1, 674, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__427); __Pyx_GIVEREF(__pyx_tuple__427); __pyx_codeobj__428 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__427, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_ta_getOutputParameterInfo, 674, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__428)) __PYX_ERR(1, 674, __pyx_L1_error) + /* "talib/_abstract.pxi":694 + * } + * + * def _get_defaults_and_docs(func_info): # <<<<<<<<<<<<<< + * """ + * Returns a tuple with two outputs: defaults, a dict of parameter defaults, + */ __pyx_tuple__429 = PyTuple_Pack(13, __pyx_n_s_func_info, __pyx_n_s_defaults, __pyx_n_s_func_line, __pyx_n_s_func_args, __pyx_n_s_docs, __pyx_n_s_input_names, __pyx_n_s_input_name, __pyx_n_s_value, __pyx_n_s_params, __pyx_n_s_param, __pyx_n_s_outputs, __pyx_n_s_output, __pyx_n_s_documentation); if (unlikely(!__pyx_tuple__429)) __PYX_ERR(1, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__429); __Pyx_GIVEREF(__pyx_tuple__429); __pyx_codeobj__430 = (PyObject*)__Pyx_PyCode_New(1, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__429, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__abstract_pxi, __pyx_n_s_get_defaults_and_docs, 694, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__430)) __PYX_ERR(1, 694, __pyx_L1_error) + /* "talib/_stream.pxi":11 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ACOS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ACOS(real) + * + */ __pyx_tuple__431 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__431)) __PYX_ERR(3, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__431); __Pyx_GIVEREF(__pyx_tuple__431); __pyx_codeobj__432 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__431, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ACOS, 11, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__432)) __PYX_ERR(3, 11, __pyx_L1_error) + /* "talib/_stream.pxi":38 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ AD(high, low, close, volume) + * + */ __pyx_tuple__433 = PyTuple_Pack(13, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_volume, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_volume_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__433)) __PYX_ERR(3, 38, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__433); __Pyx_GIVEREF(__pyx_tuple__433); __pyx_codeobj__434 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__433, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_AD, 38, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__434)) __PYX_ERR(3, 38, __pyx_L1_error) + /* "talib/_stream.pxi":74 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADD( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ ADD(real0, real1) + * + */ __pyx_tuple__435 = PyTuple_Pack(9, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real0_data, __pyx_n_s_real1_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__435)) __PYX_ERR(3, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__435); __Pyx_GIVEREF(__pyx_tuple__435); __pyx_codeobj__436 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__435, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ADD, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__436)) __PYX_ERR(3, 74, __pyx_L1_error) + /* "talib/_stream.pxi":105 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?]) + * + */ __pyx_tuple__437 = PyTuple_Pack(15, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_volume, __pyx_n_s_fastperiod, __pyx_n_s_slowperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_volume_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__437)) __PYX_ERR(3, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__437); __Pyx_GIVEREF(__pyx_tuple__437); __pyx_codeobj__438 = (PyObject*)__Pyx_PyCode_New(6, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__437, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ADOSC, 105, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__438)) __PYX_ERR(3, 105, __pyx_L1_error) + /* "talib/_stream.pxi":144 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADX(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__439 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__439)) __PYX_ERR(3, 144, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__439); __Pyx_GIVEREF(__pyx_tuple__439); __pyx_codeobj__440 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__439, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ADX, 144, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__440)) __PYX_ERR(3, 144, __pyx_L1_error) + /* "talib/_stream.pxi":179 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADXR(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__441 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__441)) __PYX_ERR(3, 179, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__441); __Pyx_GIVEREF(__pyx_tuple__441); __pyx_codeobj__442 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__441, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ADXR, 179, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__442)) __PYX_ERR(3, 179, __pyx_L1_error) + /* "talib/_stream.pxi":214 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ APO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ __pyx_tuple__443 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_fastperiod, __pyx_n_s_slowperiod, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__443)) __PYX_ERR(3, 214, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__443); __Pyx_GIVEREF(__pyx_tuple__443); __pyx_codeobj__444 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__443, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_APO, 214, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__444)) __PYX_ERR(3, 214, __pyx_L1_error) + /* "talib/_stream.pxi":245 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROON(high, low[, timeperiod=?]) + * + */ __pyx_tuple__445 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outaroondown, __pyx_n_s_outaroonup); if (unlikely(!__pyx_tuple__445)) __PYX_ERR(3, 245, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__445); __Pyx_GIVEREF(__pyx_tuple__445); __pyx_codeobj__446 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__445, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_AROON, 245, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__446)) __PYX_ERR(3, 245, __pyx_L1_error) + /* "talib/_stream.pxi":280 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROONOSC(high, low[, timeperiod=?]) + * + */ __pyx_tuple__447 = PyTuple_Pack(10, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__447)) __PYX_ERR(3, 280, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__447); __Pyx_GIVEREF(__pyx_tuple__447); __pyx_codeobj__448 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__447, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_AROONOSC, 280, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__448)) __PYX_ERR(3, 280, __pyx_L1_error) + /* "talib/_stream.pxi":312 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ASIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ASIN(real) + * + */ __pyx_tuple__449 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__449)) __PYX_ERR(3, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__449); __Pyx_GIVEREF(__pyx_tuple__449); __pyx_codeobj__450 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__449, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ASIN, 312, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__450)) __PYX_ERR(3, 312, __pyx_L1_error) + /* "talib/_stream.pxi":339 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ATAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ATAN(real) + * + */ __pyx_tuple__451 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__451)) __PYX_ERR(3, 339, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__451); __Pyx_GIVEREF(__pyx_tuple__451); __pyx_codeobj__452 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__451, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ATAN, 339, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__452)) __PYX_ERR(3, 339, __pyx_L1_error) + /* "talib/_stream.pxi":366 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ATR(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__453 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__453)) __PYX_ERR(3, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__453); __Pyx_GIVEREF(__pyx_tuple__453); __pyx_codeobj__454 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__453, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ATR, 366, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__454)) __PYX_ERR(3, 366, __pyx_L1_error) + /* "talib/_stream.pxi":401 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ AVGPRICE(open, high, low, close) + * + */ __pyx_tuple__455 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__455)) __PYX_ERR(3, 401, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__455); __Pyx_GIVEREF(__pyx_tuple__455); __pyx_codeobj__456 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__455, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_AVGPRICE, 401, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__456)) __PYX_ERR(3, 401, __pyx_L1_error) + /* "talib/_stream.pxi":437 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ): # <<<<<<<<<<<<<< + * """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?]) + * + */ __pyx_tuple__457 = PyTuple_Pack(13, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_nbdevup, __pyx_n_s_nbdevdn, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outrealupperband, __pyx_n_s_outrealmiddleband, __pyx_n_s_outreallowerband); if (unlikely(!__pyx_tuple__457)) __PYX_ERR(3, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__457); __Pyx_GIVEREF(__pyx_tuple__457); __pyx_codeobj__458 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__457, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_BBANDS, 437, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__458)) __PYX_ERR(3, 437, __pyx_L1_error) + /* "talib/_stream.pxi":475 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ BETA(real0, real1[, timeperiod=?]) + * + */ __pyx_tuple__459 = PyTuple_Pack(10, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real0_data, __pyx_n_s_real1_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__459)) __PYX_ERR(3, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__459); __Pyx_GIVEREF(__pyx_tuple__459); __pyx_codeobj__460 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__459, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_BETA, 475, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__460)) __PYX_ERR(3, 475, __pyx_L1_error) + /* "talib/_stream.pxi":508 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ BOP(open, high, low, close) + * + */ __pyx_tuple__461 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__461)) __PYX_ERR(3, 508, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__461); __Pyx_GIVEREF(__pyx_tuple__461); __pyx_codeobj__462 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__461, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_BOP, 508, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__462)) __PYX_ERR(3, 508, __pyx_L1_error) + /* "talib/_stream.pxi":544 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CCI(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__463 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__463)) __PYX_ERR(3, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__463); __Pyx_GIVEREF(__pyx_tuple__463); __pyx_codeobj__464 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__463, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CCI, 544, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__464)) __PYX_ERR(3, 544, __pyx_L1_error) + /* "talib/_stream.pxi":579 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL2CROWS(open, high, low, close) + * + */ __pyx_tuple__465 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__465)) __PYX_ERR(3, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__465); __Pyx_GIVEREF(__pyx_tuple__465); __pyx_codeobj__466 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__465, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDL2CROWS, 579, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__466)) __PYX_ERR(3, 579, __pyx_L1_error) + /* "talib/_stream.pxi":615 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3BLACKCROWS(open, high, low, close) + * + */ __pyx_tuple__467 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__467)) __PYX_ERR(3, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__467); __Pyx_GIVEREF(__pyx_tuple__467); __pyx_codeobj__468 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__467, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDL3BLACKCROWS, 615, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__468)) __PYX_ERR(3, 615, __pyx_L1_error) + /* "talib/_stream.pxi":651 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3INSIDE(open, high, low, close) + * + */ __pyx_tuple__469 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__469)) __PYX_ERR(3, 651, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__469); __Pyx_GIVEREF(__pyx_tuple__469); __pyx_codeobj__470 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__469, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDL3INSIDE, 651, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__470)) __PYX_ERR(3, 651, __pyx_L1_error) + /* "talib/_stream.pxi":687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3LINESTRIKE(open, high, low, close) + * + */ __pyx_tuple__471 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__471)) __PYX_ERR(3, 687, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__471); __Pyx_GIVEREF(__pyx_tuple__471); __pyx_codeobj__472 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__471, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDL3LINESTRIKE, 687, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__472)) __PYX_ERR(3, 687, __pyx_L1_error) + /* "talib/_stream.pxi":723 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3OUTSIDE(open, high, low, close) + * + */ __pyx_tuple__473 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__473)) __PYX_ERR(3, 723, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__473); __Pyx_GIVEREF(__pyx_tuple__473); __pyx_codeobj__474 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__473, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDL3OUTSIDE, 723, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__474)) __PYX_ERR(3, 723, __pyx_L1_error) + /* "talib/_stream.pxi":759 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3STARSINSOUTH(open, high, low, close) + * + */ __pyx_tuple__475 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__475)) __PYX_ERR(3, 759, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__475); __Pyx_GIVEREF(__pyx_tuple__475); __pyx_codeobj__476 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__475, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDL3STARSINSOUTH, 759, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__476)) __PYX_ERR(3, 759, __pyx_L1_error) + /* "talib/_stream.pxi":795 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3WHITESOLDIERS(open, high, low, close) + * + */ __pyx_tuple__477 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__477)) __PYX_ERR(3, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__477); __Pyx_GIVEREF(__pyx_tuple__477); __pyx_codeobj__478 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__477, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDL3WHITESOLDIERS, 795, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__478)) __PYX_ERR(3, 795, __pyx_L1_error) + /* "talib/_stream.pxi":831 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLABANDONEDBABY(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__479 = PyTuple_Pack(14, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__479)) __PYX_ERR(3, 831, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__479); __Pyx_GIVEREF(__pyx_tuple__479); __pyx_codeobj__480 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__479, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLABANDONEDBABY, 831, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__480)) __PYX_ERR(3, 831, __pyx_L1_error) + /* "talib/_stream.pxi":869 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLADVANCEBLOCK(open, high, low, close) + * + */ __pyx_tuple__481 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__481)) __PYX_ERR(3, 869, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__481); __Pyx_GIVEREF(__pyx_tuple__481); __pyx_codeobj__482 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__481, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLADVANCEBLOCK, 869, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__482)) __PYX_ERR(3, 869, __pyx_L1_error) + /* "talib/_stream.pxi":905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBELTHOLD(open, high, low, close) + * + */ __pyx_tuple__483 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__483)) __PYX_ERR(3, 905, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__483); __Pyx_GIVEREF(__pyx_tuple__483); __pyx_codeobj__484 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__483, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLBELTHOLD, 905, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__484)) __PYX_ERR(3, 905, __pyx_L1_error) + /* "talib/_stream.pxi":941 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBREAKAWAY(open, high, low, close) + * + */ __pyx_tuple__485 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__485)) __PYX_ERR(3, 941, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__485); __Pyx_GIVEREF(__pyx_tuple__485); __pyx_codeobj__486 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__485, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLBREAKAWAY, 941, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__486)) __PYX_ERR(3, 941, __pyx_L1_error) + /* "talib/_stream.pxi":977 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCLOSINGMARUBOZU(open, high, low, close) + * + */ __pyx_tuple__487 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__487)) __PYX_ERR(3, 977, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__487); __Pyx_GIVEREF(__pyx_tuple__487); __pyx_codeobj__488 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__487, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLCLOSINGMARUBOZU, 977, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__488)) __PYX_ERR(3, 977, __pyx_L1_error) + /* "talib/_stream.pxi":1013 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCONCEALBABYSWALL(open, high, low, close) + * + */ __pyx_tuple__489 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__489)) __PYX_ERR(3, 1013, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__489); __Pyx_GIVEREF(__pyx_tuple__489); __pyx_codeobj__490 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__489, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLCONCEALBABYSWALL, 1013, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__490)) __PYX_ERR(3, 1013, __pyx_L1_error) + /* "talib/_stream.pxi":1049 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCOUNTERATTACK(open, high, low, close) + * + */ __pyx_tuple__491 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__491)) __PYX_ERR(3, 1049, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__491); __Pyx_GIVEREF(__pyx_tuple__491); __pyx_codeobj__492 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__491, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLCOUNTERATTACK, 1049, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__492)) __PYX_ERR(3, 1049, __pyx_L1_error) + /* "talib/_stream.pxi":1085 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__493 = PyTuple_Pack(14, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__493)) __PYX_ERR(3, 1085, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__493); __Pyx_GIVEREF(__pyx_tuple__493); __pyx_codeobj__494 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__493, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLDARKCLOUDCOVER, 1085, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__494)) __PYX_ERR(3, 1085, __pyx_L1_error) + /* "talib/_stream.pxi":1123 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJI(open, high, low, close) + * + */ __pyx_tuple__495 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__495)) __PYX_ERR(3, 1123, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__495); __Pyx_GIVEREF(__pyx_tuple__495); __pyx_codeobj__496 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__495, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLDOJI, 1123, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__496)) __PYX_ERR(3, 1123, __pyx_L1_error) + /* "talib/_stream.pxi":1159 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJISTAR(open, high, low, close) + * + */ __pyx_tuple__497 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__497)) __PYX_ERR(3, 1159, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__497); __Pyx_GIVEREF(__pyx_tuple__497); __pyx_codeobj__498 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__497, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLDOJISTAR, 1159, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__498)) __PYX_ERR(3, 1159, __pyx_L1_error) + /* "talib/_stream.pxi":1195 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDRAGONFLYDOJI(open, high, low, close) + * + */ __pyx_tuple__499 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__499)) __PYX_ERR(3, 1195, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__499); __Pyx_GIVEREF(__pyx_tuple__499); __pyx_codeobj__500 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__499, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLDRAGONFLYDOJI, 1195, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__500)) __PYX_ERR(3, 1195, __pyx_L1_error) + /* "talib/_stream.pxi":1231 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLENGULFING(open, high, low, close) + * + */ __pyx_tuple__501 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__501)) __PYX_ERR(3, 1231, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__501); __Pyx_GIVEREF(__pyx_tuple__501); __pyx_codeobj__502 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__501, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLENGULFING, 1231, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__502)) __PYX_ERR(3, 1231, __pyx_L1_error) + /* "talib/_stream.pxi":1267 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__503 = PyTuple_Pack(14, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__503)) __PYX_ERR(3, 1267, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__503); __Pyx_GIVEREF(__pyx_tuple__503); __pyx_codeobj__504 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__503, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLEVENINGDOJISTAR, 1267, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__504)) __PYX_ERR(3, 1267, __pyx_L1_error) + /* "talib/_stream.pxi":1305 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLEVENINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGSTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__505 = PyTuple_Pack(14, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__505)) __PYX_ERR(3, 1305, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__505); __Pyx_GIVEREF(__pyx_tuple__505); __pyx_codeobj__506 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__505, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLEVENINGSTAR, 1305, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__506)) __PYX_ERR(3, 1305, __pyx_L1_error) + /* "talib/_stream.pxi":1343 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLGAPSIDESIDEWHITE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGAPSIDESIDEWHITE(open, high, low, close) + * + */ __pyx_tuple__507 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__507)) __PYX_ERR(3, 1343, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__507); __Pyx_GIVEREF(__pyx_tuple__507); __pyx_codeobj__508 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__507, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLGAPSIDESIDEWHITE, 1343, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__508)) __PYX_ERR(3, 1343, __pyx_L1_error) + /* "talib/_stream.pxi":1379 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLGRAVESTONEDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGRAVESTONEDOJI(open, high, low, close) + * + */ __pyx_tuple__509 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__509)) __PYX_ERR(3, 1379, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__509); __Pyx_GIVEREF(__pyx_tuple__509); __pyx_codeobj__510 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__509, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLGRAVESTONEDOJI, 1379, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__510)) __PYX_ERR(3, 1379, __pyx_L1_error) + /* "talib/_stream.pxi":1415 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHAMMER(open, high, low, close) + * + */ __pyx_tuple__511 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__511)) __PYX_ERR(3, 1415, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__511); __Pyx_GIVEREF(__pyx_tuple__511); __pyx_codeobj__512 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__511, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLHAMMER, 1415, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__512)) __PYX_ERR(3, 1415, __pyx_L1_error) + /* "talib/_stream.pxi":1451 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHANGINGMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHANGINGMAN(open, high, low, close) + * + */ __pyx_tuple__513 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__513)) __PYX_ERR(3, 1451, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__513); __Pyx_GIVEREF(__pyx_tuple__513); __pyx_codeobj__514 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__513, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLHANGINGMAN, 1451, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__514)) __PYX_ERR(3, 1451, __pyx_L1_error) + /* "talib/_stream.pxi":1487 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHARAMI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMI(open, high, low, close) + * + */ __pyx_tuple__515 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__515)) __PYX_ERR(3, 1487, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__515); __Pyx_GIVEREF(__pyx_tuple__515); __pyx_codeobj__516 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__515, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLHARAMI, 1487, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__516)) __PYX_ERR(3, 1487, __pyx_L1_error) + /* "talib/_stream.pxi":1523 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHARAMICROSS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMICROSS(open, high, low, close) + * + */ __pyx_tuple__517 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__517)) __PYX_ERR(3, 1523, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__517); __Pyx_GIVEREF(__pyx_tuple__517); __pyx_codeobj__518 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__517, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLHARAMICROSS, 1523, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__518)) __PYX_ERR(3, 1523, __pyx_L1_error) + /* "talib/_stream.pxi":1559 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIGHWAVE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIGHWAVE(open, high, low, close) + * + */ __pyx_tuple__519 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__519)) __PYX_ERR(3, 1559, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__519); __Pyx_GIVEREF(__pyx_tuple__519); __pyx_codeobj__520 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__519, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLHIGHWAVE, 1559, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__520)) __PYX_ERR(3, 1559, __pyx_L1_error) + /* "talib/_stream.pxi":1595 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIKKAKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKE(open, high, low, close) + * + */ __pyx_tuple__521 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__521)) __PYX_ERR(3, 1595, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__521); __Pyx_GIVEREF(__pyx_tuple__521); __pyx_codeobj__522 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__521, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLHIKKAKE, 1595, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__522)) __PYX_ERR(3, 1595, __pyx_L1_error) + /* "talib/_stream.pxi":1631 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIKKAKEMOD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKEMOD(open, high, low, close) + * + */ __pyx_tuple__523 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__523)) __PYX_ERR(3, 1631, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__523); __Pyx_GIVEREF(__pyx_tuple__523); __pyx_codeobj__524 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__523, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLHIKKAKEMOD, 1631, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__524)) __PYX_ERR(3, 1631, __pyx_L1_error) + /* "talib/_stream.pxi":1667 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHOMINGPIGEON( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHOMINGPIGEON(open, high, low, close) + * + */ __pyx_tuple__525 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__525)) __PYX_ERR(3, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__525); __Pyx_GIVEREF(__pyx_tuple__525); __pyx_codeobj__526 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__525, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLHOMINGPIGEON, 1667, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__526)) __PYX_ERR(3, 1667, __pyx_L1_error) + /* "talib/_stream.pxi":1703 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLIDENTICAL3CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLIDENTICAL3CROWS(open, high, low, close) + * + */ __pyx_tuple__527 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__527)) __PYX_ERR(3, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__527); __Pyx_GIVEREF(__pyx_tuple__527); __pyx_codeobj__528 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__527, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLIDENTICAL3CROWS, 1703, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__528)) __PYX_ERR(3, 1703, __pyx_L1_error) + /* "talib/_stream.pxi":1739 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLINNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINNECK(open, high, low, close) + * + */ __pyx_tuple__529 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__529)) __PYX_ERR(3, 1739, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__529); __Pyx_GIVEREF(__pyx_tuple__529); __pyx_codeobj__530 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__529, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLINNECK, 1739, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__530)) __PYX_ERR(3, 1739, __pyx_L1_error) + /* "talib/_stream.pxi":1775 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLINVERTEDHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINVERTEDHAMMER(open, high, low, close) + * + */ __pyx_tuple__531 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__531)) __PYX_ERR(3, 1775, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__531); __Pyx_GIVEREF(__pyx_tuple__531); __pyx_codeobj__532 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__531, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLINVERTEDHAMMER, 1775, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__532)) __PYX_ERR(3, 1775, __pyx_L1_error) + /* "talib/_stream.pxi":1811 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLKICKING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKING(open, high, low, close) + * + */ __pyx_tuple__533 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__533)) __PYX_ERR(3, 1811, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__533); __Pyx_GIVEREF(__pyx_tuple__533); __pyx_codeobj__534 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__533, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLKICKING, 1811, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__534)) __PYX_ERR(3, 1811, __pyx_L1_error) + /* "talib/_stream.pxi":1847 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLKICKINGBYLENGTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKINGBYLENGTH(open, high, low, close) + * + */ __pyx_tuple__535 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__535)) __PYX_ERR(3, 1847, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__535); __Pyx_GIVEREF(__pyx_tuple__535); __pyx_codeobj__536 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__535, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLKICKINGBYLENGTH, 1847, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__536)) __PYX_ERR(3, 1847, __pyx_L1_error) + /* "talib/_stream.pxi":1883 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLADDERBOTTOM( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLADDERBOTTOM(open, high, low, close) + * + */ __pyx_tuple__537 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__537)) __PYX_ERR(3, 1883, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__537); __Pyx_GIVEREF(__pyx_tuple__537); __pyx_codeobj__538 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__537, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLLADDERBOTTOM, 1883, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__538)) __PYX_ERR(3, 1883, __pyx_L1_error) + /* "talib/_stream.pxi":1919 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLONGLEGGEDDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLEGGEDDOJI(open, high, low, close) + * + */ __pyx_tuple__539 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__539)) __PYX_ERR(3, 1919, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__539); __Pyx_GIVEREF(__pyx_tuple__539); __pyx_codeobj__540 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__539, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLLONGLEGGEDDOJI, 1919, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__540)) __PYX_ERR(3, 1919, __pyx_L1_error) + /* "talib/_stream.pxi":1955 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLONGLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLINE(open, high, low, close) + * + */ __pyx_tuple__541 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__541)) __PYX_ERR(3, 1955, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__541); __Pyx_GIVEREF(__pyx_tuple__541); __pyx_codeobj__542 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__541, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLLONGLINE, 1955, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__542)) __PYX_ERR(3, 1955, __pyx_L1_error) + /* "talib/_stream.pxi":1991 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMARUBOZU(open, high, low, close) + * + */ __pyx_tuple__543 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__543)) __PYX_ERR(3, 1991, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__543); __Pyx_GIVEREF(__pyx_tuple__543); __pyx_codeobj__544 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__543, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLMARUBOZU, 1991, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__544)) __PYX_ERR(3, 1991, __pyx_L1_error) + /* "talib/_stream.pxi":2027 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMATCHINGLOW( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMATCHINGLOW(open, high, low, close) + * + */ __pyx_tuple__545 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__545)) __PYX_ERR(3, 2027, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__545); __Pyx_GIVEREF(__pyx_tuple__545); __pyx_codeobj__546 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__545, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLMATCHINGLOW, 2027, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__546)) __PYX_ERR(3, 2027, __pyx_L1_error) + /* "talib/_stream.pxi":2063 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMATHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLMATHOLD(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__547 = PyTuple_Pack(14, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__547)) __PYX_ERR(3, 2063, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__547); __Pyx_GIVEREF(__pyx_tuple__547); __pyx_codeobj__548 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__547, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLMATHOLD, 2063, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__548)) __PYX_ERR(3, 2063, __pyx_L1_error) + /* "talib/_stream.pxi":2101 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMORNINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__549 = PyTuple_Pack(14, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__549)) __PYX_ERR(3, 2101, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__549); __Pyx_GIVEREF(__pyx_tuple__549); __pyx_codeobj__550 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__549, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLMORNINGDOJISTAR, 2101, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__550)) __PYX_ERR(3, 2101, __pyx_L1_error) + /* "talib/_stream.pxi":2139 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMORNINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGSTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_tuple__551 = PyTuple_Pack(14, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_penetration, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__551)) __PYX_ERR(3, 2139, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__551); __Pyx_GIVEREF(__pyx_tuple__551); __pyx_codeobj__552 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__551, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLMORNINGSTAR, 2139, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__552)) __PYX_ERR(3, 2139, __pyx_L1_error) + /* "talib/_stream.pxi":2177 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLONNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLONNECK(open, high, low, close) + * + */ __pyx_tuple__553 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__553)) __PYX_ERR(3, 2177, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__553); __Pyx_GIVEREF(__pyx_tuple__553); __pyx_codeobj__554 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__553, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLONNECK, 2177, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__554)) __PYX_ERR(3, 2177, __pyx_L1_error) + /* "talib/_stream.pxi":2213 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLPIERCING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLPIERCING(open, high, low, close) + * + */ __pyx_tuple__555 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__555)) __PYX_ERR(3, 2213, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__555); __Pyx_GIVEREF(__pyx_tuple__555); __pyx_codeobj__556 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__555, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLPIERCING, 2213, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__556)) __PYX_ERR(3, 2213, __pyx_L1_error) + /* "talib/_stream.pxi":2249 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLRICKSHAWMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRICKSHAWMAN(open, high, low, close) + * + */ __pyx_tuple__557 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__557)) __PYX_ERR(3, 2249, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__557); __Pyx_GIVEREF(__pyx_tuple__557); __pyx_codeobj__558 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__557, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLRICKSHAWMAN, 2249, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__558)) __PYX_ERR(3, 2249, __pyx_L1_error) + /* "talib/_stream.pxi":2285 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLRISEFALL3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRISEFALL3METHODS(open, high, low, close) + * + */ __pyx_tuple__559 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__559)) __PYX_ERR(3, 2285, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__559); __Pyx_GIVEREF(__pyx_tuple__559); __pyx_codeobj__560 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__559, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLRISEFALL3METHODS, 2285, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__560)) __PYX_ERR(3, 2285, __pyx_L1_error) + /* "talib/_stream.pxi":2321 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSEPARATINGLINES( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSEPARATINGLINES(open, high, low, close) + * + */ __pyx_tuple__561 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__561)) __PYX_ERR(3, 2321, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__561); __Pyx_GIVEREF(__pyx_tuple__561); __pyx_codeobj__562 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__561, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLSEPARATINGLINES, 2321, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__562)) __PYX_ERR(3, 2321, __pyx_L1_error) + /* "talib/_stream.pxi":2357 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSHOOTINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHOOTINGSTAR(open, high, low, close) + * + */ __pyx_tuple__563 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__563)) __PYX_ERR(3, 2357, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__563); __Pyx_GIVEREF(__pyx_tuple__563); __pyx_codeobj__564 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__563, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLSHOOTINGSTAR, 2357, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__564)) __PYX_ERR(3, 2357, __pyx_L1_error) + /* "talib/_stream.pxi":2393 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSHORTLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHORTLINE(open, high, low, close) + * + */ __pyx_tuple__565 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__565)) __PYX_ERR(3, 2393, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__565); __Pyx_GIVEREF(__pyx_tuple__565); __pyx_codeobj__566 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__565, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLSHORTLINE, 2393, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__566)) __PYX_ERR(3, 2393, __pyx_L1_error) + /* "talib/_stream.pxi":2429 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSPINNINGTOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSPINNINGTOP(open, high, low, close) + * + */ __pyx_tuple__567 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__567)) __PYX_ERR(3, 2429, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__567); __Pyx_GIVEREF(__pyx_tuple__567); __pyx_codeobj__568 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__567, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLSPINNINGTOP, 2429, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__568)) __PYX_ERR(3, 2429, __pyx_L1_error) + /* "talib/_stream.pxi":2465 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSTALLEDPATTERN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTALLEDPATTERN(open, high, low, close) + * + */ __pyx_tuple__569 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__569)) __PYX_ERR(3, 2465, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__569); __Pyx_GIVEREF(__pyx_tuple__569); __pyx_codeobj__570 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__569, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLSTALLEDPATTERN, 2465, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__570)) __PYX_ERR(3, 2465, __pyx_L1_error) + /* "talib/_stream.pxi":2501 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSTICKSANDWICH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTICKSANDWICH(open, high, low, close) + * + */ __pyx_tuple__571 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__571)) __PYX_ERR(3, 2501, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__571); __Pyx_GIVEREF(__pyx_tuple__571); __pyx_codeobj__572 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__571, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLSTICKSANDWICH, 2501, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__572)) __PYX_ERR(3, 2501, __pyx_L1_error) + /* "talib/_stream.pxi":2537 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTAKURI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTAKURI(open, high, low, close) + * + */ __pyx_tuple__573 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__573)) __PYX_ERR(3, 2537, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__573); __Pyx_GIVEREF(__pyx_tuple__573); __pyx_codeobj__574 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__573, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLTAKURI, 2537, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__574)) __PYX_ERR(3, 2537, __pyx_L1_error) + /* "talib/_stream.pxi":2573 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTASUKIGAP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTASUKIGAP(open, high, low, close) + * + */ __pyx_tuple__575 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__575)) __PYX_ERR(3, 2573, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__575); __Pyx_GIVEREF(__pyx_tuple__575); __pyx_codeobj__576 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__575, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLTASUKIGAP, 2573, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__576)) __PYX_ERR(3, 2573, __pyx_L1_error) + /* "talib/_stream.pxi":2609 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTHRUSTING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTHRUSTING(open, high, low, close) + * + */ __pyx_tuple__577 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__577)) __PYX_ERR(3, 2609, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__577); __Pyx_GIVEREF(__pyx_tuple__577); __pyx_codeobj__578 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__577, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLTHRUSTING, 2609, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__578)) __PYX_ERR(3, 2609, __pyx_L1_error) + /* "talib/_stream.pxi":2645 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTRISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTRISTAR(open, high, low, close) + * + */ __pyx_tuple__579 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__579)) __PYX_ERR(3, 2645, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__579); __Pyx_GIVEREF(__pyx_tuple__579); __pyx_codeobj__580 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__579, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLTRISTAR, 2645, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__580)) __PYX_ERR(3, 2645, __pyx_L1_error) + /* "talib/_stream.pxi":2681 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLUNIQUE3RIVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUNIQUE3RIVER(open, high, low, close) + * + */ __pyx_tuple__581 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__581)) __PYX_ERR(3, 2681, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__581); __Pyx_GIVEREF(__pyx_tuple__581); __pyx_codeobj__582 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__581, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLUNIQUE3RIVER, 2681, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__582)) __PYX_ERR(3, 2681, __pyx_L1_error) + /* "talib/_stream.pxi":2717 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLUPSIDEGAP2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUPSIDEGAP2CROWS(open, high, low, close) + * + */ __pyx_tuple__583 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__583)) __PYX_ERR(3, 2717, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__583); __Pyx_GIVEREF(__pyx_tuple__583); __pyx_codeobj__584 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__583, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLUPSIDEGAP2CROWS, 2717, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__584)) __PYX_ERR(3, 2717, __pyx_L1_error) + /* "talib/_stream.pxi":2753 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLXSIDEGAP3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLXSIDEGAP3METHODS(open, high, low, close) + * + */ __pyx_tuple__585 = PyTuple_Pack(13, __pyx_n_s_open, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_open_data, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__585)) __PYX_ERR(3, 2753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__585); __Pyx_GIVEREF(__pyx_tuple__585); __pyx_codeobj__586 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__585, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CDLXSIDEGAP3METHODS, 2753, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__586)) __PYX_ERR(3, 2753, __pyx_L1_error) + /* "talib/_stream.pxi":2789 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CEIL( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ CEIL(real) + * + */ __pyx_tuple__587 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__587)) __PYX_ERR(3, 2789, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__587); __Pyx_GIVEREF(__pyx_tuple__587); __pyx_codeobj__588 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__587, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CEIL, 2789, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__588)) __PYX_ERR(3, 2789, __pyx_L1_error) + /* "talib/_stream.pxi":2816 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CMO( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CMO(real[, timeperiod=?]) + * + */ __pyx_tuple__589 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__589)) __PYX_ERR(3, 2816, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__589); __Pyx_GIVEREF(__pyx_tuple__589); __pyx_codeobj__590 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__589, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CMO, 2816, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__590)) __PYX_ERR(3, 2816, __pyx_L1_error) + /* "talib/_stream.pxi":2845 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CORREL( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CORREL(real0, real1[, timeperiod=?]) + * + */ __pyx_tuple__591 = PyTuple_Pack(10, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real0_data, __pyx_n_s_real1_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__591)) __PYX_ERR(3, 2845, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__591); __Pyx_GIVEREF(__pyx_tuple__591); __pyx_codeobj__592 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__591, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_CORREL, 2845, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__592)) __PYX_ERR(3, 2845, __pyx_L1_error) + /* "talib/_stream.pxi":2878 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_COS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COS(real) + * + */ __pyx_tuple__593 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__593)) __PYX_ERR(3, 2878, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__593); __Pyx_GIVEREF(__pyx_tuple__593); __pyx_codeobj__594 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__593, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_COS, 2878, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__594)) __PYX_ERR(3, 2878, __pyx_L1_error) + /* "talib/_stream.pxi":2905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_COSH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COSH(real) + * + */ __pyx_tuple__595 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__595)) __PYX_ERR(3, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__595); __Pyx_GIVEREF(__pyx_tuple__595); __pyx_codeobj__596 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__595, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_COSH, 2905, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__596)) __PYX_ERR(3, 2905, __pyx_L1_error) + /* "talib/_stream.pxi":2932 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DEMA(real[, timeperiod=?]) + * + */ __pyx_tuple__597 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__597)) __PYX_ERR(3, 2932, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__597); __Pyx_GIVEREF(__pyx_tuple__597); __pyx_codeobj__598 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__597, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_DEMA, 2932, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__598)) __PYX_ERR(3, 2932, __pyx_L1_error) + /* "talib/_stream.pxi":2961 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DIV( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ DIV(real0, real1) + * + */ __pyx_tuple__599 = PyTuple_Pack(9, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real0_data, __pyx_n_s_real1_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__599)) __PYX_ERR(3, 2961, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__599); __Pyx_GIVEREF(__pyx_tuple__599); __pyx_codeobj__600 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__599, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_DIV, 2961, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__600)) __PYX_ERR(3, 2961, __pyx_L1_error) + /* "talib/_stream.pxi":2992 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DX(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__601 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__601)) __PYX_ERR(3, 2992, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__601); __Pyx_GIVEREF(__pyx_tuple__601); __pyx_codeobj__602 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__601, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_DX, 2992, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__602)) __PYX_ERR(3, 2992, __pyx_L1_error) + /* "talib/_stream.pxi":3027 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_EMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ EMA(real[, timeperiod=?]) + * + */ __pyx_tuple__603 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__603)) __PYX_ERR(3, 3027, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__603); __Pyx_GIVEREF(__pyx_tuple__603); __pyx_codeobj__604 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__603, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_EMA, 3027, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__604)) __PYX_ERR(3, 3027, __pyx_L1_error) + /* "talib/_stream.pxi":3056 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_EXP( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ EXP(real) + * + */ __pyx_tuple__605 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__605)) __PYX_ERR(3, 3056, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__605); __Pyx_GIVEREF(__pyx_tuple__605); __pyx_codeobj__606 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__605, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_EXP, 3056, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__606)) __PYX_ERR(3, 3056, __pyx_L1_error) + /* "talib/_stream.pxi":3083 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_FLOOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ FLOOR(real) + * + */ __pyx_tuple__607 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__607)) __PYX_ERR(3, 3083, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__607); __Pyx_GIVEREF(__pyx_tuple__607); __pyx_codeobj__608 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__607, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_FLOOR, 3083, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__608)) __PYX_ERR(3, 3083, __pyx_L1_error) + /* "talib/_stream.pxi":3110 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_DCPERIOD( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPERIOD(real) + * + */ __pyx_tuple__609 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__609)) __PYX_ERR(3, 3110, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__609); __Pyx_GIVEREF(__pyx_tuple__609); __pyx_codeobj__610 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__609, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_HT_DCPERIOD, 3110, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__610)) __PYX_ERR(3, 3110, __pyx_L1_error) + /* "talib/_stream.pxi":3137 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_DCPHASE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPHASE(real) + * + */ __pyx_tuple__611 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__611)) __PYX_ERR(3, 3137, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__611); __Pyx_GIVEREF(__pyx_tuple__611); __pyx_codeobj__612 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__611, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_HT_DCPHASE, 3137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__612)) __PYX_ERR(3, 3137, __pyx_L1_error) + /* "talib/_stream.pxi":3164 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_PHASOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_PHASOR(real) + * + */ __pyx_tuple__613 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinphase, __pyx_n_s_outquadrature); if (unlikely(!__pyx_tuple__613)) __PYX_ERR(3, 3164, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__613); __Pyx_GIVEREF(__pyx_tuple__613); __pyx_codeobj__614 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__613, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_HT_PHASOR, 3164, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__614)) __PYX_ERR(3, 3164, __pyx_L1_error) + /* "talib/_stream.pxi":3194 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_SINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_SINE(real) + * + */ __pyx_tuple__615 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outsine, __pyx_n_s_outleadsine); if (unlikely(!__pyx_tuple__615)) __PYX_ERR(3, 3194, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__615); __Pyx_GIVEREF(__pyx_tuple__615); __pyx_codeobj__616 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__615, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_HT_SINE, 3194, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__616)) __PYX_ERR(3, 3194, __pyx_L1_error) + /* "talib/_stream.pxi":3224 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_TRENDLINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDLINE(real) + * + */ __pyx_tuple__617 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__617)) __PYX_ERR(3, 3224, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__617); __Pyx_GIVEREF(__pyx_tuple__617); __pyx_codeobj__618 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__617, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_HT_TRENDLINE, 3224, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__618)) __PYX_ERR(3, 3224, __pyx_L1_error) + /* "talib/_stream.pxi":3251 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_TRENDMODE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDMODE(real) + * + */ __pyx_tuple__619 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__619)) __PYX_ERR(3, 3251, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__619); __Pyx_GIVEREF(__pyx_tuple__619); __pyx_codeobj__620 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__619, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_HT_TRENDMODE, 3251, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__620)) __PYX_ERR(3, 3251, __pyx_L1_error) + /* "talib/_stream.pxi":3278 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_KAMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ KAMA(real[, timeperiod=?]) + * + */ __pyx_tuple__621 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__621)) __PYX_ERR(3, 3278, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__621); __Pyx_GIVEREF(__pyx_tuple__621); __pyx_codeobj__622 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__621, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_KAMA, 3278, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__622)) __PYX_ERR(3, 3278, __pyx_L1_error) + /* "talib/_stream.pxi":3307 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG(real[, timeperiod=?]) + * + */ __pyx_tuple__623 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__623)) __PYX_ERR(3, 3307, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__623); __Pyx_GIVEREF(__pyx_tuple__623); __pyx_codeobj__624 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__623, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_LINEARREG, 3307, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__624)) __PYX_ERR(3, 3307, __pyx_L1_error) + /* "talib/_stream.pxi":3336 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_ANGLE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_ANGLE(real[, timeperiod=?]) + * + */ __pyx_tuple__625 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__625)) __PYX_ERR(3, 3336, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__625); __Pyx_GIVEREF(__pyx_tuple__625); __pyx_codeobj__626 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__625, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_LINEARREG_ANGLE, 3336, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__626)) __PYX_ERR(3, 3336, __pyx_L1_error) + /* "talib/_stream.pxi":3365 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_INTERCEPT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_INTERCEPT(real[, timeperiod=?]) + * + */ __pyx_tuple__627 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__627)) __PYX_ERR(3, 3365, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__627); __Pyx_GIVEREF(__pyx_tuple__627); __pyx_codeobj__628 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__627, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_LINEARREG_INTERCEPT, 3365, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__628)) __PYX_ERR(3, 3365, __pyx_L1_error) + /* "talib/_stream.pxi":3394 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_SLOPE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_SLOPE(real[, timeperiod=?]) + * + */ __pyx_tuple__629 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__629)) __PYX_ERR(3, 3394, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__629); __Pyx_GIVEREF(__pyx_tuple__629); __pyx_codeobj__630 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__629, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_LINEARREG_SLOPE, 3394, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__630)) __PYX_ERR(3, 3394, __pyx_L1_error) + /* "talib/_stream.pxi":3423 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LN(real) + * + */ __pyx_tuple__631 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__631)) __PYX_ERR(3, 3423, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__631); __Pyx_GIVEREF(__pyx_tuple__631); __pyx_codeobj__632 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__631, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_LN, 3423, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__632)) __PYX_ERR(3, 3423, __pyx_L1_error) + /* "talib/_stream.pxi":3450 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LOG10( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LOG10(real) + * + */ __pyx_tuple__633 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__633)) __PYX_ERR(3, 3450, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__633); __Pyx_GIVEREF(__pyx_tuple__633); __pyx_codeobj__634 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__633, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_LOG10, 3450, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__634)) __PYX_ERR(3, 3450, __pyx_L1_error) + /* "talib/_stream.pxi":3477 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MA( np.ndarray real not None , int timeperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MA(real[, timeperiod=?, matype=?]) + * + */ __pyx_tuple__635 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__635)) __PYX_ERR(3, 3477, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__635); __Pyx_GIVEREF(__pyx_tuple__635); __pyx_codeobj__636 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__635, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MA, 3477, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__636)) __PYX_ERR(3, 3477, __pyx_L1_error) + /* "talib/_stream.pxi":3507 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACD( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACD(real[, fastperiod=?, slowperiod=?, signalperiod=?]) + * + */ __pyx_tuple__637 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_fastperiod, __pyx_n_s_slowperiod, __pyx_n_s_signalperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmacd, __pyx_n_s_outmacdsignal, __pyx_n_s_outmacdhist); if (unlikely(!__pyx_tuple__637)) __PYX_ERR(3, 3507, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__637); __Pyx_GIVEREF(__pyx_tuple__637); __pyx_codeobj__638 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__637, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MACD, 3507, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__638)) __PYX_ERR(3, 3507, __pyx_L1_error) + /* "talib/_stream.pxi":3544 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACDEXT( np.ndarray real not None , int fastperiod=-2**31 , int fastmatype=0 , int slowperiod=-2**31 , int slowmatype=0 , int signalperiod=-2**31 , int signalmatype=0 ): # <<<<<<<<<<<<<< + * """ MACDEXT(real[, fastperiod=?, fastmatype=?, slowperiod=?, slowmatype=?, signalperiod=?, signalmatype=?]) + * + */ __pyx_tuple__639 = PyTuple_Pack(15, __pyx_n_s_real, __pyx_n_s_fastperiod, __pyx_n_s_fastmatype, __pyx_n_s_slowperiod, __pyx_n_s_slowmatype, __pyx_n_s_signalperiod, __pyx_n_s_signalmatype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmacd, __pyx_n_s_outmacdsignal, __pyx_n_s_outmacdhist); if (unlikely(!__pyx_tuple__639)) __PYX_ERR(3, 3544, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__639); __Pyx_GIVEREF(__pyx_tuple__639); __pyx_codeobj__640 = (PyObject*)__Pyx_PyCode_New(7, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__639, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MACDEXT, 3544, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__640)) __PYX_ERR(3, 3544, __pyx_L1_error) + /* "talib/_stream.pxi":3584 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACDFIX( np.ndarray real not None , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACDFIX(real[, signalperiod=?]) + * + */ __pyx_tuple__641 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_signalperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmacd, __pyx_n_s_outmacdsignal, __pyx_n_s_outmacdhist); if (unlikely(!__pyx_tuple__641)) __PYX_ERR(3, 3584, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__641); __Pyx_GIVEREF(__pyx_tuple__641); __pyx_codeobj__642 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__641, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MACDFIX, 3584, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__642)) __PYX_ERR(3, 3584, __pyx_L1_error) + /* "talib/_stream.pxi":3619 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAMA( np.ndarray real not None , double fastlimit=-4e37 , double slowlimit=-4e37 ): # <<<<<<<<<<<<<< + * """ MAMA(real[, fastlimit=?, slowlimit=?]) + * + */ __pyx_tuple__643 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_fastlimit, __pyx_n_s_slowlimit, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmama, __pyx_n_s_outfama); if (unlikely(!__pyx_tuple__643)) __PYX_ERR(3, 3619, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__643); __Pyx_GIVEREF(__pyx_tuple__643); __pyx_codeobj__644 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__643, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MAMA, 3619, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__644)) __PYX_ERR(3, 3619, __pyx_L1_error) + /* "talib/_stream.pxi":3652 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAVP( np.ndarray real not None , np.ndarray periods not None , int minperiod=-2**31 , int maxperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MAVP(real, periods[, minperiod=?, maxperiod=?, matype=?]) + * + */ __pyx_tuple__645 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_periods, __pyx_n_s_minperiod, __pyx_n_s_maxperiod, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_periods_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__645)) __PYX_ERR(3, 3652, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__645); __Pyx_GIVEREF(__pyx_tuple__645); __pyx_codeobj__646 = (PyObject*)__Pyx_PyCode_New(5, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__645, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MAVP, 3652, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__646)) __PYX_ERR(3, 3652, __pyx_L1_error) + /* "talib/_stream.pxi":3687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAX(real[, timeperiod=?]) + * + */ __pyx_tuple__647 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__647)) __PYX_ERR(3, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__647); __Pyx_GIVEREF(__pyx_tuple__647); __pyx_codeobj__648 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__647, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MAX, 3687, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__648)) __PYX_ERR(3, 3687, __pyx_L1_error) + /* "talib/_stream.pxi":3716 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAXINDEX(real[, timeperiod=?]) + * + */ __pyx_tuple__649 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__649)) __PYX_ERR(3, 3716, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__649); __Pyx_GIVEREF(__pyx_tuple__649); __pyx_codeobj__650 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__649, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MAXINDEX, 3716, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__650)) __PYX_ERR(3, 3716, __pyx_L1_error) + /* "talib/_stream.pxi":3745 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MEDPRICE( np.ndarray high not None , np.ndarray low not None ): # <<<<<<<<<<<<<< + * """ MEDPRICE(high, low) + * + */ __pyx_tuple__651 = PyTuple_Pack(9, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__651)) __PYX_ERR(3, 3745, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__651); __Pyx_GIVEREF(__pyx_tuple__651); __pyx_codeobj__652 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__651, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MEDPRICE, 3745, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__652)) __PYX_ERR(3, 3745, __pyx_L1_error) + /* "talib/_stream.pxi":3775 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MFI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MFI(high, low, close, volume[, timeperiod=?]) + * + */ __pyx_tuple__653 = PyTuple_Pack(14, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_volume, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_volume_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__653)) __PYX_ERR(3, 3775, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__653); __Pyx_GIVEREF(__pyx_tuple__653); __pyx_codeobj__654 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__653, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MFI, 3775, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__654)) __PYX_ERR(3, 3775, __pyx_L1_error) + /* "talib/_stream.pxi":3813 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIDPOINT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPOINT(real[, timeperiod=?]) + * + */ __pyx_tuple__655 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__655)) __PYX_ERR(3, 3813, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__655); __Pyx_GIVEREF(__pyx_tuple__655); __pyx_codeobj__656 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__655, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MIDPOINT, 3813, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__656)) __PYX_ERR(3, 3813, __pyx_L1_error) + /* "talib/_stream.pxi":3842 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIDPRICE( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPRICE(high, low[, timeperiod=?]) + * + */ __pyx_tuple__657 = PyTuple_Pack(10, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__657)) __PYX_ERR(3, 3842, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__657); __Pyx_GIVEREF(__pyx_tuple__657); __pyx_codeobj__658 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__657, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MIDPRICE, 3842, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__658)) __PYX_ERR(3, 3842, __pyx_L1_error) + /* "talib/_stream.pxi":3874 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIN( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIN(real[, timeperiod=?]) + * + */ __pyx_tuple__659 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__659)) __PYX_ERR(3, 3874, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__659); __Pyx_GIVEREF(__pyx_tuple__659); __pyx_codeobj__660 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__659, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MIN, 3874, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__660)) __PYX_ERR(3, 3874, __pyx_L1_error) + /* "talib/_stream.pxi":3903 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MININDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MININDEX(real[, timeperiod=?]) + * + */ __pyx_tuple__661 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outinteger); if (unlikely(!__pyx_tuple__661)) __PYX_ERR(3, 3903, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__661); __Pyx_GIVEREF(__pyx_tuple__661); __pyx_codeobj__662 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__661, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MININDEX, 3903, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__662)) __PYX_ERR(3, 3903, __pyx_L1_error) + /* "talib/_stream.pxi":3932 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINMAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAX(real[, timeperiod=?]) + * + */ __pyx_tuple__663 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outmin, __pyx_n_s_outmax); if (unlikely(!__pyx_tuple__663)) __PYX_ERR(3, 3932, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__663); __Pyx_GIVEREF(__pyx_tuple__663); __pyx_codeobj__664 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__663, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MINMAX, 3932, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__664)) __PYX_ERR(3, 3932, __pyx_L1_error) + /* "talib/_stream.pxi":3964 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINMAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAXINDEX(real[, timeperiod=?]) + * + */ __pyx_tuple__665 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outminidx, __pyx_n_s_outmaxidx); if (unlikely(!__pyx_tuple__665)) __PYX_ERR(3, 3964, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__665); __Pyx_GIVEREF(__pyx_tuple__665); __pyx_codeobj__666 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__665, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MINMAXINDEX, 3964, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__666)) __PYX_ERR(3, 3964, __pyx_L1_error) + /* "talib/_stream.pxi":3996 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DI(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__667 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__667)) __PYX_ERR(3, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__667); __Pyx_GIVEREF(__pyx_tuple__667); __pyx_codeobj__668 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__667, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MINUS_DI, 3996, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__668)) __PYX_ERR(3, 3996, __pyx_L1_error) + /* "talib/_stream.pxi":4031 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DM(high, low[, timeperiod=?]) + * + */ __pyx_tuple__669 = PyTuple_Pack(10, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__669)) __PYX_ERR(3, 4031, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__669); __Pyx_GIVEREF(__pyx_tuple__669); __pyx_codeobj__670 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__669, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MINUS_DM, 4031, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__670)) __PYX_ERR(3, 4031, __pyx_L1_error) + /* "talib/_stream.pxi":4063 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MOM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MOM(real[, timeperiod=?]) + * + */ __pyx_tuple__671 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__671)) __PYX_ERR(3, 4063, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__671); __Pyx_GIVEREF(__pyx_tuple__671); __pyx_codeobj__672 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__671, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MOM, 4063, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__672)) __PYX_ERR(3, 4063, __pyx_L1_error) + /* "talib/_stream.pxi":4092 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MULT( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ MULT(real0, real1) + * + */ __pyx_tuple__673 = PyTuple_Pack(9, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real0_data, __pyx_n_s_real1_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__673)) __PYX_ERR(3, 4092, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__673); __Pyx_GIVEREF(__pyx_tuple__673); __pyx_codeobj__674 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__673, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_MULT, 4092, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__674)) __PYX_ERR(3, 4092, __pyx_L1_error) + /* "talib/_stream.pxi":4123 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_NATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ NATR(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__675 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__675)) __PYX_ERR(3, 4123, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__675); __Pyx_GIVEREF(__pyx_tuple__675); __pyx_codeobj__676 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__675, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_NATR, 4123, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__676)) __PYX_ERR(3, 4123, __pyx_L1_error) + /* "talib/_stream.pxi":4158 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_OBV( np.ndarray real not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ OBV(real, volume) + * + */ __pyx_tuple__677 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_volume, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_volume_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__677)) __PYX_ERR(3, 4158, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__677); __Pyx_GIVEREF(__pyx_tuple__677); __pyx_codeobj__678 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__677, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_OBV, 4158, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__678)) __PYX_ERR(3, 4158, __pyx_L1_error) + /* "talib/_stream.pxi":4189 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PLUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DI(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__679 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__679)) __PYX_ERR(3, 4189, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__679); __Pyx_GIVEREF(__pyx_tuple__679); __pyx_codeobj__680 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__679, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_PLUS_DI, 4189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__680)) __PYX_ERR(3, 4189, __pyx_L1_error) + /* "talib/_stream.pxi":4224 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PLUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DM(high, low[, timeperiod=?]) + * + */ __pyx_tuple__681 = PyTuple_Pack(10, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__681)) __PYX_ERR(3, 4224, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__681); __Pyx_GIVEREF(__pyx_tuple__681); __pyx_codeobj__682 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__681, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_PLUS_DM, 4224, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__682)) __PYX_ERR(3, 4224, __pyx_L1_error) + /* "talib/_stream.pxi":4256 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PPO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ PPO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ __pyx_tuple__683 = PyTuple_Pack(10, __pyx_n_s_real, __pyx_n_s_fastperiod, __pyx_n_s_slowperiod, __pyx_n_s_matype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__683)) __PYX_ERR(3, 4256, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__683); __Pyx_GIVEREF(__pyx_tuple__683); __pyx_codeobj__684 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__683, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_PPO, 4256, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__684)) __PYX_ERR(3, 4256, __pyx_L1_error) + /* "talib/_stream.pxi":4287 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROC( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROC(real[, timeperiod=?]) + * + */ __pyx_tuple__685 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__685)) __PYX_ERR(3, 4287, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__685); __Pyx_GIVEREF(__pyx_tuple__685); __pyx_codeobj__686 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__685, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ROC, 4287, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__686)) __PYX_ERR(3, 4287, __pyx_L1_error) + /* "talib/_stream.pxi":4316 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCP( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCP(real[, timeperiod=?]) + * + */ __pyx_tuple__687 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__687)) __PYX_ERR(3, 4316, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__687); __Pyx_GIVEREF(__pyx_tuple__687); __pyx_codeobj__688 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__687, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ROCP, 4316, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__688)) __PYX_ERR(3, 4316, __pyx_L1_error) + /* "talib/_stream.pxi":4345 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCR( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR(real[, timeperiod=?]) + * + */ __pyx_tuple__689 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__689)) __PYX_ERR(3, 4345, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__689); __Pyx_GIVEREF(__pyx_tuple__689); __pyx_codeobj__690 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__689, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ROCR, 4345, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__690)) __PYX_ERR(3, 4345, __pyx_L1_error) + /* "talib/_stream.pxi":4374 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCR100( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR100(real[, timeperiod=?]) + * + */ __pyx_tuple__691 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__691)) __PYX_ERR(3, 4374, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__691); __Pyx_GIVEREF(__pyx_tuple__691); __pyx_codeobj__692 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__691, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ROCR100, 4374, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__692)) __PYX_ERR(3, 4374, __pyx_L1_error) + /* "talib/_stream.pxi":4403 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_RSI( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ RSI(real[, timeperiod=?]) + * + */ __pyx_tuple__693 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__693)) __PYX_ERR(3, 4403, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__693); __Pyx_GIVEREF(__pyx_tuple__693); __pyx_codeobj__694 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__693, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_RSI, 4403, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__694)) __PYX_ERR(3, 4403, __pyx_L1_error) + /* "talib/_stream.pxi":4432 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SAR( np.ndarray high not None , np.ndarray low not None , double acceleration=0.02 , double maximum=0.2 ): # <<<<<<<<<<<<<< + * """ SAR(high, low[, acceleration=?, maximum=?]) + * + */ __pyx_tuple__695 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_acceleration, __pyx_n_s_maximum, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__695)) __PYX_ERR(3, 4432, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__695); __Pyx_GIVEREF(__pyx_tuple__695); __pyx_codeobj__696 = (PyObject*)__Pyx_PyCode_New(4, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__695, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_SAR, 4432, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__696)) __PYX_ERR(3, 4432, __pyx_L1_error) + /* "talib/_stream.pxi":4465 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SAREXT( np.ndarray high not None , np.ndarray low not None , double startvalue=-4e37 , double offsetonreverse=-4e37 , double accelerationinitlong=-4e37 , double accelerationlong=-4e37 , double accelerationmaxlong=-4e37 , double accelerationinitshort=-4e37 , double accelerationshort=-4e37 , double accelerationmaxshort=-4e37 ): # <<<<<<<<<<<<<< + * """ SAREXT(high, low[, startvalue=?, offsetonreverse=?, accelerationinitlong=?, accelerationlong=?, accelerationmaxlong=?, accelerationinitshort=?, accelerationshort=?, accelerationmaxshort=?]) + * + */ __pyx_tuple__697 = PyTuple_Pack(17, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_startvalue, __pyx_n_s_offsetonreverse, __pyx_n_s_accelerationinitlong, __pyx_n_s_accelerationlong, __pyx_n_s_accelerationmaxlong, __pyx_n_s_accelerationinitshort, __pyx_n_s_accelerationshort, __pyx_n_s_accelerationmaxshort, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__697)) __PYX_ERR(3, 4465, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__697); __Pyx_GIVEREF(__pyx_tuple__697); __pyx_codeobj__698 = (PyObject*)__Pyx_PyCode_New(10, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__697, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_SAREXT, 4465, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__698)) __PYX_ERR(3, 4465, __pyx_L1_error) + /* "talib/_stream.pxi":4504 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SIN(real) + * + */ __pyx_tuple__699 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__699)) __PYX_ERR(3, 4504, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__699); __Pyx_GIVEREF(__pyx_tuple__699); __pyx_codeobj__700 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__699, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_SIN, 4504, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__700)) __PYX_ERR(3, 4504, __pyx_L1_error) + /* "talib/_stream.pxi":4531 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SINH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SINH(real) + * + */ __pyx_tuple__701 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__701)) __PYX_ERR(3, 4531, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__701); __Pyx_GIVEREF(__pyx_tuple__701); __pyx_codeobj__702 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__701, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_SINH, 4531, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__702)) __PYX_ERR(3, 4531, __pyx_L1_error) + /* "talib/_stream.pxi":4558 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SMA(real[, timeperiod=?]) + * + */ __pyx_tuple__703 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__703)) __PYX_ERR(3, 4558, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__703); __Pyx_GIVEREF(__pyx_tuple__703); __pyx_codeobj__704 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__703, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_SMA, 4558, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__704)) __PYX_ERR(3, 4558, __pyx_L1_error) + /* "talib/_stream.pxi":4587 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SQRT( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SQRT(real) + * + */ __pyx_tuple__705 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__705)) __PYX_ERR(3, 4587, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__705); __Pyx_GIVEREF(__pyx_tuple__705); __pyx_codeobj__706 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__705, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_SQRT, 4587, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__706)) __PYX_ERR(3, 4587, __pyx_L1_error) + /* "talib/_stream.pxi":4614 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STDDEV( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ STDDEV(real[, timeperiod=?, nbdev=?]) + * + */ __pyx_tuple__707 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_nbdev, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__707)) __PYX_ERR(3, 4614, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__707); __Pyx_GIVEREF(__pyx_tuple__707); __pyx_codeobj__708 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__707, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_STDDEV, 4614, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__708)) __PYX_ERR(3, 4614, __pyx_L1_error) + /* "talib/_stream.pxi":4644 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCH( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int slowk_period=-2**31 , int slowk_matype=0 , int slowd_period=-2**31 , int slowd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?]) + * + */ __pyx_tuple__709 = PyTuple_Pack(17, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_fastk_period, __pyx_n_s_slowk_period, __pyx_n_s_slowk_matype, __pyx_n_s_slowd_period, __pyx_n_s_slowd_matype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outslowk, __pyx_n_s_outslowd); if (unlikely(!__pyx_tuple__709)) __PYX_ERR(3, 4644, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__709); __Pyx_GIVEREF(__pyx_tuple__709); __pyx_codeobj__710 = (PyObject*)__Pyx_PyCode_New(8, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__709, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_STOCH, 4644, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__710)) __PYX_ERR(3, 4644, __pyx_L1_error) + /* "talib/_stream.pxi":4686 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCHF( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ __pyx_tuple__711 = PyTuple_Pack(15, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_fastk_period, __pyx_n_s_fastd_period, __pyx_n_s_fastd_matype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outfastk, __pyx_n_s_outfastd); if (unlikely(!__pyx_tuple__711)) __PYX_ERR(3, 4686, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__711); __Pyx_GIVEREF(__pyx_tuple__711); __pyx_codeobj__712 = (PyObject*)__Pyx_PyCode_New(6, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__711, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_STOCHF, 4686, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__712)) __PYX_ERR(3, 4686, __pyx_L1_error) + /* "talib/_stream.pxi":4726 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCHRSI( np.ndarray real not None , int timeperiod=-2**31 , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHRSI(real[, timeperiod=?, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ __pyx_tuple__713 = PyTuple_Pack(12, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_fastk_period, __pyx_n_s_fastd_period, __pyx_n_s_fastd_matype, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outfastk, __pyx_n_s_outfastd); if (unlikely(!__pyx_tuple__713)) __PYX_ERR(3, 4726, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__713); __Pyx_GIVEREF(__pyx_tuple__713); __pyx_codeobj__714 = (PyObject*)__Pyx_PyCode_New(5, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__713, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_STOCHRSI, 4726, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__714)) __PYX_ERR(3, 4726, __pyx_L1_error) + /* "talib/_stream.pxi":4761 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SUB( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ SUB(real0, real1) + * + */ __pyx_tuple__715 = PyTuple_Pack(9, __pyx_n_s_real0, __pyx_n_s_real1, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real0_data, __pyx_n_s_real1_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__715)) __PYX_ERR(3, 4761, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__715); __Pyx_GIVEREF(__pyx_tuple__715); __pyx_codeobj__716 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__715, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_SUB, 4761, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__716)) __PYX_ERR(3, 4761, __pyx_L1_error) + /* "talib/_stream.pxi":4792 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SUM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SUM(real[, timeperiod=?]) + * + */ __pyx_tuple__717 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__717)) __PYX_ERR(3, 4792, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__717); __Pyx_GIVEREF(__pyx_tuple__717); __pyx_codeobj__718 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__717, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_SUM, 4792, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__718)) __PYX_ERR(3, 4792, __pyx_L1_error) + /* "talib/_stream.pxi":4821 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_T3( np.ndarray real not None , int timeperiod=-2**31 , double vfactor=-4e37 ): # <<<<<<<<<<<<<< + * """ T3(real[, timeperiod=?, vfactor=?]) + * + */ __pyx_tuple__719 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_vfactor, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__719)) __PYX_ERR(3, 4821, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__719); __Pyx_GIVEREF(__pyx_tuple__719); __pyx_codeobj__720 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__719, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_T3, 4821, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__720)) __PYX_ERR(3, 4821, __pyx_L1_error) + /* "talib/_stream.pxi":4851 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TAN(real) + * + */ __pyx_tuple__721 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__721)) __PYX_ERR(3, 4851, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__721); __Pyx_GIVEREF(__pyx_tuple__721); __pyx_codeobj__722 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__721, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_TAN, 4851, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__722)) __PYX_ERR(3, 4851, __pyx_L1_error) + /* "talib/_stream.pxi":4878 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TANH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TANH(real) + * + */ __pyx_tuple__723 = PyTuple_Pack(7, __pyx_n_s_real, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__723)) __PYX_ERR(3, 4878, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__723); __Pyx_GIVEREF(__pyx_tuple__723); __pyx_codeobj__724 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__723, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_TANH, 4878, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__724)) __PYX_ERR(3, 4878, __pyx_L1_error) + /* "talib/_stream.pxi":4905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TEMA(real[, timeperiod=?]) + * + */ __pyx_tuple__725 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__725)) __PYX_ERR(3, 4905, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__725); __Pyx_GIVEREF(__pyx_tuple__725); __pyx_codeobj__726 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__725, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_TEMA, 4905, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__726)) __PYX_ERR(3, 4905, __pyx_L1_error) + /* "talib/_stream.pxi":4934 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRANGE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TRANGE(high, low, close) + * + */ __pyx_tuple__727 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__727)) __PYX_ERR(3, 4934, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__727); __Pyx_GIVEREF(__pyx_tuple__727); __pyx_codeobj__728 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__727, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_TRANGE, 4934, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__728)) __PYX_ERR(3, 4934, __pyx_L1_error) + /* "talib/_stream.pxi":4967 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRIMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIMA(real[, timeperiod=?]) + * + */ __pyx_tuple__729 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__729)) __PYX_ERR(3, 4967, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__729); __Pyx_GIVEREF(__pyx_tuple__729); __pyx_codeobj__730 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__729, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_TRIMA, 4967, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__730)) __PYX_ERR(3, 4967, __pyx_L1_error) + /* "talib/_stream.pxi":4996 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRIX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIX(real[, timeperiod=?]) + * + */ __pyx_tuple__731 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__731)) __PYX_ERR(3, 4996, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__731); __Pyx_GIVEREF(__pyx_tuple__731); __pyx_codeobj__732 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__731, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_TRIX, 4996, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__732)) __PYX_ERR(3, 4996, __pyx_L1_error) + /* "talib/_stream.pxi":5025 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TSF( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TSF(real[, timeperiod=?]) + * + */ __pyx_tuple__733 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__733)) __PYX_ERR(3, 5025, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__733); __Pyx_GIVEREF(__pyx_tuple__733); __pyx_codeobj__734 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__733, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_TSF, 5025, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__734)) __PYX_ERR(3, 5025, __pyx_L1_error) + /* "talib/_stream.pxi":5054 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TYPPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TYPPRICE(high, low, close) + * + */ __pyx_tuple__735 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__735)) __PYX_ERR(3, 5054, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__735); __Pyx_GIVEREF(__pyx_tuple__735); __pyx_codeobj__736 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__735, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_TYPPRICE, 5054, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__736)) __PYX_ERR(3, 5054, __pyx_L1_error) + /* "talib/_stream.pxi":5087 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ULTOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod1=-2**31 , int timeperiod2=-2**31 , int timeperiod3=-2**31 ): # <<<<<<<<<<<<<< + * """ ULTOSC(high, low, close[, timeperiod1=?, timeperiod2=?, timeperiod3=?]) + * + */ __pyx_tuple__737 = PyTuple_Pack(14, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod1, __pyx_n_s_timeperiod2, __pyx_n_s_timeperiod3, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__737)) __PYX_ERR(3, 5087, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__737); __Pyx_GIVEREF(__pyx_tuple__737); __pyx_codeobj__738 = (PyObject*)__Pyx_PyCode_New(6, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__737, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_ULTOSC, 5087, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__738)) __PYX_ERR(3, 5087, __pyx_L1_error) + /* "talib/_stream.pxi":5124 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_VAR( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ VAR(real[, timeperiod=?, nbdev=?]) + * + */ __pyx_tuple__739 = PyTuple_Pack(9, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_nbdev, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__739)) __PYX_ERR(3, 5124, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__739); __Pyx_GIVEREF(__pyx_tuple__739); __pyx_codeobj__740 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__739, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_VAR, 5124, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__740)) __PYX_ERR(3, 5124, __pyx_L1_error) + /* "talib/_stream.pxi":5154 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WCLPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ WCLPRICE(high, low, close) + * + */ __pyx_tuple__741 = PyTuple_Pack(11, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__741)) __PYX_ERR(3, 5154, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__741); __Pyx_GIVEREF(__pyx_tuple__741); __pyx_codeobj__742 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__741, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_WCLPRICE, 5154, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__742)) __PYX_ERR(3, 5154, __pyx_L1_error) + /* "talib/_stream.pxi":5187 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WILLR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WILLR(high, low, close[, timeperiod=?]) + * + */ __pyx_tuple__743 = PyTuple_Pack(12, __pyx_n_s_high, __pyx_n_s_low, __pyx_n_s_close, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_high_data, __pyx_n_s_low_data, __pyx_n_s_close_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__743)) __PYX_ERR(3, 5187, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__743); __Pyx_GIVEREF(__pyx_tuple__743); __pyx_codeobj__744 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__743, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_talib__stream_pxi, __pyx_n_s_stream_WILLR, 5187, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__744)) __PYX_ERR(3, 5187, __pyx_L1_error) + /* "talib/_stream.pxi":5222 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WMA(real[, timeperiod=?]) + * + */ __pyx_tuple__745 = PyTuple_Pack(8, __pyx_n_s_real, __pyx_n_s_timeperiod, __pyx_n_s_length, __pyx_n_s_retCode, __pyx_n_s_real_data, __pyx_n_s_outbegidx, __pyx_n_s_outnbelement, __pyx_n_s_outreal); if (unlikely(!__pyx_tuple__745)) __PYX_ERR(3, 5222, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__745); __Pyx_GIVEREF(__pyx_tuple__745); @@ -68989,26 +105049,61 @@ if (!__Pyx_RefNanny) { if (__Pyx_patch_abc() < 0) __PYX_ERR(5, 1, __pyx_L1_error) #endif + /* "talib/_common.pxi":4 + * from _ta_lib cimport TA_RetCode, TA_FuncUnstId + * + * __ta_version__ = lib.TA_GetVersionString() # <<<<<<<<<<<<<< + * + * cpdef _ta_check_success(str function_name, TA_RetCode ret_code): + */ __pyx_t_1 = __Pyx_PyBytes_FromString(TA_GetVersionString()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_version, __pyx_t_1) < 0) __PYX_ERR(0, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_common.pxi":50 + * function_name, ret_code, description)) + * + * def _ta_initialize(): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Initialize() + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_3_ta_initialize, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_initialize, __pyx_t_1) < 0) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_common.pxi":55 + * _ta_check_success('TA_Initialize', ret_code) + * + * def _ta_shutdown(): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_Shutdown() + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_5_ta_shutdown, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_shutdown, __pyx_t_1) < 0) __PYX_ERR(0, 55, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_common.pxi":60 + * _ta_check_success('TA_Shutdown', ret_code) + * + * class MA_Type(object): # <<<<<<<<<<<<<< + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) + * + */ __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__18, __pyx_n_s_MA_Type, __pyx_n_s_MA_Type, (PyObject *) NULL, __pyx_n_s_talib__ta_lib, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); + /* "talib/_common.pxi":61 + * + * class MA_Type(object): + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) # <<<<<<<<<<<<<< + * + * def __init__(self): + */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { @@ -69104,16 +105199,37 @@ if (!__Pyx_RefNanny) { if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_T3, __pyx_t_12) < 0) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + /* "talib/_common.pxi":63 + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) + * + * def __init__(self): # <<<<<<<<<<<<<< + * self._lookup = { + * MA_Type.SMA: 'Simple Moving Average', + */ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_7MA_Type_1__init__, 0, __pyx_n_s_MA_Type___init, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__21)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_init, __pyx_t_3) < 0) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":76 + * } + * + * def __getitem__(self, type_): # <<<<<<<<<<<<<< + * return self._lookup[type_] + * + */ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_7MA_Type_3__getitem__, 0, __pyx_n_s_MA_Type___getitem, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_getitem, __pyx_t_3) < 0) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":60 + * _ta_check_success('TA_Shutdown', ret_code) + * + * class MA_Type(object): # <<<<<<<<<<<<<< + * SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9) + * + */ __pyx_t_3 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MA_Type, __pyx_tuple__18, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MA_Type, __pyx_t_3) < 0) __PYX_ERR(0, 60, __pyx_L1_error) @@ -69121,6 +105237,13 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_common.pxi":79 + * return self._lookup[type_] + * + * MA_Type = MA_Type() # <<<<<<<<<<<<<< + * + * _ta_func_unst_ids = {'NONE': -1} + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MA_Type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error) @@ -69129,12 +105252,26 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_MA_Type, __pyx_t_2) < 0) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":81 + * MA_Type = MA_Type() + * + * _ta_func_unst_ids = {'NONE': -1} # <<<<<<<<<<<<<< + * for i, name in enumerate([ + * 'ADX', 'ADXR', 'ATR', 'CMO', 'DX', 'EMA', 'HT_DCPERIOD', + */ __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_NONE, __pyx_int_neg_1) < 0) __PYX_ERR(0, 81, __pyx_L1_error) if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_func_unst_ids, __pyx_t_2) < 0) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":82 + * + * _ta_func_unst_ids = {'NONE': -1} + * for i, name in enumerate([ # <<<<<<<<<<<<<< + * 'ADX', 'ADXR', 'ATR', 'CMO', 'DX', 'EMA', 'HT_DCPERIOD', + * 'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDLINE', + */ __Pyx_INCREF(__pyx_int_0); __pyx_t_2 = __pyx_int_0; __pyx_t_1 = PyList_New(24); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error) @@ -69230,6 +105367,13 @@ if (!__Pyx_RefNanny) { __pyx_t_2 = __pyx_t_1; __pyx_t_1 = 0; + /* "talib/_common.pxi":88 + * 'NATR', 'PLUS_DI', 'PLUS_DM', 'RSI', 'STOCHRSI', 'T3', 'ALL' + * ]): + * _ta_func_unst_ids[name] = i # <<<<<<<<<<<<<< + * + * def _ta_set_unstable_period(name, period): + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_ta_func_unst_ids); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 88, __pyx_L1_error) @@ -69241,35 +105385,84 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_common.pxi":82 + * + * _ta_func_unst_ids = {'NONE': -1} + * for i, name in enumerate([ # <<<<<<<<<<<<<< + * 'ADX', 'ADXR', 'ATR', 'CMO', 'DX', 'EMA', 'HT_DCPERIOD', + * 'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDLINE', + */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":90 + * _ta_func_unst_ids[name] = i + * + * def _ta_set_unstable_period(name, period): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_7_ta_set_unstable_period, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_set_unstable_period, __pyx_t_2) < 0) __PYX_ERR(0, 90, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":96 + * _ta_check_success('TA_SetUnstablePeriod', ret_code) + * + * def _ta_get_unstable_period(name): # <<<<<<<<<<<<<< + * cdef unsigned int period + * cdef TA_FuncUnstId id = _ta_func_unst_ids[name] + */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_9_ta_get_unstable_period, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 96, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_get_unstable_period, __pyx_t_2) < 0) __PYX_ERR(0, 96, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":102 + * return period + * + * def _ta_set_compatibility(value): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCompatibility(value) + */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_11_ta_set_compatibility, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 102, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_set_compatibility, __pyx_t_2) < 0) __PYX_ERR(0, 102, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":107 + * _ta_check_success('TA_SetCompatibility', ret_code) + * + * def _ta_get_compatibility(): # <<<<<<<<<<<<<< + * cdef int value + * value = lib.TA_GetCompatibility() + */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_13_ta_get_compatibility, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_get_compatibility, __pyx_t_2) < 0) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":112 + * return value + * + * class CandleSettingType(object): # <<<<<<<<<<<<<< + * BodyLong, BodyVeryLong, BodyShort, BodyDoji, ShadowLong, ShadowVeryLong, \ + * ShadowShort, ShadowVeryShort, Near, Far, Equal, AllCandleSettings = \ + */ __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_tuple__32, __pyx_n_s_CandleSettingType, __pyx_n_s_CandleSettingType, (PyObject *) NULL, __pyx_n_s_talib__ta_lib, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); + /* "talib/_common.pxi":115 + * BodyLong, BodyVeryLong, BodyShort, BodyDoji, ShadowLong, ShadowVeryLong, \ + * ShadowShort, ShadowVeryShort, Near, Far, Equal, AllCandleSettings = \ + * range(12) # <<<<<<<<<<<<<< + * + * CandleSettingType = CandleSettingType() + */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { @@ -69356,6 +105549,13 @@ if (!__Pyx_RefNanny) { __pyx_L7_unpacking_done:; } + /* "talib/_common.pxi":113 + * + * class CandleSettingType(object): + * BodyLong, BodyVeryLong, BodyShort, BodyDoji, ShadowLong, ShadowVeryLong, \ # <<<<<<<<<<<<<< + * ShadowShort, ShadowVeryShort, Near, Far, Equal, AllCandleSettings = \ + * range(12) + */ if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_BodyLong, __pyx_t_11) < 0) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_BodyVeryLong, __pyx_t_12) < 0) __PYX_ERR(0, 113, __pyx_L1_error) @@ -69381,6 +105581,13 @@ if (!__Pyx_RefNanny) { if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_AllCandleSettings, __pyx_t_17) < 0) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + /* "talib/_common.pxi":112 + * return value + * + * class CandleSettingType(object): # <<<<<<<<<<<<<< + * BodyLong, BodyVeryLong, BodyShort, BodyDoji, ShadowLong, ShadowVeryLong, \ + * ShadowShort, ShadowVeryShort, Near, Far, Equal, AllCandleSettings = \ + */ __pyx_t_1 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_CandleSettingType, __pyx_tuple__32, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CandleSettingType, __pyx_t_1) < 0) __PYX_ERR(0, 112, __pyx_L1_error) @@ -69388,6 +105595,13 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":117 + * range(12) + * + * CandleSettingType = CandleSettingType() # <<<<<<<<<<<<<< + * + * class RangeType(object): + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CandleSettingType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 117, __pyx_L1_error) @@ -69396,11 +105610,25 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_CandleSettingType, __pyx_t_3) < 0) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":119 + * CandleSettingType = CandleSettingType() + * + * class RangeType(object): # <<<<<<<<<<<<<< + * RealBody, HighLow, Shadows = range(3) + * + */ __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__34); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_tuple__34, __pyx_n_s_RangeType, __pyx_n_s_RangeType, (PyObject *) NULL, __pyx_n_s_talib__ta_lib, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); + /* "talib/_common.pxi":120 + * + * class RangeType(object): + * RealBody, HighLow, Shadows = range(3) # <<<<<<<<<<<<<< + * + * RangeType = RangeType() + */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { @@ -69463,6 +105691,13 @@ if (!__Pyx_RefNanny) { if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_Shadows, __pyx_t_13) < 0) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + /* "talib/_common.pxi":119 + * CandleSettingType = CandleSettingType() + * + * class RangeType(object): # <<<<<<<<<<<<<< + * RealBody, HighLow, Shadows = range(3) + * + */ __pyx_t_1 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_RangeType, __pyx_tuple__34, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_RangeType, __pyx_t_1) < 0) __PYX_ERR(0, 119, __pyx_L1_error) @@ -69470,6 +105705,13 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_common.pxi":122 + * RealBody, HighLow, Shadows = range(3) + * + * RangeType = RangeType() # <<<<<<<<<<<<<< + * + * def _ta_set_candle_settings(settingtype, rangetype, avgperiod, factor): + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_RangeType); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) @@ -69478,16 +105720,36 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_RangeType, __pyx_t_2) < 0) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":124 + * RangeType = RangeType() + * + * def _ta_set_candle_settings(settingtype, rangetype, avgperiod, factor): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_SetCandleSettings(settingtype, rangetype, avgperiod, factor) + */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_15_ta_set_candle_settings, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_set_candle_settings, __pyx_t_2) < 0) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_common.pxi":129 + * _ta_check_success('TA_SetCandleSettings', ret_code) + * + * def _ta_restore_candle_default_settings(settingtype): # <<<<<<<<<<<<<< + * cdef TA_RetCode ret_code + * ret_code = lib.TA_RestoreCandleDefaultSettings(settingtype) + */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_17_ta_restore_candle_default_settings, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_restore_candle_default_setti, __pyx_t_2) < 0) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_func.pxi":2 + * cimport numpy as np + * from numpy import nan # <<<<<<<<<<<<<< + * from cython import boundscheck, wraparound + * + */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_nan); @@ -69502,804 +105764,1929 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":7 + * # _ta_check_success: defined in _common.pxi + * + * cdef double NaN = nan # <<<<<<<<<<<<<< + * + * cdef extern from "numpy/arrayobject.h": + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_nan); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 7, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_5talib_7_ta_lib_NaN = __pyx_t_19; + /* "talib/_func.pxi":15 + * np.ndarray PyArray_GETCONTIGUOUS(np.ndarray) + * + * np.import_array() # Initialize the NumPy C API # <<<<<<<<<<<<<< + * + * cimport _ta_lib as lib + */ __pyx_t_20 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(2, 15, __pyx_L1_error) + /* "talib/_func.pxi":144 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ACOS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ACOS(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_19ACOS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 144, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ACOS, __pyx_t_3) < 0) __PYX_ERR(2, 144, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":173 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ AD(high, low, close, volume) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_21AD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 173, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_AD, __pyx_t_3) < 0) __PYX_ERR(2, 173, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":205 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADD( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ ADD(real0, real1) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_23ADD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ADD, __pyx_t_3) < 0) __PYX_ERR(2, 205, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":236 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_25ADOSC, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ADOSC, __pyx_t_3) < 0) __PYX_ERR(2, 236, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":271 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADX(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_27ADX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ADX, __pyx_t_3) < 0) __PYX_ERR(2, 271, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":304 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADXR(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_29ADXR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ADXR, __pyx_t_3) < 0) __PYX_ERR(2, 304, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":337 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ APO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_31APO, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_APO, __pyx_t_3) < 0) __PYX_ERR(2, 337, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":370 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROON(high, low[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_33AROON, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_AROON, __pyx_t_3) < 0) __PYX_ERR(2, 370, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":405 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROONOSC(high, low[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_35AROONOSC, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_AROONOSC, __pyx_t_3) < 0) __PYX_ERR(2, 405, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":437 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ASIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ASIN(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_37ASIN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ASIN, __pyx_t_3) < 0) __PYX_ERR(2, 437, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":466 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ATAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ATAN(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_39ATAN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 466, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ATAN, __pyx_t_3) < 0) __PYX_ERR(2, 466, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":495 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ATR(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_41ATR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ATR, __pyx_t_3) < 0) __PYX_ERR(2, 495, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":528 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ AVGPRICE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_43AVGPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 528, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_AVGPRICE, __pyx_t_3) < 0) __PYX_ERR(2, 528, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":560 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ): # <<<<<<<<<<<<<< + * """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_45BBANDS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_BBANDS, __pyx_t_3) < 0) __PYX_ERR(2, 560, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":600 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ BETA(real0, real1[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_47BETA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_BETA, __pyx_t_3) < 0) __PYX_ERR(2, 600, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":633 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ BOP(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_49BOP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_BOP, __pyx_t_3) < 0) __PYX_ERR(2, 633, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":665 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CCI(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_51CCI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CCI, __pyx_t_3) < 0) __PYX_ERR(2, 665, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":698 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL2CROWS(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_53CDL2CROWS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 698, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDL2CROWS, __pyx_t_3) < 0) __PYX_ERR(2, 698, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":730 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3BLACKCROWS(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_55CDL3BLACKCROWS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDL3BLACKCROWS, __pyx_t_3) < 0) __PYX_ERR(2, 730, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":762 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3INSIDE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_57CDL3INSIDE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 762, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDL3INSIDE, __pyx_t_3) < 0) __PYX_ERR(2, 762, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":794 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3LINESTRIKE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_59CDL3LINESTRIKE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 794, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDL3LINESTRIKE, __pyx_t_3) < 0) __PYX_ERR(2, 794, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":826 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3OUTSIDE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_61CDL3OUTSIDE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDL3OUTSIDE, __pyx_t_3) < 0) __PYX_ERR(2, 826, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":858 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3STARSINSOUTH(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_63CDL3STARSINSOUTH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 858, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDL3STARSINSOUTH, __pyx_t_3) < 0) __PYX_ERR(2, 858, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":890 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3WHITESOLDIERS(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_65CDL3WHITESOLDIERS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDL3WHITESOLDIERS, __pyx_t_3) < 0) __PYX_ERR(2, 890, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":922 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLABANDONEDBABY(open, high, low, close[, penetration=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_67CDLABANDONEDBABY, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLABANDONEDBABY, __pyx_t_3) < 0) __PYX_ERR(2, 922, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":956 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLADVANCEBLOCK(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_69CDLADVANCEBLOCK, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLADVANCEBLOCK, __pyx_t_3) < 0) __PYX_ERR(2, 956, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":988 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBELTHOLD(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_71CDLBELTHOLD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLBELTHOLD, __pyx_t_3) < 0) __PYX_ERR(2, 988, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1020 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBREAKAWAY(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_73CDLBREAKAWAY, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1020, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLBREAKAWAY, __pyx_t_3) < 0) __PYX_ERR(2, 1020, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1052 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCLOSINGMARUBOZU(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_75CDLCLOSINGMARUBOZU, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1052, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLCLOSINGMARUBOZU, __pyx_t_3) < 0) __PYX_ERR(2, 1052, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1084 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCONCEALBABYSWALL(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_77CDLCONCEALBABYSWALL, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLCONCEALBABYSWALL, __pyx_t_3) < 0) __PYX_ERR(2, 1084, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1116 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCOUNTERATTACK(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_79CDLCOUNTERATTACK, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLCOUNTERATTACK, __pyx_t_3) < 0) __PYX_ERR(2, 1116, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1148 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_81CDLDARKCLOUDCOVER, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLDARKCLOUDCOVER, __pyx_t_3) < 0) __PYX_ERR(2, 1148, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1182 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJI(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_83CDLDOJI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1182, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLDOJI, __pyx_t_3) < 0) __PYX_ERR(2, 1182, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1214 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJISTAR(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_85CDLDOJISTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1214, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLDOJISTAR, __pyx_t_3) < 0) __PYX_ERR(2, 1214, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1246 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDRAGONFLYDOJI(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_87CDLDRAGONFLYDOJI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLDRAGONFLYDOJI, __pyx_t_3) < 0) __PYX_ERR(2, 1246, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1278 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLENGULFING(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_89CDLENGULFING, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1278, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLENGULFING, __pyx_t_3) < 0) __PYX_ERR(2, 1278, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1310 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_91CDLEVENINGDOJISTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLEVENINGDOJISTAR, __pyx_t_3) < 0) __PYX_ERR(2, 1310, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1344 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLEVENINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGSTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_93CDLEVENINGSTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1344, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLEVENINGSTAR, __pyx_t_3) < 0) __PYX_ERR(2, 1344, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1378 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLGAPSIDESIDEWHITE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGAPSIDESIDEWHITE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_95CDLGAPSIDESIDEWHITE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLGAPSIDESIDEWHITE, __pyx_t_3) < 0) __PYX_ERR(2, 1378, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1410 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLGRAVESTONEDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGRAVESTONEDOJI(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_97CDLGRAVESTONEDOJI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLGRAVESTONEDOJI, __pyx_t_3) < 0) __PYX_ERR(2, 1410, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1442 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHAMMER(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_99CDLHAMMER, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLHAMMER, __pyx_t_3) < 0) __PYX_ERR(2, 1442, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1474 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHANGINGMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHANGINGMAN(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_101CDLHANGINGMAN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1474, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLHANGINGMAN, __pyx_t_3) < 0) __PYX_ERR(2, 1474, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1506 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHARAMI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMI(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_103CDLHARAMI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLHARAMI, __pyx_t_3) < 0) __PYX_ERR(2, 1506, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1538 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHARAMICROSS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMICROSS(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_105CDLHARAMICROSS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLHARAMICROSS, __pyx_t_3) < 0) __PYX_ERR(2, 1538, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1570 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIGHWAVE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIGHWAVE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_107CDLHIGHWAVE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLHIGHWAVE, __pyx_t_3) < 0) __PYX_ERR(2, 1570, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1602 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIKKAKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_109CDLHIKKAKE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1602, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLHIKKAKE, __pyx_t_3) < 0) __PYX_ERR(2, 1602, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1634 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHIKKAKEMOD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKEMOD(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_111CDLHIKKAKEMOD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1634, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLHIKKAKEMOD, __pyx_t_3) < 0) __PYX_ERR(2, 1634, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1666 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLHOMINGPIGEON( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHOMINGPIGEON(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_113CDLHOMINGPIGEON, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLHOMINGPIGEON, __pyx_t_3) < 0) __PYX_ERR(2, 1666, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1698 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLIDENTICAL3CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLIDENTICAL3CROWS(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_115CDLIDENTICAL3CROWS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1698, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLIDENTICAL3CROWS, __pyx_t_3) < 0) __PYX_ERR(2, 1698, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1730 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLINNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINNECK(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_117CDLINNECK, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLINNECK, __pyx_t_3) < 0) __PYX_ERR(2, 1730, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1762 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLINVERTEDHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINVERTEDHAMMER(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_119CDLINVERTEDHAMMER, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1762, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLINVERTEDHAMMER, __pyx_t_3) < 0) __PYX_ERR(2, 1762, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1794 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLKICKING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKING(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_121CDLKICKING, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1794, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLKICKING, __pyx_t_3) < 0) __PYX_ERR(2, 1794, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1826 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLKICKINGBYLENGTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKINGBYLENGTH(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_123CDLKICKINGBYLENGTH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLKICKINGBYLENGTH, __pyx_t_3) < 0) __PYX_ERR(2, 1826, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1858 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLADDERBOTTOM( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLADDERBOTTOM(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_125CDLLADDERBOTTOM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1858, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLLADDERBOTTOM, __pyx_t_3) < 0) __PYX_ERR(2, 1858, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1890 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLONGLEGGEDDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLEGGEDDOJI(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_127CDLLONGLEGGEDDOJI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLLONGLEGGEDDOJI, __pyx_t_3) < 0) __PYX_ERR(2, 1890, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1922 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLLONGLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLINE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_129CDLLONGLINE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLLONGLINE, __pyx_t_3) < 0) __PYX_ERR(2, 1922, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1954 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMARUBOZU(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_131CDLMARUBOZU, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1954, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLMARUBOZU, __pyx_t_3) < 0) __PYX_ERR(2, 1954, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":1986 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMATCHINGLOW( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMATCHINGLOW(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_133CDLMATCHINGLOW, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1986, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLMATCHINGLOW, __pyx_t_3) < 0) __PYX_ERR(2, 1986, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2018 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMATHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLMATHOLD(open, high, low, close[, penetration=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_135CDLMATHOLD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2018, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLMATHOLD, __pyx_t_3) < 0) __PYX_ERR(2, 2018, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2052 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMORNINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_137CDLMORNINGDOJISTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2052, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLMORNINGDOJISTAR, __pyx_t_3) < 0) __PYX_ERR(2, 2052, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2086 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLMORNINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGSTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_139CDLMORNINGSTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2086, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLMORNINGSTAR, __pyx_t_3) < 0) __PYX_ERR(2, 2086, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2120 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLONNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLONNECK(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_141CDLONNECK, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLONNECK, __pyx_t_3) < 0) __PYX_ERR(2, 2120, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2152 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLPIERCING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLPIERCING(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_143CDLPIERCING, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2152, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLPIERCING, __pyx_t_3) < 0) __PYX_ERR(2, 2152, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2184 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLRICKSHAWMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRICKSHAWMAN(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_145CDLRICKSHAWMAN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLRICKSHAWMAN, __pyx_t_3) < 0) __PYX_ERR(2, 2184, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2216 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLRISEFALL3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRISEFALL3METHODS(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_147CDLRISEFALL3METHODS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2216, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLRISEFALL3METHODS, __pyx_t_3) < 0) __PYX_ERR(2, 2216, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2248 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSEPARATINGLINES( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSEPARATINGLINES(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_149CDLSEPARATINGLINES, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2248, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLSEPARATINGLINES, __pyx_t_3) < 0) __PYX_ERR(2, 2248, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2280 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSHOOTINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHOOTINGSTAR(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_151CDLSHOOTINGSTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLSHOOTINGSTAR, __pyx_t_3) < 0) __PYX_ERR(2, 2280, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2312 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSHORTLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHORTLINE(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_153CDLSHORTLINE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLSHORTLINE, __pyx_t_3) < 0) __PYX_ERR(2, 2312, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2344 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSPINNINGTOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSPINNINGTOP(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_155CDLSPINNINGTOP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2344, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLSPINNINGTOP, __pyx_t_3) < 0) __PYX_ERR(2, 2344, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2376 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSTALLEDPATTERN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTALLEDPATTERN(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_157CDLSTALLEDPATTERN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLSTALLEDPATTERN, __pyx_t_3) < 0) __PYX_ERR(2, 2376, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2408 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLSTICKSANDWICH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTICKSANDWICH(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_159CDLSTICKSANDWICH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2408, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLSTICKSANDWICH, __pyx_t_3) < 0) __PYX_ERR(2, 2408, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2440 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTAKURI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTAKURI(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_161CDLTAKURI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLTAKURI, __pyx_t_3) < 0) __PYX_ERR(2, 2440, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2472 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTASUKIGAP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTASUKIGAP(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_163CDLTASUKIGAP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLTASUKIGAP, __pyx_t_3) < 0) __PYX_ERR(2, 2472, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2504 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTHRUSTING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTHRUSTING(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_165CDLTHRUSTING, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2504, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLTHRUSTING, __pyx_t_3) < 0) __PYX_ERR(2, 2504, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2536 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLTRISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTRISTAR(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_167CDLTRISTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLTRISTAR, __pyx_t_3) < 0) __PYX_ERR(2, 2536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2568 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLUNIQUE3RIVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUNIQUE3RIVER(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_169CDLUNIQUE3RIVER, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2568, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLUNIQUE3RIVER, __pyx_t_3) < 0) __PYX_ERR(2, 2568, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2600 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLUPSIDEGAP2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUPSIDEGAP2CROWS(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_171CDLUPSIDEGAP2CROWS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLUPSIDEGAP2CROWS, __pyx_t_3) < 0) __PYX_ERR(2, 2600, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2632 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CDLXSIDEGAP3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLXSIDEGAP3METHODS(open, high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_173CDLXSIDEGAP3METHODS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CDLXSIDEGAP3METHODS, __pyx_t_3) < 0) __PYX_ERR(2, 2632, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2664 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CEIL( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ CEIL(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_175CEIL, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CEIL, __pyx_t_3) < 0) __PYX_ERR(2, 2664, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2693 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CMO( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CMO(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_177CMO, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMO, __pyx_t_3) < 0) __PYX_ERR(2, 2693, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2724 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def CORREL( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CORREL(real0, real1[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_179CORREL, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CORREL, __pyx_t_3) < 0) __PYX_ERR(2, 2724, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2757 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def COS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COS(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_181COS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2757, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_COS, __pyx_t_3) < 0) __PYX_ERR(2, 2757, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2786 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def COSH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COSH(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_183COSH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_COSH, __pyx_t_3) < 0) __PYX_ERR(2, 2786, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2815 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DEMA(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_185DEMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2815, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEMA, __pyx_t_3) < 0) __PYX_ERR(2, 2815, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2846 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DIV( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ DIV(real0, real1) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_187DIV, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_DIV, __pyx_t_3) < 0) __PYX_ERR(2, 2846, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2877 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def DX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DX(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_189DX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_DX, __pyx_t_3) < 0) __PYX_ERR(2, 2877, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2910 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def EMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ EMA(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_191EMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2910, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_EMA, __pyx_t_3) < 0) __PYX_ERR(2, 2910, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2941 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def EXP( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ EXP(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_193EXP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXP, __pyx_t_3) < 0) __PYX_ERR(2, 2941, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2970 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def FLOOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ FLOOR(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_195FLOOR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLOOR, __pyx_t_3) < 0) __PYX_ERR(2, 2970, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":2999 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_DCPERIOD( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPERIOD(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_197HT_DCPERIOD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2999, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_HT_DCPERIOD, __pyx_t_3) < 0) __PYX_ERR(2, 2999, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3028 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_DCPHASE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPHASE(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_199HT_DCPHASE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_HT_DCPHASE, __pyx_t_3) < 0) __PYX_ERR(2, 3028, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3057 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_PHASOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_PHASOR(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_201HT_PHASOR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3057, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_HT_PHASOR, __pyx_t_3) < 0) __PYX_ERR(2, 3057, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3089 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_SINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_SINE(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_203HT_SINE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3089, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_HT_SINE, __pyx_t_3) < 0) __PYX_ERR(2, 3089, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3121 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_TRENDLINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDLINE(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_205HT_TRENDLINE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3121, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_HT_TRENDLINE, __pyx_t_3) < 0) __PYX_ERR(2, 3121, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3150 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def HT_TRENDMODE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDMODE(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_207HT_TRENDMODE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_HT_TRENDMODE, __pyx_t_3) < 0) __PYX_ERR(2, 3150, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3179 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def KAMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ KAMA(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_209KAMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_KAMA, __pyx_t_3) < 0) __PYX_ERR(2, 3179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3210 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_211LINEARREG, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_LINEARREG, __pyx_t_3) < 0) __PYX_ERR(2, 3210, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3241 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_ANGLE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_ANGLE(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_213LINEARREG_ANGLE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_LINEARREG_ANGLE, __pyx_t_3) < 0) __PYX_ERR(2, 3241, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3272 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_INTERCEPT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_INTERCEPT(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_215LINEARREG_INTERCEPT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_LINEARREG_INTERCEPT, __pyx_t_3) < 0) __PYX_ERR(2, 3272, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3303 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LINEARREG_SLOPE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_SLOPE(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_217LINEARREG_SLOPE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_LINEARREG_SLOPE, __pyx_t_3) < 0) __PYX_ERR(2, 3303, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3334 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LN(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_219LN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3334, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_LN, __pyx_t_3) < 0) __PYX_ERR(2, 3334, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3363 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def LOG10( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LOG10(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_221LOG10, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOG10, __pyx_t_3) < 0) __PYX_ERR(2, 3363, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3392 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MA( np.ndarray real not None , int timeperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MA(real[, timeperiod=?, matype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_223MA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MA, __pyx_t_3) < 0) __PYX_ERR(2, 3392, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3424 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACD( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACD(real[, fastperiod=?, slowperiod=?, signalperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_225MACD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MACD, __pyx_t_3) < 0) __PYX_ERR(2, 3424, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3463 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACDEXT( np.ndarray real not None , int fastperiod=-2**31 , int fastmatype=0 , int slowperiod=-2**31 , int slowmatype=0 , int signalperiod=-2**31 , int signalmatype=0 ): # <<<<<<<<<<<<<< + * """ MACDEXT(real[, fastperiod=?, fastmatype=?, slowperiod=?, slowmatype=?, signalperiod=?, signalmatype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_227MACDEXT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3463, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MACDEXT, __pyx_t_3) < 0) __PYX_ERR(2, 3463, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3505 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MACDFIX( np.ndarray real not None , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACDFIX(real[, signalperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_229MACDFIX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MACDFIX, __pyx_t_3) < 0) __PYX_ERR(2, 3505, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3542 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAMA( np.ndarray real not None , double fastlimit=-4e37 , double slowlimit=-4e37 ): # <<<<<<<<<<<<<< + * """ MAMA(real[, fastlimit=?, slowlimit=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_231MAMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3542, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAMA, __pyx_t_3) < 0) __PYX_ERR(2, 3542, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3577 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAVP( np.ndarray real not None , np.ndarray periods not None , int minperiod=-2**31 , int maxperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MAVP(real, periods[, minperiod=?, maxperiod=?, matype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_233MAVP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAVP, __pyx_t_3) < 0) __PYX_ERR(2, 3577, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3612 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAX(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_235MAX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3612, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX, __pyx_t_3) < 0) __PYX_ERR(2, 3612, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3643 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAXINDEX(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_237MAXINDEX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAXINDEX, __pyx_t_3) < 0) __PYX_ERR(2, 3643, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3677 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MEDPRICE( np.ndarray high not None , np.ndarray low not None ): # <<<<<<<<<<<<<< + * """ MEDPRICE(high, low) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_239MEDPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MEDPRICE, __pyx_t_3) < 0) __PYX_ERR(2, 3677, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3707 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MFI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MFI(high, low, close, volume[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_241MFI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MFI, __pyx_t_3) < 0) __PYX_ERR(2, 3707, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3741 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIDPOINT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPOINT(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_243MIDPOINT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MIDPOINT, __pyx_t_3) < 0) __PYX_ERR(2, 3741, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3772 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIDPRICE( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPRICE(high, low[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_245MIDPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MIDPRICE, __pyx_t_3) < 0) __PYX_ERR(2, 3772, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3804 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MIN( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIN(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_247MIN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3804, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MIN, __pyx_t_3) < 0) __PYX_ERR(2, 3804, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3835 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MININDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MININDEX(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_249MININDEX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3835, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MININDEX, __pyx_t_3) < 0) __PYX_ERR(2, 3835, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3869 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINMAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAX(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_251MINMAX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MINMAX, __pyx_t_3) < 0) __PYX_ERR(2, 3869, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3903 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINMAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAXINDEX(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_253MINMAXINDEX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3903, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MINMAXINDEX, __pyx_t_3) < 0) __PYX_ERR(2, 3903, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3943 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DI(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_255MINUS_DI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3943, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MINUS_DI, __pyx_t_3) < 0) __PYX_ERR(2, 3943, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":3976 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MINUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DM(high, low[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_257MINUS_DM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MINUS_DM, __pyx_t_3) < 0) __PYX_ERR(2, 3976, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4008 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MOM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MOM(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_259MOM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4008, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MOM, __pyx_t_3) < 0) __PYX_ERR(2, 4008, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4039 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def MULT( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ MULT(real0, real1) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_261MULT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4039, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_MULT, __pyx_t_3) < 0) __PYX_ERR(2, 4039, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4070 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def NATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ NATR(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_263NATR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4070, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_NATR, __pyx_t_3) < 0) __PYX_ERR(2, 4070, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4103 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def OBV( np.ndarray real not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ OBV(real, volume) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_265OBV, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_OBV, __pyx_t_3) < 0) __PYX_ERR(2, 4103, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4134 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PLUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DI(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_267PLUS_DI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_PLUS_DI, __pyx_t_3) < 0) __PYX_ERR(2, 4134, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4167 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PLUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DM(high, low[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_269PLUS_DM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_PLUS_DM, __pyx_t_3) < 0) __PYX_ERR(2, 4167, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4199 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def PPO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ PPO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_271PPO, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_PPO, __pyx_t_3) < 0) __PYX_ERR(2, 4199, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4232 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROC( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROC(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_273ROC, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROC, __pyx_t_3) < 0) __PYX_ERR(2, 4232, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4263 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCP( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCP(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_275ROCP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4263, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROCP, __pyx_t_3) < 0) __PYX_ERR(2, 4263, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4294 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCR( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_277ROCR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROCR, __pyx_t_3) < 0) __PYX_ERR(2, 4294, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4325 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ROCR100( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR100(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_279ROCR100, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROCR100, __pyx_t_3) < 0) __PYX_ERR(2, 4325, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4356 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def RSI( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ RSI(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_281RSI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4356, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_RSI, __pyx_t_3) < 0) __PYX_ERR(2, 4356, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4387 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SAR( np.ndarray high not None , np.ndarray low not None , double acceleration=0.02 , double maximum=0.2 ): # <<<<<<<<<<<<<< + * """ SAR(high, low[, acceleration=?, maximum=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_283SAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SAR, __pyx_t_3) < 0) __PYX_ERR(2, 4387, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4420 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SAREXT( np.ndarray high not None , np.ndarray low not None , double startvalue=-4e37 , double offsetonreverse=-4e37 , double accelerationinitlong=-4e37 , double accelerationlong=-4e37 , double accelerationmaxlong=-4e37 , double accelerationinitshort=-4e37 , double accelerationshort=-4e37 , double accelerationmaxshort=-4e37 ): # <<<<<<<<<<<<<< + * """ SAREXT(high, low[, startvalue=?, offsetonreverse=?, accelerationinitlong=?, accelerationlong=?, accelerationmaxlong=?, accelerationinitshort=?, accelerationshort=?, accelerationmaxshort=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_285SAREXT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4420, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SAREXT, __pyx_t_3) < 0) __PYX_ERR(2, 4420, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4459 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SIN(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_287SIN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIN, __pyx_t_3) < 0) __PYX_ERR(2, 4459, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4488 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SINH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SINH(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_289SINH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4488, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SINH, __pyx_t_3) < 0) __PYX_ERR(2, 4488, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4517 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SMA(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_291SMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4517, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SMA, __pyx_t_3) < 0) __PYX_ERR(2, 4517, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4548 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SQRT( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SQRT(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_293SQRT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SQRT, __pyx_t_3) < 0) __PYX_ERR(2, 4548, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4577 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STDDEV( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ STDDEV(real[, timeperiod=?, nbdev=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_295STDDEV, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_STDDEV, __pyx_t_3) < 0) __PYX_ERR(2, 4577, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4609 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCH( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int slowk_period=-2**31 , int slowk_matype=0 , int slowd_period=-2**31 , int slowd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_297STOCH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_STOCH, __pyx_t_3) < 0) __PYX_ERR(2, 4609, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4649 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCHF( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_299STOCHF, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_STOCHF, __pyx_t_3) < 0) __PYX_ERR(2, 4649, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def STOCHRSI( np.ndarray real not None , int timeperiod=-2**31 , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHRSI(real[, timeperiod=?, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_301STOCHRSI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_STOCHRSI, __pyx_t_3) < 0) __PYX_ERR(2, 4687, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4724 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SUB( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ SUB(real0, real1) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_303SUB, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SUB, __pyx_t_3) < 0) __PYX_ERR(2, 4724, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4755 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def SUM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SUM(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_305SUM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4755, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SUM, __pyx_t_3) < 0) __PYX_ERR(2, 4755, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4786 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def T3( np.ndarray real not None , int timeperiod=-2**31 , double vfactor=-4e37 ): # <<<<<<<<<<<<<< + * """ T3(real[, timeperiod=?, vfactor=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_307T3, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_T3, __pyx_t_3) < 0) __PYX_ERR(2, 4786, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4818 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TAN(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_309TAN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TAN, __pyx_t_3) < 0) __PYX_ERR(2, 4818, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4847 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TANH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TANH(real) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_311TANH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4847, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TANH, __pyx_t_3) < 0) __PYX_ERR(2, 4847, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4876 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TEMA(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_313TEMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TEMA, __pyx_t_3) < 0) __PYX_ERR(2, 4876, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4907 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRANGE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TRANGE(high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_315TRANGE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4907, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TRANGE, __pyx_t_3) < 0) __PYX_ERR(2, 4907, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4938 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRIMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIMA(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_317TRIMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4938, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TRIMA, __pyx_t_3) < 0) __PYX_ERR(2, 4938, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":4969 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TRIX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIX(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_319TRIX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TRIX, __pyx_t_3) < 0) __PYX_ERR(2, 4969, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":5000 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TSF( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TSF(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_321TSF, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5000, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSF, __pyx_t_3) < 0) __PYX_ERR(2, 5000, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":5031 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def TYPPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TYPPRICE(high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_323TYPPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5031, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TYPPRICE, __pyx_t_3) < 0) __PYX_ERR(2, 5031, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":5062 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def ULTOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod1=-2**31 , int timeperiod2=-2**31 , int timeperiod3=-2**31 ): # <<<<<<<<<<<<<< + * """ ULTOSC(high, low, close[, timeperiod1=?, timeperiod2=?, timeperiod3=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_325ULTOSC, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5062, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ULTOSC, __pyx_t_3) < 0) __PYX_ERR(2, 5062, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":5097 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def VAR( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ VAR(real[, timeperiod=?, nbdev=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_327VAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5097, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_VAR, __pyx_t_3) < 0) __PYX_ERR(2, 5097, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":5129 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WCLPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ WCLPRICE(high, low, close) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_329WCLPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_WCLPRICE, __pyx_t_3) < 0) __PYX_ERR(2, 5129, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":5160 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WILLR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WILLR(high, low, close[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_331WILLR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_WILLR, __pyx_t_3) < 0) __PYX_ERR(2, 5160, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":5193 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def WMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WMA(real[, timeperiod=?]) + * + */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_333WMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_WMA, __pyx_t_3) < 0) __PYX_ERR(2, 5193, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_func.pxi":5222 + * return outreal + * + * __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"] # <<<<<<<<<<<<<< + */ __pyx_t_3 = PyList_New(158); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_ACOS); @@ -70779,11 +108166,25 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_TA_FUNCTION_NAMES, __pyx_t_3) < 0) __PYX_ERR(2, 5222, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":4 + * This file Copyright (c) 2013 Brian A Cappello + * ''' + * import math # <<<<<<<<<<<<<< + * try: + * from collections import OrderedDict + */ __pyx_t_3 = __Pyx_Import(__pyx_n_s_math, 0, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_math, __pyx_t_3) < 0) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":5 + * ''' + * import math + * try: # <<<<<<<<<<<<<< + * from collections import OrderedDict + * except ImportError: # handle python 2.6 and earlier + */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -70793,6 +108194,13 @@ if (!__Pyx_RefNanny) { __Pyx_XGOTREF(__pyx_t_23); /*try:*/ { + /* "talib/_abstract.pxi":6 + * import math + * try: + * from collections import OrderedDict # <<<<<<<<<<<<<< + * except ImportError: # handle python 2.6 and earlier + * from ordereddict import OrderedDict + */ __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L10_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_OrderedDict); @@ -70807,6 +108215,13 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":5 + * ''' + * import math + * try: # <<<<<<<<<<<<<< + * from collections import OrderedDict + * except ImportError: # handle python 2.6 and earlier + */ } __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; @@ -70830,6 +108245,13 @@ if (!__Pyx_RefNanny) { __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + /* "talib/_abstract.pxi":7 + * try: + * from collections import OrderedDict + * except ImportError: # handle python 2.6 and earlier # <<<<<<<<<<<<<< + * from ordereddict import OrderedDict + * from cython.operator cimport dereference as deref + */ __pyx_t_20 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError); if (__pyx_t_20) { __Pyx_AddTraceback("talib._ta_lib", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -70838,6 +108260,13 @@ if (!__Pyx_RefNanny) { __Pyx_GOTREF(__pyx_t_3); __Pyx_GOTREF(__pyx_t_1); + /* "talib/_abstract.pxi":8 + * from collections import OrderedDict + * except ImportError: # handle python 2.6 and earlier + * from ordereddict import OrderedDict # <<<<<<<<<<<<<< + * from cython.operator cimport dereference as deref + * import numpy + */ __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8, __pyx_L12_except_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_INCREF(__pyx_n_s_OrderedDict); @@ -70859,6 +108288,13 @@ if (!__Pyx_RefNanny) { goto __pyx_L12_except_error; __pyx_L12_except_error:; + /* "talib/_abstract.pxi":5 + * ''' + * import math + * try: # <<<<<<<<<<<<<< + * from collections import OrderedDict + * except ImportError: # handle python 2.6 and earlier + */ __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); @@ -70872,16 +108308,37 @@ if (!__Pyx_RefNanny) { __pyx_L15_try_end:; } + /* "talib/_abstract.pxi":10 + * from ordereddict import OrderedDict + * from cython.operator cimport dereference as deref + * import numpy # <<<<<<<<<<<<<< + * import sys + * + */ __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_numpy, __pyx_t_1) < 0) __PYX_ERR(1, 10, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":11 + * from cython.operator cimport dereference as deref + * import numpy + * import sys # <<<<<<<<<<<<<< + * + * cimport numpy as np + */ __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(1, 11, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":19 + * + * # lookup for TALIB input parameters which don't define expected price series inputs + * __INPUT_PRICE_SERIES_DEFAULTS = {'price': 'close', # <<<<<<<<<<<<<< + * 'price0': 'high', + * 'price1': 'low', + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 19, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_price, __pyx_n_s_close) < 0) __PYX_ERR(1, 19, __pyx_L1_error) @@ -70891,6 +108348,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_INPUT_PRICE_SERIES_DEFAULTS, __pyx_t_1) < 0) __PYX_ERR(1, 19, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":25 + * } + * + * __INPUT_ARRAYS_TYPES = [dict] # <<<<<<<<<<<<<< + * __ARRAY_TYPES = [np.ndarray] + * + */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 25, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)(&PyDict_Type))); @@ -70899,6 +108363,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_INPUT_ARRAYS_TYPES, __pyx_t_1) < 0) __PYX_ERR(1, 25, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":26 + * + * __INPUT_ARRAYS_TYPES = [dict] + * __ARRAY_TYPES = [np.ndarray] # <<<<<<<<<<<<<< + * + * # allow use of pandas.DataFrame for input arrays + */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_ptype_5numpy_ndarray)); @@ -70907,6 +108378,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARRAY_TYPES, __pyx_t_1) < 0) __PYX_ERR(1, 26, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":29 + * + * # allow use of pandas.DataFrame for input arrays + * try: # <<<<<<<<<<<<<< + * import pandas + * __INPUT_ARRAYS_TYPES.append(pandas.DataFrame) + */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -70916,11 +108394,25 @@ if (!__Pyx_RefNanny) { __Pyx_XGOTREF(__pyx_t_21); /*try:*/ { + /* "talib/_abstract.pxi":30 + * # allow use of pandas.DataFrame for input arrays + * try: + * import pandas # <<<<<<<<<<<<<< + * __INPUT_ARRAYS_TYPES.append(pandas.DataFrame) + * __ARRAY_TYPES.append(pandas.Series) + */ __pyx_t_1 = __Pyx_Import(__pyx_n_s_pandas, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 30, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_pandas, __pyx_t_1) < 0) __PYX_ERR(1, 30, __pyx_L18_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":31 + * try: + * import pandas + * __INPUT_ARRAYS_TYPES.append(pandas.DataFrame) # <<<<<<<<<<<<<< + * __ARRAY_TYPES.append(pandas.Series) + * __PANDAS_DATAFRAME = pandas.DataFrame + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INPUT_ARRAYS_TYPES); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 31, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pandas); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 31, __pyx_L18_error) @@ -70932,6 +108424,13 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":32 + * import pandas + * __INPUT_ARRAYS_TYPES.append(pandas.DataFrame) + * __ARRAY_TYPES.append(pandas.Series) # <<<<<<<<<<<<<< + * __PANDAS_DATAFRAME = pandas.DataFrame + * __PANDAS_SERIES = pandas.Series + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ARRAY_TYPES); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 32, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pandas); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 32, __pyx_L18_error) @@ -70943,6 +108442,13 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":33 + * __INPUT_ARRAYS_TYPES.append(pandas.DataFrame) + * __ARRAY_TYPES.append(pandas.Series) + * __PANDAS_DATAFRAME = pandas.DataFrame # <<<<<<<<<<<<<< + * __PANDAS_SERIES = pandas.Series + * except ImportError: + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pandas); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 33, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DataFrame); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 33, __pyx_L18_error) @@ -70951,6 +108457,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_PANDAS_DATAFRAME, __pyx_t_2) < 0) __PYX_ERR(1, 33, __pyx_L18_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":34 + * __ARRAY_TYPES.append(pandas.Series) + * __PANDAS_DATAFRAME = pandas.DataFrame + * __PANDAS_SERIES = pandas.Series # <<<<<<<<<<<<<< + * except ImportError: + * __PANDAS_DATAFRAME = None + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pandas); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 34, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Series); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 34, __pyx_L18_error) @@ -70959,6 +108472,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_PANDAS_SERIES, __pyx_t_3) < 0) __PYX_ERR(1, 34, __pyx_L18_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":29 + * + * # allow use of pandas.DataFrame for input arrays + * try: # <<<<<<<<<<<<<< + * import pandas + * __INPUT_ARRAYS_TYPES.append(pandas.DataFrame) + */ } __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; @@ -70982,6 +108502,13 @@ if (!__Pyx_RefNanny) { __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + /* "talib/_abstract.pxi":35 + * __PANDAS_DATAFRAME = pandas.DataFrame + * __PANDAS_SERIES = pandas.Series + * except ImportError: # <<<<<<<<<<<<<< + * __PANDAS_DATAFRAME = None + * __PANDAS_SERIES = None + */ __pyx_t_20 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError); if (__pyx_t_20) { __Pyx_AddTraceback("talib._ta_lib", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -70990,8 +108517,22 @@ if (!__Pyx_RefNanny) { __Pyx_GOTREF(__pyx_t_2); __Pyx_GOTREF(__pyx_t_1); + /* "talib/_abstract.pxi":36 + * __PANDAS_SERIES = pandas.Series + * except ImportError: + * __PANDAS_DATAFRAME = None # <<<<<<<<<<<<<< + * __PANDAS_SERIES = None + * + */ if (PyDict_SetItem(__pyx_d, __pyx_n_s_PANDAS_DATAFRAME, Py_None) < 0) __PYX_ERR(1, 36, __pyx_L20_except_error) + /* "talib/_abstract.pxi":37 + * except ImportError: + * __PANDAS_DATAFRAME = None + * __PANDAS_SERIES = None # <<<<<<<<<<<<<< + * + * # allow use of polars.DataFrame for input arrays + */ if (PyDict_SetItem(__pyx_d, __pyx_n_s_PANDAS_SERIES, Py_None) < 0) __PYX_ERR(1, 37, __pyx_L20_except_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -71001,6 +108542,13 @@ if (!__Pyx_RefNanny) { goto __pyx_L20_except_error; __pyx_L20_except_error:; + /* "talib/_abstract.pxi":29 + * + * # allow use of pandas.DataFrame for input arrays + * try: # <<<<<<<<<<<<<< + * import pandas + * __INPUT_ARRAYS_TYPES.append(pandas.DataFrame) + */ __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_21); @@ -71014,6 +108562,13 @@ if (!__Pyx_RefNanny) { __pyx_L23_try_end:; } + /* "talib/_abstract.pxi":40 + * + * # allow use of polars.DataFrame for input arrays + * try: # <<<<<<<<<<<<<< + * import polars + * __INPUT_ARRAYS_TYPES.append(polars.DataFrame) + */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -71023,11 +108578,25 @@ if (!__Pyx_RefNanny) { __Pyx_XGOTREF(__pyx_t_23); /*try:*/ { + /* "talib/_abstract.pxi":41 + * # allow use of polars.DataFrame for input arrays + * try: + * import polars # <<<<<<<<<<<<<< + * __INPUT_ARRAYS_TYPES.append(polars.DataFrame) + * __ARRAY_TYPES.append(polars.Series) + */ __pyx_t_1 = __Pyx_Import(__pyx_n_s_polars, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 41, __pyx_L26_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_polars, __pyx_t_1) < 0) __PYX_ERR(1, 41, __pyx_L26_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":42 + * try: + * import polars + * __INPUT_ARRAYS_TYPES.append(polars.DataFrame) # <<<<<<<<<<<<<< + * __ARRAY_TYPES.append(polars.Series) + * __POLARS_DATAFRAME = polars.DataFrame + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INPUT_ARRAYS_TYPES); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 42, __pyx_L26_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_polars); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 42, __pyx_L26_error) @@ -71039,6 +108608,13 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":43 + * import polars + * __INPUT_ARRAYS_TYPES.append(polars.DataFrame) + * __ARRAY_TYPES.append(polars.Series) # <<<<<<<<<<<<<< + * __POLARS_DATAFRAME = polars.DataFrame + * __POLARS_SERIES = polars.Series + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ARRAY_TYPES); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 43, __pyx_L26_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_polars); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 43, __pyx_L26_error) @@ -71050,6 +108626,13 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":44 + * __INPUT_ARRAYS_TYPES.append(polars.DataFrame) + * __ARRAY_TYPES.append(polars.Series) + * __POLARS_DATAFRAME = polars.DataFrame # <<<<<<<<<<<<<< + * __POLARS_SERIES = polars.Series + * except ImportError: + */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_polars); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 44, __pyx_L26_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_DataFrame); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 44, __pyx_L26_error) @@ -71058,6 +108641,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_POLARS_DATAFRAME, __pyx_t_3) < 0) __PYX_ERR(1, 44, __pyx_L26_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":45 + * __ARRAY_TYPES.append(polars.Series) + * __POLARS_DATAFRAME = polars.DataFrame + * __POLARS_SERIES = polars.Series # <<<<<<<<<<<<<< + * except ImportError: + * __POLARS_DATAFRAME = None + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_polars); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 45, __pyx_L26_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Series); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 45, __pyx_L26_error) @@ -71066,6 +108656,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_POLARS_SERIES, __pyx_t_2) < 0) __PYX_ERR(1, 45, __pyx_L26_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":40 + * + * # allow use of polars.DataFrame for input arrays + * try: # <<<<<<<<<<<<<< + * import polars + * __INPUT_ARRAYS_TYPES.append(polars.DataFrame) + */ } __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; @@ -71089,6 +108686,13 @@ if (!__Pyx_RefNanny) { __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + /* "talib/_abstract.pxi":46 + * __POLARS_DATAFRAME = polars.DataFrame + * __POLARS_SERIES = polars.Series + * except ImportError: # <<<<<<<<<<<<<< + * __POLARS_DATAFRAME = None + * __POLARS_SERIES = None + */ __pyx_t_20 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError); if (__pyx_t_20) { __Pyx_AddTraceback("talib._ta_lib", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -71097,8 +108701,22 @@ if (!__Pyx_RefNanny) { __Pyx_GOTREF(__pyx_t_3); __Pyx_GOTREF(__pyx_t_1); + /* "talib/_abstract.pxi":47 + * __POLARS_SERIES = polars.Series + * except ImportError: + * __POLARS_DATAFRAME = None # <<<<<<<<<<<<<< + * __POLARS_SERIES = None + * + */ if (PyDict_SetItem(__pyx_d, __pyx_n_s_POLARS_DATAFRAME, Py_None) < 0) __PYX_ERR(1, 47, __pyx_L28_except_error) + /* "talib/_abstract.pxi":48 + * except ImportError: + * __POLARS_DATAFRAME = None + * __POLARS_SERIES = None # <<<<<<<<<<<<<< + * + * __INPUT_ARRAYS_TYPES = tuple(__INPUT_ARRAYS_TYPES) + */ if (PyDict_SetItem(__pyx_d, __pyx_n_s_POLARS_SERIES, Py_None) < 0) __PYX_ERR(1, 48, __pyx_L28_except_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -71108,6 +108726,13 @@ if (!__Pyx_RefNanny) { goto __pyx_L28_except_error; __pyx_L28_except_error:; + /* "talib/_abstract.pxi":40 + * + * # allow use of polars.DataFrame for input arrays + * try: # <<<<<<<<<<<<<< + * import polars + * __INPUT_ARRAYS_TYPES.append(polars.DataFrame) + */ __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); @@ -71121,6 +108746,13 @@ if (!__Pyx_RefNanny) { __pyx_L31_try_end:; } + /* "talib/_abstract.pxi":50 + * __POLARS_SERIES = None + * + * __INPUT_ARRAYS_TYPES = tuple(__INPUT_ARRAYS_TYPES) # <<<<<<<<<<<<<< + * __ARRAY_TYPES = tuple(__ARRAY_TYPES) + * + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INPUT_ARRAYS_TYPES); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 50, __pyx_L1_error) @@ -71129,6 +108761,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_INPUT_ARRAYS_TYPES, __pyx_t_3) < 0) __PYX_ERR(1, 50, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + /* "talib/_abstract.pxi":51 + * + * __INPUT_ARRAYS_TYPES = tuple(__INPUT_ARRAYS_TYPES) + * __ARRAY_TYPES = tuple(__ARRAY_TYPES) # <<<<<<<<<<<<<< + * + * + */ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ARRAY_TYPES); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 51, __pyx_L1_error) @@ -71137,6 +108776,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARRAY_TYPES, __pyx_t_1) < 0) __PYX_ERR(1, 51, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":54 + * + * + * if sys.version >= '3': # <<<<<<<<<<<<<< + * + * def str2bytes(s): + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_version); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 54, __pyx_L1_error) @@ -71148,25 +108794,60 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_25) { + /* "talib/_abstract.pxi":56 + * if sys.version >= '3': + * + * def str2bytes(s): # <<<<<<<<<<<<<< + * return bytes(s, 'ascii') + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_335str2bytes, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_str2bytes, __pyx_t_1) < 0) __PYX_ERR(1, 56, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":59 + * return bytes(s, 'ascii') + * + * def bytes2str(b): # <<<<<<<<<<<<<< + * return b.decode('ascii') + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_337bytes2str, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_bytes2str, __pyx_t_1) < 0) __PYX_ERR(1, 59, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":54 + * + * + * if sys.version >= '3': # <<<<<<<<<<<<<< + * + * def str2bytes(s): + */ goto __pyx_L34; } + /* "talib/_abstract.pxi":64 + * else: + * + * def str2bytes(s): # <<<<<<<<<<<<<< + * return s + * + */ /*else*/ { __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_339str2bytes, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_str2bytes, __pyx_t_1) < 0) __PYX_ERR(1, 64, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":67 + * return s + * + * def bytes2str(b): # <<<<<<<<<<<<<< + * return b + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_341bytes2str, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_bytes2str, __pyx_t_1) < 0) __PYX_ERR(1, 67, __pyx_L1_error) @@ -71174,58 +108855,142 @@ if (!__Pyx_RefNanny) { } __pyx_L34:; + /* "talib/_abstract.pxi":70 + * return b + * + * class Function(object): # <<<<<<<<<<<<<< + * """ + * This is a pythonic wrapper around TALIB's abstract interface. It is + */ __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__364); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__364, __pyx_n_s_Function, __pyx_n_s_Function, (PyObject *) NULL, __pyx_n_s_talib__ta_lib, __pyx_kp_s_This_is_a_pythonic_wrapper_arou); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); + /* "talib/_abstract.pxi":99 + * """ + * + * def __init__(self, function_name, func_object, *args, **kwargs): # <<<<<<<<<<<<<< + * # make sure the function_name is valid and define all of our variables + * self.__name = function_name.upper() + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_1__init__, 0, __pyx_n_s_Function___init, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__366)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_2) < 0) __PYX_ERR(1, 99, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":118 + * self.func_object = func_object + * + * def __initialize_function_info(self): # <<<<<<<<<<<<<< + * # function info + * self.__info = _ta_getFuncInfo(self.__name) + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_3__initialize_function_info, 0, __pyx_n_s_Function___initialize_function_i, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__368)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_Function__initialize_function_i, __pyx_t_2) < 0) __PYX_ERR(1, 118, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":148 + * + * @property + * def info(self): # <<<<<<<<<<<<<< + * """ + * Returns a copy of the function's info dict. + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_5info, 0, __pyx_n_s_Function_info, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__370)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); + /* "talib/_abstract.pxi":147 + * self.__info['output_names'] = self.output_names + * + * @property # <<<<<<<<<<<<<< + * def info(self): + * """ + */ __pyx_t_16 = __Pyx_PyObject_CallOneArg(__pyx_builtin_property, __pyx_t_2); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_info, __pyx_t_16) < 0) __PYX_ERR(1, 148, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* "talib/_abstract.pxi":155 + * + * @property + * def function_flags(self): # <<<<<<<<<<<<<< + * """ + * Returns any function flags defined for this indicator function. + */ __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_7function_flags, 0, __pyx_n_s_Function_function_flags, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__372)); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 155, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); + /* "talib/_abstract.pxi":154 + * return self.__info.copy() + * + * @property # <<<<<<<<<<<<<< + * def function_flags(self): + * """ + */ __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_property, __pyx_t_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_function_flags, __pyx_t_2) < 0) __PYX_ERR(1, 155, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":162 + * + * @property + * def output_flags(self): # <<<<<<<<<<<<<< + * """ + * Returns the flags for each output for this indicator function. + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_9output_flags, 0, __pyx_n_s_Function_output_flags, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__374)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 162, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); + /* "talib/_abstract.pxi":161 + * return self.__info['function_flags'] + * + * @property # <<<<<<<<<<<<<< + * def output_flags(self): + * """ + */ __pyx_t_16 = __Pyx_PyObject_CallOneArg(__pyx_builtin_property, __pyx_t_2); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_output_flags, __pyx_t_16) < 0) __PYX_ERR(1, 162, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* "talib/_abstract.pxi":168 + * return self.__info['output_flags'].copy() + * + * def get_input_names(self): # <<<<<<<<<<<<<< + * """ + * Returns the dict of input price series names that specifies which + */ __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_11get_input_names, 0, __pyx_n_s_Function_get_input_names, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__376)); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_get_input_names, __pyx_t_16) < 0) __PYX_ERR(1, 168, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* "talib/_abstract.pxi":178 + * return ret + * + * def set_input_names(self, input_names): # <<<<<<<<<<<<<< + * """ + * Sets the input price series names to use. + */ __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_13set_input_names, 0, __pyx_n_s_Function_set_input_names, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__378)); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_set_input_names, __pyx_t_16) < 0) __PYX_ERR(1, 178, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* "talib/_abstract.pxi":187 + * self.__outputs_valid = False + * + * input_names = property(get_input_names, set_input_names) # <<<<<<<<<<<<<< + * + * def get_input_arrays(self): + */ __pyx_t_16 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_get_input_names); if (unlikely(!__pyx_t_16)) { PyErr_Clear(); @@ -71254,16 +109019,37 @@ if (!__Pyx_RefNanny) { if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_input_names, __pyx_t_2) < 0) __PYX_ERR(1, 187, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":189 + * input_names = property(get_input_names, set_input_names) + * + * def get_input_arrays(self): # <<<<<<<<<<<<<< + * """ + * Returns a copy of the dict of input arrays in use. + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_15get_input_arrays, 0, __pyx_n_s_Function_get_input_arrays, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__380)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 189, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_get_input_arrays, __pyx_t_2) < 0) __PYX_ERR(1, 189, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":199 + * return self.__input_arrays.copy() + * + * def set_input_arrays(self, input_arrays): # <<<<<<<<<<<<<< + * """ + * Sets the dict of input_arrays to use. Returns True/False for + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_17set_input_arrays, 0, __pyx_n_s_Function_set_input_arrays, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__382)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_set_input_arrays, __pyx_t_2) < 0) __PYX_ERR(1, 199, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":245 + * return False + * + * input_arrays = property(get_input_arrays, set_input_arrays) # <<<<<<<<<<<<<< + * + * def get_parameters(self): + */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_get_input_arrays); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); @@ -71292,17 +109078,38 @@ if (!__Pyx_RefNanny) { if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_input_arrays, __pyx_t_13) < 0) __PYX_ERR(1, 245, __pyx_L1_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + /* "talib/_abstract.pxi":247 + * input_arrays = property(get_input_arrays, set_input_arrays) + * + * def get_parameters(self): # <<<<<<<<<<<<<< + * """ + * Returns the function's optional parameters and their default values. + */ __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_19get_parameters, 0, __pyx_n_s_Function_get_parameters, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__384)); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_get_parameters, __pyx_t_13) < 0) __PYX_ERR(1, 247, __pyx_L1_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + /* "talib/_abstract.pxi":256 + * return ret + * + * def set_parameters(self, parameters=None, **kwargs): # <<<<<<<<<<<<<< + * """ + * Sets the function parameter values. + */ __pyx_t_13 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_21set_parameters, 0, __pyx_n_s_Function_set_parameters, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__386)); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_13, __pyx_tuple__387); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_set_parameters, __pyx_t_13) < 0) __PYX_ERR(1, 256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + /* "talib/_abstract.pxi":268 + * self.__info['parameters'] = self.parameters + * + * parameters = property(get_parameters, set_parameters) # <<<<<<<<<<<<<< + * + * def set_function_args(self, *args, **kwargs): + */ __pyx_t_13 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_get_parameters); if (unlikely(!__pyx_t_13)) { PyErr_Clear(); @@ -71331,84 +109138,203 @@ if (!__Pyx_RefNanny) { if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_parameters, __pyx_t_16) < 0) __PYX_ERR(1, 268, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* "talib/_abstract.pxi":270 + * parameters = property(get_parameters, set_parameters) + * + * def set_function_args(self, *args, **kwargs): # <<<<<<<<<<<<<< + * """ + * optional args:[input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs] + */ __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_23set_function_args, 0, __pyx_n_s_Function_set_function_args, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__389)); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_set_function_args, __pyx_t_16) < 0) __PYX_ERR(1, 270, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* "talib/_abstract.pxi":305 + * + * @property + * def lookback(self): # <<<<<<<<<<<<<< + * """ + * Returns the lookback window size for the function with the parameter + */ __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_25lookback, 0, __pyx_n_s_Function_lookback, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__391)); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); + /* "talib/_abstract.pxi":304 + * self.__outputs_valid = False + * + * @property # <<<<<<<<<<<<<< + * def lookback(self): + * """ + */ __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_property, __pyx_t_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_lookback, __pyx_t_2) < 0) __PYX_ERR(1, 305, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":325 + * + * @property + * def output_names(self): # <<<<<<<<<<<<<< + * """ + * Returns a list of the output names returned by this function. + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_27output_names, 0, __pyx_n_s_Function_output_names, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__393)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); + /* "talib/_abstract.pxi":324 + * return lookback + * + * @property # <<<<<<<<<<<<<< + * def output_names(self): + * """ + */ __pyx_t_16 = __Pyx_PyObject_CallOneArg(__pyx_builtin_property, __pyx_t_2); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_output_names, __pyx_t_16) < 0) __PYX_ERR(1, 325, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* "talib/_abstract.pxi":335 + * + * @property + * def outputs(self): # <<<<<<<<<<<<<< + * """ + * Returns the TA function values for the currently set input_arrays and + */ __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_29outputs, 0, __pyx_n_s_Function_outputs, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__395)); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); + /* "talib/_abstract.pxi":334 + * return ret + * + * @property # <<<<<<<<<<<<<< + * def outputs(self): + * """ + */ __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_property, __pyx_t_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 334, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_outputs, __pyx_t_2) < 0) __PYX_ERR(1, 335, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":365 + * return ret[0] if len(ret) == 1 else ret + * + * def run(self, input_arrays=None): # <<<<<<<<<<<<<< + * """ + * run([input_arrays=None]) + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_31run, 0, __pyx_n_s_Function_run, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__397)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__398); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_run, __pyx_t_2) < 0) __PYX_ERR(1, 365, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":377 + * return self.outputs + * + * def __call__(self, *args, **kwargs): # <<<<<<<<<<<<<< + * """ + * func_instance([input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs]) + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_33__call__, 0, __pyx_n_s_Function___call, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__400)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_call, __pyx_t_2) < 0) __PYX_ERR(1, 377, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":442 + * + * # figure out which price series names we're using for inputs + * def __input_price_series_names(self): # <<<<<<<<<<<<<< + * input_price_series_names = [] + * for input_name in self.__input_names: + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_35__input_price_series_names, 0, __pyx_n_s_Function___input_price_series_na, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__402)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_Function__input_price_series_na, __pyx_t_2) < 0) __PYX_ERR(1, 442, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":453 + * return input_price_series_names + * + * def __call_function(self): # <<<<<<<<<<<<<< + * input_price_series_names = self.__input_price_series_names() + * + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_37__call_function, 0, __pyx_n_s_Function___call_function, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__404)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_Function__call_function, __pyx_t_2) < 0) __PYX_ERR(1, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":483 + * self.__outputs_valid = True + * + * def __check_opt_input_value(self, input_name, value): # <<<<<<<<<<<<<< + * type_ = self.__opt_inputs[input_name]['type'] + * if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}: + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_39__check_opt_input_value, 0, __pyx_n_s_Function___check_opt_input_value, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__406)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_Function__check_opt_input_value, __pyx_t_2) < 0) __PYX_ERR(1, 483, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":498 + * return False + * + * def __get_opt_input_value(self, input_name): # <<<<<<<<<<<<<< + * """ + * Returns the user-set value if there is one, otherwise the default. + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_41__get_opt_input_value, 0, __pyx_n_s_Function___get_opt_input_value, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__408)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_Function__get_opt_input_value, __pyx_t_2) < 0) __PYX_ERR(1, 498, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":507 + * return value + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return '%s' % self.info + * + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_43__repr__, 0, __pyx_n_s_Function___repr, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__410)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 507, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_repr, __pyx_t_2) < 0) __PYX_ERR(1, 507, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":510 + * return '%s' % self.info + * + * def __unicode__(self): # <<<<<<<<<<<<<< + * return unicode(self.__str__()) + * + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_45__unicode__, 0, __pyx_n_s_Function___unicode, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__412)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 510, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_unicode, __pyx_t_2) < 0) __PYX_ERR(1, 510, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":513 + * return unicode(self.__str__()) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return _get_defaults_and_docs(self.info)[1] # docstring includes defaults + * + */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5talib_7_ta_lib_8Function_47__str__, 0, __pyx_n_s_Function___str, NULL, __pyx_n_s_talib__ta_lib, __pyx_d, ((PyObject *)__pyx_codeobj__414)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 513, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_str, __pyx_t_2) < 0) __PYX_ERR(1, 513, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "talib/_abstract.pxi":70 + * return b + * + * class Function(object): # <<<<<<<<<<<<<< + * """ + * This is a pythonic wrapper around TALIB's abstract interface. It is + */ __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_Function, __pyx_tuple__364, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_Function, __pyx_t_2) < 0) __PYX_ERR(1, 70, __pyx_L1_error) @@ -71416,21 +109342,49 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":527 + * # therefore recommended over using these functions directly. + * + * def _ta_getGroupTable(): # <<<<<<<<<<<<<< + * """ + * Returns the list of available TALIB function group names. *slow* + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_343_ta_getGroupTable, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_getGroupTable, __pyx_t_1) < 0) __PYX_ERR(1, 527, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":539 + * return groups + * + * def _ta_getFuncTable(char *group): # <<<<<<<<<<<<<< + * """ + * Returns a list of the functions for the specified group name. *slow* + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_345_ta_getFuncTable, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_getFuncTable, __pyx_t_1) < 0) __PYX_ERR(1, 539, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":551 + * return functions + * + * def __get_flags(int flag, dict flags_lookup_dict): # <<<<<<<<<<<<<< + * """ + * TA-LIB provides hints for multiple flags as a bitwise-ORed int. + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_347__get_flags, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 551, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_flags, __pyx_t_1) < 0) __PYX_ERR(1, 551, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":577 + * + * TA_FUNC_FLAGS = { + * 16777216: 'Output scale same as input', # <<<<<<<<<<<<<< + * 67108864: 'Output is over volume', + * 134217728: 'Function has an unstable period', + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_int_16777216, __pyx_kp_s_Output_scale_same_as_input) < 0) __PYX_ERR(1, 577, __pyx_L1_error) @@ -71440,6 +109394,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_TA_FUNC_FLAGS, __pyx_t_1) < 0) __PYX_ERR(1, 576, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":585 + * # when flag is 0, the function (should) work on any reasonable input ndarray + * TA_INPUT_FLAGS = { + * 1: 'open', # <<<<<<<<<<<<<< + * 2: 'high', + * 4: 'low', + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_int_1, __pyx_n_s_open) < 0) __PYX_ERR(1, 585, __pyx_L1_error) @@ -71452,6 +109413,13 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_TA_INPUT_FLAGS, __pyx_t_1) < 0) __PYX_ERR(1, 584, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":595 + * + * TA_OUTPUT_FLAGS = { + * 1: 'Line', # <<<<<<<<<<<<<< + * 2: 'Dotted Line', + * 4: 'Dashed Line', + */ __pyx_t_1 = __Pyx_PyDict_NewPresized(13); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_int_1, __pyx_n_s_Line) < 0) __PYX_ERR(1, 595, __pyx_L1_error) @@ -71470,821 +109438,1967 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_TA_OUTPUT_FLAGS, __pyx_t_1) < 0) __PYX_ERR(1, 594, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":610 + * } + * + * def _ta_getFuncInfo(char *function_name): # <<<<<<<<<<<<<< + * """ + * Returns the info dict for the function. It has the following keys: name, + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_349_ta_getFuncInfo, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_getFuncInfo, __pyx_t_1) < 0) __PYX_ERR(1, 610, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":629 + * } + * + * def _ta_getInputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's input info dict for the given index. It has two + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_351_ta_getInputParameterInfo, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_getInputParameterInfo, __pyx_t_1) < 0) __PYX_ERR(1, 629, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":650 + * } + * + * def _ta_getOptInputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's opt_input info dict for the given index. It has the + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_353_ta_getOptInputParameterInfo, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_getOptInputParameterInfo, __pyx_t_1) < 0) __PYX_ERR(1, 650, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":674 + * } + * + * def _ta_getOutputParameterInfo(char *function_name, int idx): # <<<<<<<<<<<<<< + * """ + * Returns the function's output info dict for the given index. It has two + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_355_ta_getOutputParameterInfo, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ta_getOutputParameterInfo, __pyx_t_1) < 0) __PYX_ERR(1, 674, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_abstract.pxi":694 + * } + * + * def _get_defaults_and_docs(func_info): # <<<<<<<<<<<<<< + * """ + * Returns a tuple with two outputs: defaults, a dict of parameter defaults, + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_357_get_defaults_and_docs, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_defaults_and_docs, __pyx_t_1) < 0) __PYX_ERR(1, 694, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":11 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ACOS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ACOS(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_359stream_ACOS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ACOS, __pyx_t_1) < 0) __PYX_ERR(3, 11, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":38 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ AD(high, low, close, volume) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_361stream_AD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 38, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_AD, __pyx_t_1) < 0) __PYX_ERR(3, 38, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":74 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADD( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ ADD(real0, real1) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_363stream_ADD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ADD, __pyx_t_1) < 0) __PYX_ERR(3, 74, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":105 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_365stream_ADOSC, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ADOSC, __pyx_t_1) < 0) __PYX_ERR(3, 105, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":144 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADX(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_367stream_ADX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 144, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ADX, __pyx_t_1) < 0) __PYX_ERR(3, 144, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":179 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ADXR(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_369stream_ADXR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ADXR, __pyx_t_1) < 0) __PYX_ERR(3, 179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":214 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ APO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_371stream_APO, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 214, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_APO, __pyx_t_1) < 0) __PYX_ERR(3, 214, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":245 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROON(high, low[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_373stream_AROON, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 245, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_AROON, __pyx_t_1) < 0) __PYX_ERR(3, 245, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":280 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ AROONOSC(high, low[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_375stream_AROONOSC, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_AROONOSC, __pyx_t_1) < 0) __PYX_ERR(3, 280, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":312 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ASIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ASIN(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_377stream_ASIN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ASIN, __pyx_t_1) < 0) __PYX_ERR(3, 312, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":339 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ATAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ ATAN(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_379stream_ATAN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ATAN, __pyx_t_1) < 0) __PYX_ERR(3, 339, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":366 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ATR(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_381stream_ATR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ATR, __pyx_t_1) < 0) __PYX_ERR(3, 366, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":401 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ AVGPRICE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_383stream_AVGPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_AVGPRICE, __pyx_t_1) < 0) __PYX_ERR(3, 401, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":437 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ): # <<<<<<<<<<<<<< + * """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_385stream_BBANDS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_BBANDS, __pyx_t_1) < 0) __PYX_ERR(3, 437, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":475 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ BETA(real0, real1[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_387stream_BETA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_BETA, __pyx_t_1) < 0) __PYX_ERR(3, 475, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":508 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ BOP(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_389stream_BOP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_BOP, __pyx_t_1) < 0) __PYX_ERR(3, 508, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":544 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CCI(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_391stream_CCI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CCI, __pyx_t_1) < 0) __PYX_ERR(3, 544, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":579 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL2CROWS(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_393stream_CDL2CROWS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDL2CROWS, __pyx_t_1) < 0) __PYX_ERR(3, 579, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":615 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3BLACKCROWS(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_395stream_CDL3BLACKCROWS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDL3BLACKCROWS, __pyx_t_1) < 0) __PYX_ERR(3, 615, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":651 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3INSIDE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_397stream_CDL3INSIDE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDL3INSIDE, __pyx_t_1) < 0) __PYX_ERR(3, 651, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3LINESTRIKE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_399stream_CDL3LINESTRIKE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDL3LINESTRIKE, __pyx_t_1) < 0) __PYX_ERR(3, 687, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":723 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3OUTSIDE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_401stream_CDL3OUTSIDE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDL3OUTSIDE, __pyx_t_1) < 0) __PYX_ERR(3, 723, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":759 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3STARSINSOUTH(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_403stream_CDL3STARSINSOUTH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 759, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDL3STARSINSOUTH, __pyx_t_1) < 0) __PYX_ERR(3, 759, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":795 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDL3WHITESOLDIERS(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_405stream_CDL3WHITESOLDIERS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDL3WHITESOLDIERS, __pyx_t_1) < 0) __PYX_ERR(3, 795, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":831 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLABANDONEDBABY(open, high, low, close[, penetration=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_407stream_CDLABANDONEDBABY, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 831, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLABANDONEDBABY, __pyx_t_1) < 0) __PYX_ERR(3, 831, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":869 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLADVANCEBLOCK(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_409stream_CDLADVANCEBLOCK, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLADVANCEBLOCK, __pyx_t_1) < 0) __PYX_ERR(3, 869, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBELTHOLD(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_411stream_CDLBELTHOLD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLBELTHOLD, __pyx_t_1) < 0) __PYX_ERR(3, 905, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":941 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLBREAKAWAY(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_413stream_CDLBREAKAWAY, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLBREAKAWAY, __pyx_t_1) < 0) __PYX_ERR(3, 941, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":977 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCLOSINGMARUBOZU(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_415stream_CDLCLOSINGMARUBOZU, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 977, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLCLOSINGMARUBOZU, __pyx_t_1) < 0) __PYX_ERR(3, 977, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1013 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCONCEALBABYSWALL(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_417stream_CDLCONCEALBABYSWALL, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1013, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLCONCEALBABYSWALL, __pyx_t_1) < 0) __PYX_ERR(3, 1013, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1049 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLCOUNTERATTACK(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_419stream_CDLCOUNTERATTACK, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1049, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLCOUNTERATTACK, __pyx_t_1) < 0) __PYX_ERR(3, 1049, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1085 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_421stream_CDLDARKCLOUDCOVER, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLDARKCLOUDCOVER, __pyx_t_1) < 0) __PYX_ERR(3, 1085, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1123 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJI(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_423stream_CDLDOJI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLDOJI, __pyx_t_1) < 0) __PYX_ERR(3, 1123, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1159 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDOJISTAR(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_425stream_CDLDOJISTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLDOJISTAR, __pyx_t_1) < 0) __PYX_ERR(3, 1159, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1195 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLDRAGONFLYDOJI(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_427stream_CDLDRAGONFLYDOJI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLDRAGONFLYDOJI, __pyx_t_1) < 0) __PYX_ERR(3, 1195, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1231 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLENGULFING(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_429stream_CDLENGULFING, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLENGULFING, __pyx_t_1) < 0) __PYX_ERR(3, 1231, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1267 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_431stream_CDLEVENINGDOJISTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1267, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLEVENINGDOJISTAR, __pyx_t_1) < 0) __PYX_ERR(3, 1267, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1305 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLEVENINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLEVENINGSTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_433stream_CDLEVENINGSTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLEVENINGSTAR, __pyx_t_1) < 0) __PYX_ERR(3, 1305, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1343 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLGAPSIDESIDEWHITE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGAPSIDESIDEWHITE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_435stream_CDLGAPSIDESIDEWHITE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLGAPSIDESIDEWHITE, __pyx_t_1) < 0) __PYX_ERR(3, 1343, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1379 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLGRAVESTONEDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLGRAVESTONEDOJI(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_437stream_CDLGRAVESTONEDOJI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLGRAVESTONEDOJI, __pyx_t_1) < 0) __PYX_ERR(3, 1379, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1415 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHAMMER(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_439stream_CDLHAMMER, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLHAMMER, __pyx_t_1) < 0) __PYX_ERR(3, 1415, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1451 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHANGINGMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHANGINGMAN(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_441stream_CDLHANGINGMAN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLHANGINGMAN, __pyx_t_1) < 0) __PYX_ERR(3, 1451, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1487 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHARAMI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMI(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_443stream_CDLHARAMI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1487, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLHARAMI, __pyx_t_1) < 0) __PYX_ERR(3, 1487, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1523 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHARAMICROSS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHARAMICROSS(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_445stream_CDLHARAMICROSS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLHARAMICROSS, __pyx_t_1) < 0) __PYX_ERR(3, 1523, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1559 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIGHWAVE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIGHWAVE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_447stream_CDLHIGHWAVE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLHIGHWAVE, __pyx_t_1) < 0) __PYX_ERR(3, 1559, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1595 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIKKAKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_449stream_CDLHIKKAKE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLHIKKAKE, __pyx_t_1) < 0) __PYX_ERR(3, 1595, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1631 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHIKKAKEMOD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHIKKAKEMOD(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_451stream_CDLHIKKAKEMOD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLHIKKAKEMOD, __pyx_t_1) < 0) __PYX_ERR(3, 1631, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1667 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLHOMINGPIGEON( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLHOMINGPIGEON(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_453stream_CDLHOMINGPIGEON, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLHOMINGPIGEON, __pyx_t_1) < 0) __PYX_ERR(3, 1667, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1703 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLIDENTICAL3CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLIDENTICAL3CROWS(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_455stream_CDLIDENTICAL3CROWS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLIDENTICAL3CROWS, __pyx_t_1) < 0) __PYX_ERR(3, 1703, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1739 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLINNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINNECK(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_457stream_CDLINNECK, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLINNECK, __pyx_t_1) < 0) __PYX_ERR(3, 1739, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1775 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLINVERTEDHAMMER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLINVERTEDHAMMER(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_459stream_CDLINVERTEDHAMMER, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1775, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLINVERTEDHAMMER, __pyx_t_1) < 0) __PYX_ERR(3, 1775, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1811 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLKICKING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKING(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_461stream_CDLKICKING, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLKICKING, __pyx_t_1) < 0) __PYX_ERR(3, 1811, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1847 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLKICKINGBYLENGTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLKICKINGBYLENGTH(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_463stream_CDLKICKINGBYLENGTH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1847, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLKICKINGBYLENGTH, __pyx_t_1) < 0) __PYX_ERR(3, 1847, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1883 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLADDERBOTTOM( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLADDERBOTTOM(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_465stream_CDLLADDERBOTTOM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLLADDERBOTTOM, __pyx_t_1) < 0) __PYX_ERR(3, 1883, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1919 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLONGLEGGEDDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLEGGEDDOJI(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_467stream_CDLLONGLEGGEDDOJI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1919, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLLONGLEGGEDDOJI, __pyx_t_1) < 0) __PYX_ERR(3, 1919, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1955 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLLONGLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLLONGLINE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_469stream_CDLLONGLINE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1955, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLLONGLINE, __pyx_t_1) < 0) __PYX_ERR(3, 1955, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":1991 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMARUBOZU(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_471stream_CDLMARUBOZU, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLMARUBOZU, __pyx_t_1) < 0) __PYX_ERR(3, 1991, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2027 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMATCHINGLOW( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLMATCHINGLOW(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_473stream_CDLMATCHINGLOW, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2027, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLMATCHINGLOW, __pyx_t_1) < 0) __PYX_ERR(3, 2027, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2063 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMATHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ): # <<<<<<<<<<<<<< + * """ CDLMATHOLD(open, high, low, close[, penetration=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_475stream_CDLMATHOLD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2063, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLMATHOLD, __pyx_t_1) < 0) __PYX_ERR(3, 2063, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2101 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMORNINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGDOJISTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_477stream_CDLMORNINGDOJISTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLMORNINGDOJISTAR, __pyx_t_1) < 0) __PYX_ERR(3, 2101, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2139 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLMORNINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ): # <<<<<<<<<<<<<< + * """ CDLMORNINGSTAR(open, high, low, close[, penetration=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_479stream_CDLMORNINGSTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLMORNINGSTAR, __pyx_t_1) < 0) __PYX_ERR(3, 2139, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2177 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLONNECK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLONNECK(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_481stream_CDLONNECK, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLONNECK, __pyx_t_1) < 0) __PYX_ERR(3, 2177, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2213 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLPIERCING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLPIERCING(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_483stream_CDLPIERCING, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2213, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLPIERCING, __pyx_t_1) < 0) __PYX_ERR(3, 2213, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2249 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLRICKSHAWMAN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRICKSHAWMAN(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_485stream_CDLRICKSHAWMAN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLRICKSHAWMAN, __pyx_t_1) < 0) __PYX_ERR(3, 2249, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2285 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLRISEFALL3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLRISEFALL3METHODS(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_487stream_CDLRISEFALL3METHODS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLRISEFALL3METHODS, __pyx_t_1) < 0) __PYX_ERR(3, 2285, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2321 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSEPARATINGLINES( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSEPARATINGLINES(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_489stream_CDLSEPARATINGLINES, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2321, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLSEPARATINGLINES, __pyx_t_1) < 0) __PYX_ERR(3, 2321, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2357 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSHOOTINGSTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHOOTINGSTAR(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_491stream_CDLSHOOTINGSTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2357, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLSHOOTINGSTAR, __pyx_t_1) < 0) __PYX_ERR(3, 2357, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2393 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSHORTLINE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSHORTLINE(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_493stream_CDLSHORTLINE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLSHORTLINE, __pyx_t_1) < 0) __PYX_ERR(3, 2393, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2429 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSPINNINGTOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSPINNINGTOP(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_495stream_CDLSPINNINGTOP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLSPINNINGTOP, __pyx_t_1) < 0) __PYX_ERR(3, 2429, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2465 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSTALLEDPATTERN( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTALLEDPATTERN(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_497stream_CDLSTALLEDPATTERN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2465, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLSTALLEDPATTERN, __pyx_t_1) < 0) __PYX_ERR(3, 2465, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2501 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLSTICKSANDWICH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLSTICKSANDWICH(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_499stream_CDLSTICKSANDWICH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLSTICKSANDWICH, __pyx_t_1) < 0) __PYX_ERR(3, 2501, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2537 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTAKURI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTAKURI(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_501stream_CDLTAKURI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLTAKURI, __pyx_t_1) < 0) __PYX_ERR(3, 2537, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2573 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTASUKIGAP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTASUKIGAP(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_503stream_CDLTASUKIGAP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLTASUKIGAP, __pyx_t_1) < 0) __PYX_ERR(3, 2573, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2609 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTHRUSTING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTHRUSTING(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_505stream_CDLTHRUSTING, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLTHRUSTING, __pyx_t_1) < 0) __PYX_ERR(3, 2609, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2645 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLTRISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLTRISTAR(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_507stream_CDLTRISTAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2645, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLTRISTAR, __pyx_t_1) < 0) __PYX_ERR(3, 2645, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2681 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLUNIQUE3RIVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUNIQUE3RIVER(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_509stream_CDLUNIQUE3RIVER, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLUNIQUE3RIVER, __pyx_t_1) < 0) __PYX_ERR(3, 2681, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2717 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLUPSIDEGAP2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLUPSIDEGAP2CROWS(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_511stream_CDLUPSIDEGAP2CROWS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLUPSIDEGAP2CROWS, __pyx_t_1) < 0) __PYX_ERR(3, 2717, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2753 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CDLXSIDEGAP3METHODS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ CDLXSIDEGAP3METHODS(open, high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_513stream_CDLXSIDEGAP3METHODS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2753, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CDLXSIDEGAP3METHODS, __pyx_t_1) < 0) __PYX_ERR(3, 2753, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2789 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CEIL( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ CEIL(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_515stream_CEIL, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2789, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CEIL, __pyx_t_1) < 0) __PYX_ERR(3, 2789, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2816 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CMO( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CMO(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_517stream_CMO, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CMO, __pyx_t_1) < 0) __PYX_ERR(3, 2816, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2845 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_CORREL( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ CORREL(real0, real1[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_519stream_CORREL, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2845, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_CORREL, __pyx_t_1) < 0) __PYX_ERR(3, 2845, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2878 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_COS( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COS(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_521stream_COS, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_COS, __pyx_t_1) < 0) __PYX_ERR(3, 2878, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_COSH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ COSH(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_523stream_COSH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_COSH, __pyx_t_1) < 0) __PYX_ERR(3, 2905, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2932 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DEMA(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_525stream_DEMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_DEMA, __pyx_t_1) < 0) __PYX_ERR(3, 2932, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2961 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DIV( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ DIV(real0, real1) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_527stream_DIV, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2961, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_DIV, __pyx_t_1) < 0) __PYX_ERR(3, 2961, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":2992 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_DX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ DX(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_529stream_DX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 2992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_DX, __pyx_t_1) < 0) __PYX_ERR(3, 2992, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3027 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_EMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ EMA(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_531stream_EMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3027, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_EMA, __pyx_t_1) < 0) __PYX_ERR(3, 3027, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3056 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_EXP( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ EXP(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_533stream_EXP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_EXP, __pyx_t_1) < 0) __PYX_ERR(3, 3056, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3083 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_FLOOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ FLOOR(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_535stream_FLOOR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3083, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_FLOOR, __pyx_t_1) < 0) __PYX_ERR(3, 3083, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3110 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_DCPERIOD( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPERIOD(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_537stream_HT_DCPERIOD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_HT_DCPERIOD, __pyx_t_1) < 0) __PYX_ERR(3, 3110, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3137 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_DCPHASE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_DCPHASE(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_539stream_HT_DCPHASE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_HT_DCPHASE, __pyx_t_1) < 0) __PYX_ERR(3, 3137, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3164 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_PHASOR( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_PHASOR(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_541stream_HT_PHASOR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3164, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_HT_PHASOR, __pyx_t_1) < 0) __PYX_ERR(3, 3164, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3194 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_SINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_SINE(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_543stream_HT_SINE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3194, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_HT_SINE, __pyx_t_1) < 0) __PYX_ERR(3, 3194, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3224 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_TRENDLINE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDLINE(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_545stream_HT_TRENDLINE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_HT_TRENDLINE, __pyx_t_1) < 0) __PYX_ERR(3, 3224, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3251 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_HT_TRENDMODE( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ HT_TRENDMODE(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_547stream_HT_TRENDMODE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_HT_TRENDMODE, __pyx_t_1) < 0) __PYX_ERR(3, 3251, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3278 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_KAMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ KAMA(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_549stream_KAMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3278, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_KAMA, __pyx_t_1) < 0) __PYX_ERR(3, 3278, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3307 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_551stream_LINEARREG, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_LINEARREG, __pyx_t_1) < 0) __PYX_ERR(3, 3307, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3336 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_ANGLE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_ANGLE(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_553stream_LINEARREG_ANGLE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_LINEARREG_ANGLE, __pyx_t_1) < 0) __PYX_ERR(3, 3336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3365 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_INTERCEPT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_INTERCEPT(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_555stream_LINEARREG_INTERCEPT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_LINEARREG_INTERCEPT, __pyx_t_1) < 0) __PYX_ERR(3, 3365, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3394 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LINEARREG_SLOPE( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ LINEARREG_SLOPE(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_557stream_LINEARREG_SLOPE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_LINEARREG_SLOPE, __pyx_t_1) < 0) __PYX_ERR(3, 3394, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3423 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LN(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_559stream_LN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_LN, __pyx_t_1) < 0) __PYX_ERR(3, 3423, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3450 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_LOG10( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ LOG10(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_561stream_LOG10, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3450, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_LOG10, __pyx_t_1) < 0) __PYX_ERR(3, 3450, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3477 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MA( np.ndarray real not None , int timeperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MA(real[, timeperiod=?, matype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_563stream_MA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3477, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MA, __pyx_t_1) < 0) __PYX_ERR(3, 3477, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3507 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACD( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACD(real[, fastperiod=?, slowperiod=?, signalperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_565stream_MACD, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3507, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MACD, __pyx_t_1) < 0) __PYX_ERR(3, 3507, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3544 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACDEXT( np.ndarray real not None , int fastperiod=-2**31 , int fastmatype=0 , int slowperiod=-2**31 , int slowmatype=0 , int signalperiod=-2**31 , int signalmatype=0 ): # <<<<<<<<<<<<<< + * """ MACDEXT(real[, fastperiod=?, fastmatype=?, slowperiod=?, slowmatype=?, signalperiod=?, signalmatype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_567stream_MACDEXT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MACDEXT, __pyx_t_1) < 0) __PYX_ERR(3, 3544, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3584 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MACDFIX( np.ndarray real not None , int signalperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MACDFIX(real[, signalperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_569stream_MACDFIX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3584, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MACDFIX, __pyx_t_1) < 0) __PYX_ERR(3, 3584, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3619 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAMA( np.ndarray real not None , double fastlimit=-4e37 , double slowlimit=-4e37 ): # <<<<<<<<<<<<<< + * """ MAMA(real[, fastlimit=?, slowlimit=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_571stream_MAMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MAMA, __pyx_t_1) < 0) __PYX_ERR(3, 3619, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3652 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAVP( np.ndarray real not None , np.ndarray periods not None , int minperiod=-2**31 , int maxperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ MAVP(real, periods[, minperiod=?, maxperiod=?, matype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_573stream_MAVP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MAVP, __pyx_t_1) < 0) __PYX_ERR(3, 3652, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3687 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAX(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_575stream_MAX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MAX, __pyx_t_1) < 0) __PYX_ERR(3, 3687, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3716 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MAXINDEX(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_577stream_MAXINDEX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MAXINDEX, __pyx_t_1) < 0) __PYX_ERR(3, 3716, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3745 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MEDPRICE( np.ndarray high not None , np.ndarray low not None ): # <<<<<<<<<<<<<< + * """ MEDPRICE(high, low) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_579stream_MEDPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MEDPRICE, __pyx_t_1) < 0) __PYX_ERR(3, 3745, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3775 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MFI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MFI(high, low, close, volume[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_581stream_MFI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3775, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MFI, __pyx_t_1) < 0) __PYX_ERR(3, 3775, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3813 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIDPOINT( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPOINT(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_583stream_MIDPOINT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MIDPOINT, __pyx_t_1) < 0) __PYX_ERR(3, 3813, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3842 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIDPRICE( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIDPRICE(high, low[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_585stream_MIDPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MIDPRICE, __pyx_t_1) < 0) __PYX_ERR(3, 3842, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3874 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MIN( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MIN(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_587stream_MIN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3874, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MIN, __pyx_t_1) < 0) __PYX_ERR(3, 3874, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3903 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MININDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MININDEX(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_589stream_MININDEX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3903, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MININDEX, __pyx_t_1) < 0) __PYX_ERR(3, 3903, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3932 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINMAX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAX(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_591stream_MINMAX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MINMAX, __pyx_t_1) < 0) __PYX_ERR(3, 3932, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3964 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINMAXINDEX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINMAXINDEX(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_593stream_MINMAXINDEX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MINMAXINDEX, __pyx_t_1) < 0) __PYX_ERR(3, 3964, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":3996 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DI(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_595stream_MINUS_DI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MINUS_DI, __pyx_t_1) < 0) __PYX_ERR(3, 3996, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4031 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MINUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MINUS_DM(high, low[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_597stream_MINUS_DM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4031, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MINUS_DM, __pyx_t_1) < 0) __PYX_ERR(3, 4031, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4063 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MOM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ MOM(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_599stream_MOM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4063, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MOM, __pyx_t_1) < 0) __PYX_ERR(3, 4063, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4092 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_MULT( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ MULT(real0, real1) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_601stream_MULT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4092, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_MULT, __pyx_t_1) < 0) __PYX_ERR(3, 4092, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4123 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_NATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ NATR(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_603stream_NATR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_NATR, __pyx_t_1) < 0) __PYX_ERR(3, 4123, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4158 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_OBV( np.ndarray real not None , np.ndarray volume not None ): # <<<<<<<<<<<<<< + * """ OBV(real, volume) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_605stream_OBV, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_OBV, __pyx_t_1) < 0) __PYX_ERR(3, 4158, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4189 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PLUS_DI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DI(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_607stream_PLUS_DI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4189, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_PLUS_DI, __pyx_t_1) < 0) __PYX_ERR(3, 4189, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4224 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PLUS_DM( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ PLUS_DM(high, low[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_609stream_PLUS_DM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_PLUS_DM, __pyx_t_1) < 0) __PYX_ERR(3, 4224, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4256 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_PPO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ): # <<<<<<<<<<<<<< + * """ PPO(real[, fastperiod=?, slowperiod=?, matype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_611stream_PPO, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_PPO, __pyx_t_1) < 0) __PYX_ERR(3, 4256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4287 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROC( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROC(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_613stream_ROC, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4287, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ROC, __pyx_t_1) < 0) __PYX_ERR(3, 4287, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4316 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCP( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCP(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_615stream_ROCP, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ROCP, __pyx_t_1) < 0) __PYX_ERR(3, 4316, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4345 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCR( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_617stream_ROCR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ROCR, __pyx_t_1) < 0) __PYX_ERR(3, 4345, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4374 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ROCR100( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ ROCR100(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_619stream_ROCR100, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ROCR100, __pyx_t_1) < 0) __PYX_ERR(3, 4374, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4403 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_RSI( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ RSI(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_621stream_RSI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_RSI, __pyx_t_1) < 0) __PYX_ERR(3, 4403, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4432 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SAR( np.ndarray high not None , np.ndarray low not None , double acceleration=0.02 , double maximum=0.2 ): # <<<<<<<<<<<<<< + * """ SAR(high, low[, acceleration=?, maximum=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_623stream_SAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_SAR, __pyx_t_1) < 0) __PYX_ERR(3, 4432, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4465 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SAREXT( np.ndarray high not None , np.ndarray low not None , double startvalue=-4e37 , double offsetonreverse=-4e37 , double accelerationinitlong=-4e37 , double accelerationlong=-4e37 , double accelerationmaxlong=-4e37 , double accelerationinitshort=-4e37 , double accelerationshort=-4e37 , double accelerationmaxshort=-4e37 ): # <<<<<<<<<<<<<< + * """ SAREXT(high, low[, startvalue=?, offsetonreverse=?, accelerationinitlong=?, accelerationlong=?, accelerationmaxlong=?, accelerationinitshort=?, accelerationshort=?, accelerationmaxshort=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_625stream_SAREXT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4465, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_SAREXT, __pyx_t_1) < 0) __PYX_ERR(3, 4465, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4504 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SIN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SIN(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_627stream_SIN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4504, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_SIN, __pyx_t_1) < 0) __PYX_ERR(3, 4504, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4531 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SINH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SINH(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_629stream_SINH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_SINH, __pyx_t_1) < 0) __PYX_ERR(3, 4531, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4558 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SMA(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_631stream_SMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_SMA, __pyx_t_1) < 0) __PYX_ERR(3, 4558, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4587 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SQRT( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ SQRT(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_633stream_SQRT, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_SQRT, __pyx_t_1) < 0) __PYX_ERR(3, 4587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4614 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STDDEV( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ STDDEV(real[, timeperiod=?, nbdev=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_635stream_STDDEV, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4614, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_STDDEV, __pyx_t_1) < 0) __PYX_ERR(3, 4614, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4644 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCH( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int slowk_period=-2**31 , int slowk_matype=0 , int slowd_period=-2**31 , int slowd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_637stream_STOCH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4644, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_STOCH, __pyx_t_1) < 0) __PYX_ERR(3, 4644, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4686 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCHF( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_639stream_STOCHF, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_STOCHF, __pyx_t_1) < 0) __PYX_ERR(3, 4686, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4726 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_STOCHRSI( np.ndarray real not None , int timeperiod=-2**31 , int fastk_period=-2**31 , int fastd_period=-2**31 , int fastd_matype=0 ): # <<<<<<<<<<<<<< + * """ STOCHRSI(real[, timeperiod=?, fastk_period=?, fastd_period=?, fastd_matype=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_641stream_STOCHRSI, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_STOCHRSI, __pyx_t_1) < 0) __PYX_ERR(3, 4726, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4761 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SUB( np.ndarray real0 not None , np.ndarray real1 not None ): # <<<<<<<<<<<<<< + * """ SUB(real0, real1) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_643stream_SUB, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_SUB, __pyx_t_1) < 0) __PYX_ERR(3, 4761, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4792 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_SUM( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ SUM(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_645stream_SUM, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4792, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_SUM, __pyx_t_1) < 0) __PYX_ERR(3, 4792, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4821 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_T3( np.ndarray real not None , int timeperiod=-2**31 , double vfactor=-4e37 ): # <<<<<<<<<<<<<< + * """ T3(real[, timeperiod=?, vfactor=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_647stream_T3, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_T3, __pyx_t_1) < 0) __PYX_ERR(3, 4821, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4851 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TAN( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TAN(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_649stream_TAN, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4851, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_TAN, __pyx_t_1) < 0) __PYX_ERR(3, 4851, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4878 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TANH( np.ndarray real not None ): # <<<<<<<<<<<<<< + * """ TANH(real) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_651stream_TANH, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_TANH, __pyx_t_1) < 0) __PYX_ERR(3, 4878, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4905 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TEMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TEMA(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_653stream_TEMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_TEMA, __pyx_t_1) < 0) __PYX_ERR(3, 4905, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4934 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRANGE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TRANGE(high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_655stream_TRANGE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_TRANGE, __pyx_t_1) < 0) __PYX_ERR(3, 4934, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4967 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRIMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIMA(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_657stream_TRIMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_TRIMA, __pyx_t_1) < 0) __PYX_ERR(3, 4967, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":4996 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TRIX( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TRIX(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_659stream_TRIX, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 4996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_TRIX, __pyx_t_1) < 0) __PYX_ERR(3, 4996, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5025 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TSF( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ TSF(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_661stream_TSF, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5025, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_TSF, __pyx_t_1) < 0) __PYX_ERR(3, 5025, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5054 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_TYPPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ TYPPRICE(high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_663stream_TYPPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5054, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_TYPPRICE, __pyx_t_1) < 0) __PYX_ERR(3, 5054, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5087 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_ULTOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod1=-2**31 , int timeperiod2=-2**31 , int timeperiod3=-2**31 ): # <<<<<<<<<<<<<< + * """ ULTOSC(high, low, close[, timeperiod1=?, timeperiod2=?, timeperiod3=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_665stream_ULTOSC, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5087, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_ULTOSC, __pyx_t_1) < 0) __PYX_ERR(3, 5087, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5124 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_VAR( np.ndarray real not None , int timeperiod=-2**31 , double nbdev=-4e37 ): # <<<<<<<<<<<<<< + * """ VAR(real[, timeperiod=?, nbdev=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_667stream_VAR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_VAR, __pyx_t_1) < 0) __PYX_ERR(3, 5124, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5154 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WCLPRICE( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ): # <<<<<<<<<<<<<< + * """ WCLPRICE(high, low, close) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_669stream_WCLPRICE, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_WCLPRICE, __pyx_t_1) < 0) __PYX_ERR(3, 5154, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5187 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WILLR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WILLR(high, low, close[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_671stream_WILLR, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_WILLR, __pyx_t_1) < 0) __PYX_ERR(3, 5187, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_stream.pxi":5222 + * @wraparound(False) # turn off relative indexing from end of lists + * @boundscheck(False) # turn off bounds-checking for entire function + * def stream_WMA( np.ndarray real not None , int timeperiod=-2**31 ): # <<<<<<<<<<<<<< + * """ WMA(real[, timeperiod=?]) + * + */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5talib_7_ta_lib_673stream_WMA, NULL, __pyx_n_s_talib__ta_lib); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 5222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_stream_WMA, __pyx_t_1) < 0) __PYX_ERR(3, 5222, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* "talib/_ta_lib.pyx":6 + * include "_stream.pxi" + * + * __all__ = __TA_FUNCTION_NAMES__ + ["stream_%s" % name for name in __TA_FUNCTION_NAMES__] # <<<<<<<<<<<<<< + */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_TA_FUNCTION_NAMES); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 6, __pyx_L1_error) @@ -72349,11 +111463,23 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_t_16) < 0) __PYX_ERR(5, 6, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* "talib/_ta_lib.pyx":1 + * include "_common.pxi" # <<<<<<<<<<<<<< + * include "_func.pxi" + * include "_abstract.pxi" + */ __pyx_t_16 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_16) < 0) __PYX_ERR(5, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + /* ".eggs/numpy-1.22.3-py3.10-linux-aarch64.egg/numpy/__init__.pxd":1014 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ /*--- Wrapped vars code ---*/ @@ -74379,7 +113505,7 @@ static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int eq return (equals == Py_EQ); } else { int result; -#if CYTHON_USE_UNICODE_INTERNALS +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) Py_hash_t hash1, hash2; hash1 = ((PyBytesObject*)s1)->ob_shash; hash2 = ((PyBytesObject*)s2)->ob_shash; @@ -75235,6 +114361,9 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P self = PyTuple_GetItem(args, 0); if (unlikely(!self)) { Py_DECREF(new_args); + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); return NULL; } result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); @@ -75303,13 +114432,13 @@ static PyTypeObject __pyx_CyFunctionType_type = { #if PY_VERSION_HEX >= 0x030400a1 0, #endif -#if PY_VERSION_HEX >= 0x030800b1 +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, #endif #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 0, #endif -#if PY_VERSION_HEX >= 0x030B00A2 +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 0, #endif }; @@ -75662,6 +114791,12 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { #include "compile.h" #include "frameobject.h" #include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { @@ -75725,14 +114860,24 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line, PyCodeObject *py_code = 0; PyFrameObject *py_frame = 0; PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; if (c_line) { c_line = __Pyx_CLineForTraceback(tstate, c_line); } py_code = __pyx_find_code_object(c_line ? -c_line : py_line); if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); - if (!py_code) goto bad; + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); } py_frame = PyFrame_New( @@ -78053,11 +117198,33 @@ static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObj /* CheckBinaryVersion */ static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char ctversion[5]; + int same=1, i, found_dot; + const char* rt_from_call = Py_GetVersion(); + PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + found_dot = 0; + for (i = 0; i < 4; i++) { + if (!ctversion[i]) { + same = (rt_from_call[i] < '0' || rt_from_call[i] > '9'); + break; + } + if (rt_from_call[i] != ctversion[i]) { + same = 0; + break; + } + } + if (!same) { + char rtversion[5] = {'\0'}; char message[200]; + for (i=0; i<4; ++i) { + if (rt_from_call[i] == '.') { + if (found_dot) break; + found_dot = 1; + } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') { + break; + } + rtversion[i] = rt_from_call[i]; + } PyOS_snprintf(message, sizeof(message), "compiletime version %s of module '%.100s' " "does not match runtime version %s", diff --git a/talib/_ta_lib.pxd b/talib/_ta_lib.pxd index 7790ae6b0..9c41fdbbf 100644 --- a/talib/_ta_lib.pxd +++ b/talib/_ta_lib.pxd @@ -1,6 +1,6 @@ #cython: language_level=2 -cdef extern from "ta-lib/ta_defs.h": +cdef extern from "ta_defs.h": ctypedef int TA_RetCode TA_RetCode TA_SUCCESS = 0 @@ -84,7 +84,7 @@ cdef extern from "ta-lib/ta_defs.h": TA_CandleSettingType TA_Equal = 10 TA_CandleSettingType TA_AllCandleSettings = 11 -cdef extern from "ta-lib/ta_common.h": +cdef extern from "ta_common.h": const char *TA_GetVersionString() const char *TA_GetVersionMajor() const char *TA_GetVersionMinor() @@ -109,7 +109,7 @@ cdef extern from "ta-lib/ta_common.h": TA_RetCode TA_Initialize() TA_RetCode TA_Shutdown() -cdef extern from "ta-lib/ta_abstract.h": +cdef extern from "ta_abstract.h": TA_RetCode TA_GroupTableAlloc(TA_StringTable **table) TA_RetCode TA_GroupTableFree(TA_StringTable *table) @@ -192,7 +192,7 @@ cdef extern from "ta-lib/ta_abstract.h": char* TA_FunctionDescriptionXML() -cdef extern from "ta-lib/ta_func.h": +cdef extern from "ta_func.h": TA_RetCode TA_ACOS(int startIdx, int endIdx, const double inReal[], int *outBegIdx, int *outNBElement, double outReal[]) int TA_ACOS_Lookback() TA_RetCode TA_AD(int startIdx, int endIdx, const double inHigh[], const double inLow[], const double inClose[], const double inVolume[], int *outBegIdx, int *outNBElement, double outReal[]) From 47d7508a162ca8400bbc9ab5da2a6b88415e6a78 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 14:53:46 -0400 Subject: [PATCH 11/22] Use requirements_tests.txt for all test reqs --- .github/workflows/tests.yml | 3 +-- requirements_test.txt | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f5d487706..1c1b9bfa8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -23,8 +23,7 @@ jobs: python -m pip install --upgrade pip wheel python -m pip install -r requirements.txt python -m pip install -r requirements_test.txt - pip install flake8 pytest polars - - name: Build cython modules in-place + - name: Installing Python TA-Lib run: | python setup.py install - name: Lint with flake8 diff --git a/requirements_test.txt b/requirements_test.txt index dee812302..56694ebd2 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,3 +1,5 @@ -r requirements.txt pandas pytest +polars +flake8 From ecc0369c8b5a58052820c554a70d3154cba31439 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 14:54:13 -0400 Subject: [PATCH 12/22] Always use absolute imports for _ta_lib, which works properly on all platforms. --- talib/__init__.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/talib/__init__.py b/talib/__init__.py index aa92b399e..14e7e63b7 100644 --- a/talib/__init__.py +++ b/talib/__init__.py @@ -90,7 +90,7 @@ def wrapper(*args, **kwds): _wrapper = lambda x: x -from ._ta_lib import ( +from talib._ta_lib import ( _ta_initialize, _ta_shutdown, MA_Type, __ta_version__, _ta_set_unstable_period as set_unstable_period, _ta_get_unstable_period as get_unstable_period, @@ -100,10 +100,15 @@ def wrapper(*args, **kwds): ) # import all the func and stream functions -from ._ta_lib import * +from talib._ta_lib import * # wrap them for polars or pandas support -func = __import__("_ta_lib", globals(), locals(), __TA_FUNCTION_NAMES__, level=1) +func = __import__( + "talib._ta_lib", + globals(), locals(), + __TA_FUNCTION_NAMES__, + level=1 +) for func_name in __TA_FUNCTION_NAMES__: wrapped_func = _wrapper(getattr(func, func_name)) setattr(func, func_name, wrapped_func) From 38d75b8390a1b91521c757f41c7c9fefa08b7c2f Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 15:39:23 -0400 Subject: [PATCH 13/22] Revert "Always use absolute imports for _ta_lib, which works properly on all platforms." This reverts commit ecc0369c8b5a58052820c554a70d3154cba31439. --- talib/__init__.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/talib/__init__.py b/talib/__init__.py index 14e7e63b7..aa92b399e 100644 --- a/talib/__init__.py +++ b/talib/__init__.py @@ -90,7 +90,7 @@ def wrapper(*args, **kwds): _wrapper = lambda x: x -from talib._ta_lib import ( +from ._ta_lib import ( _ta_initialize, _ta_shutdown, MA_Type, __ta_version__, _ta_set_unstable_period as set_unstable_period, _ta_get_unstable_period as get_unstable_period, @@ -100,15 +100,10 @@ def wrapper(*args, **kwds): ) # import all the func and stream functions -from talib._ta_lib import * +from ._ta_lib import * # wrap them for polars or pandas support -func = __import__( - "talib._ta_lib", - globals(), locals(), - __TA_FUNCTION_NAMES__, - level=1 -) +func = __import__("_ta_lib", globals(), locals(), __TA_FUNCTION_NAMES__, level=1) for func_name in __TA_FUNCTION_NAMES__: wrapped_func = _wrapper(getattr(func, func_name)) setattr(func, func_name, wrapped_func) From c4e94bd7a2ec7d4321a721798cc1fca9aaae0f82 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 16:18:41 -0400 Subject: [PATCH 14/22] Trying to work around pip oddity --- .github/workflows/release.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5e73bb60b..3533f473f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,8 +13,6 @@ env: CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" CIBW_ARCHS_MACOS: "x86_64 arm64" CIBW_BEFORE_BUILD: "pip install -r requirements_dev.txt" - # Polars is needed for the test suite, and Polars currently is only building - # binary packages for py3.6. So, we have to install rust before every build. jobs: # Build & test simple source release before wasting hours building and @@ -32,10 +30,10 @@ jobs: - name: Installing python build dependencies run: | - python -m pip install --upgrade pip wheel - python -m pip install -r requirements.txt - python -m pip install -r requirements_test.txt - pip install flake8 pytest + pip install --upgrade pip wheel + pip install -r requirements.txt + pip install -r requirements_test.txt + pip install flake8 pytest polars - name: Building source distribution run: | From 7680320934f43af1510e6e9f5fd8564ca189aec7 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Wed, 18 May 2022 16:29:49 -0400 Subject: [PATCH 15/22] Do _not_ install polars which is 64bit only.. --- .github/workflows/release.yml | 3 --- requirements_test.txt | 1 - 2 files changed, 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3533f473f..d1782679a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,9 +31,6 @@ jobs: - name: Installing python build dependencies run: | pip install --upgrade pip wheel - pip install -r requirements.txt - pip install -r requirements_test.txt - pip install flake8 pytest polars - name: Building source distribution run: | diff --git a/requirements_test.txt b/requirements_test.txt index 56694ebd2..99cdf3df9 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,5 +1,4 @@ -r requirements.txt pandas pytest -polars flake8 From 34331c1914b016aa373cd0891a0c2f1032555333 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Thu, 19 May 2022 16:21:46 -0400 Subject: [PATCH 16/22] Only test on >= py3.7, which is the oldest version still supported. Limit numpy and pandas to the last version to support python3.7. --- .github/workflows/tests.yml | 2 +- requirements.txt | 2 +- requirements_test.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1c1b9bfa8..933ae3329 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] + python-version: ["3.7", "3.8", "3.9", "3.10"] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} diff --git a/requirements.txt b/requirements.txt index 70bf4e3ba..cfaed5af0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -numpy +numpy<=1.21 Cython diff --git a/requirements_test.txt b/requirements_test.txt index 99cdf3df9..6a8206003 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,4 +1,4 @@ -r requirements.txt -pandas +pandas<=1.3 pytest flake8 From 0e232588295025b927a819c13f82365bc258dee2 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Thu, 19 May 2022 16:42:22 -0400 Subject: [PATCH 17/22] Try splitting up our builds into more parallel tasks. --- .github/workflows/release.yml | 55 ++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d1782679a..6509cbe4f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,13 +7,6 @@ on: name: Creating release -env: - CIBW_BEFORE_TEST: "pip install -r requirements_test.txt" - CIBW_TEST_COMMAND: "pytest {project}/tests" - CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" - CIBW_ARCHS_MACOS: "x86_64 arm64" - CIBW_BEFORE_BUILD: "pip install -r requirements_dev.txt" - jobs: # Build & test simple source release before wasting hours building and # testing the binary build matrix. @@ -40,8 +33,8 @@ jobs: with: path: dist/*.tar.gz + # Build the wheels which do not require host emulation. build_wheels: - needs: [sdist] name: "[${{ strategy.job-index }}/${{ strategy.job-total }}] py${{ matrix.py }} on ${{ matrix.os }}" runs-on: ${{ matrix.os }} strategy: @@ -51,23 +44,45 @@ jobs: py: ["cp37", "cp38", "cp39", "cp310"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - name: Setting up Python - with: - python-version: '3.8' + - name: Building binary wheels + uses: pypa/cibuildwheel@v2.4.0 + env: + CIBW_BUILD: "${{ matrix.py }}-*" + CIBW_ARCHS_LINUX: auto + CIBW_ARCHS_MACOS: auto universal2 + CIBW_ARCHS_WINDOWS: auto + CIBW_BEFORE_BUILD: "pip install -r requirements_dev.txt" + CIBW_BEFORE_TEST: "pip install -r requirements_test.txt" + CIBW_TEST_COMMAND: "pytest" + # Can't test cross-compiled Mac OS builds. + CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" + + - uses: actions/upload-artifact@v2 + with: + path: ./wheelhouse/*.whl - - name: Set up QEMU - if: runner.os == 'Linux' + # Build the wheels which require host emulation. + build_emulated_wheels: + name: "[${{ strategy.job-index }}/${{ strategy.job-total }}] py${{ matrix.py }} (${{ matrix.arch }})" + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + py: ["cp37", "cp38", "cp39", "cp310"] + arch: [aarch64, ppc64le] + + steps: + - uses: actions/checkout@v2 + + - name: Setting up Qemu for host emulation uses: docker/setup-qemu-action@v1 - with: - platforms: all - - name: Build & test wheels - uses: pypa/cibuildwheel@v2.2.2 + - name: Building binary wheels + uses: pypa/cibuildwheel@v2.4.0 env: - CIBW_ARCHS_LINUX: auto aarch64 ppc64le + CIBW_ARCHS: "${{ matrix.arch }}" CIBW_BUILD: "${{ matrix.py }}-*" - uses: actions/upload-artifact@v2 From 8c2ce0b40146f20e5bf9b5da478797ca7d2c4723 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Thu, 19 May 2022 17:10:08 -0400 Subject: [PATCH 18/22] Avoid py3.7 on Mac OS 11. --- .github/workflows/release.yml | 25 ++++++++++++------------- README.md | 19 +++++++++++++++++++ requirements.txt | 2 +- requirements_test.txt | 2 +- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6509cbe4f..2e7ade938 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,27 +37,26 @@ jobs: build_wheels: name: "[${{ strategy.job-index }}/${{ strategy.job-total }}] py${{ matrix.py }} on ${{ matrix.os }}" runs-on: ${{ matrix.os }} + env: + CIBW_BUILD: "${{ matrix.py }}-*" + CIBW_ARCHS_LINUX: auto + CIBW_ARCHS_MACOS: auto universal2 + CIBW_ARCHS_WINDOWS: auto + CIBW_BEFORE_TEST: "pip install pytest flake8" + CIBW_TEST_COMMAND: "pytest {project}/tests" + # Can't test cross-compiled Mac OS builds. + CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" strategy: fail-fast: false matrix: - os: [ubuntu-20.04, windows-2019, macos-10.15] - py: ["cp37", "cp38", "cp39", "cp310"] + os: [ubuntu-20.04, windows-2019, macos-11] + py: ["cp38", "cp39", "cp310"] steps: - uses: actions/checkout@v2 - name: Building binary wheels uses: pypa/cibuildwheel@v2.4.0 - env: - CIBW_BUILD: "${{ matrix.py }}-*" - CIBW_ARCHS_LINUX: auto - CIBW_ARCHS_MACOS: auto universal2 - CIBW_ARCHS_WINDOWS: auto - CIBW_BEFORE_BUILD: "pip install -r requirements_dev.txt" - CIBW_BEFORE_TEST: "pip install -r requirements_test.txt" - CIBW_TEST_COMMAND: "pytest" - # Can't test cross-compiled Mac OS builds. - CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" - uses: actions/upload-artifact@v2 with: @@ -70,7 +69,7 @@ jobs: strategy: fail-fast: false matrix: - py: ["cp37", "cp38", "cp39", "cp310"] + py: ["cp38", "cp39", "cp310"] arch: [aarch64, ppc64le] steps: diff --git a/README.md b/README.md index 33a9b84bc..95203adb7 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,25 @@ Unofficial packages are available on $ conda install -c conda-forge ta-lib ``` +Binary packages are provided for the following setups. Older version of Python +and other architectures may be supported, but will require a C compiler when +installing: + +| | Python 3.8 | Python 3.9 | Python 3.10 | +|---------------------|------------|------------|-------------| +| Linux (x86) | ✓ | ✓ | ✓ | +| Linux (x86_64) | ✓ | ✓ | ✓ | +| Linux (aarch64) | ✓ | ✓ | ✓ | +| Linux (ppc64le) | ✓ | ✓ | ✓ | +| Mac OS (x86_64) | ✓ | ✓ | ✓ | +| Mac OS (M1/aarch64) | ✓ | ✓ | ✓ | +| Windows (x86) | ✓ | ✓ | ✓ | +| Windows (x86_64) | ✓ | ✓ | ✓ | + +Support is primarily limited by what versions of Python are supported by recent +versions of numpy. When building locally, make sure you're using a version of +numpy that supports your Python version. + ## Function API Similar to TA-Lib, the Function API provides a lightweight wrapper of the diff --git a/requirements.txt b/requirements.txt index cfaed5af0..70bf4e3ba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -numpy<=1.21 +numpy Cython diff --git a/requirements_test.txt b/requirements_test.txt index 6a8206003..99cdf3df9 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,4 +1,4 @@ -r requirements.txt -pandas<=1.3 +pandas pytest flake8 From 6edebec28adafbe7ab26becc8914796d5f7de36d Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Thu, 19 May 2022 22:24:39 -0400 Subject: [PATCH 19/22] Forgot we needed pandas for the native tests. --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2e7ade938..b91884efd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,7 +42,7 @@ jobs: CIBW_ARCHS_LINUX: auto CIBW_ARCHS_MACOS: auto universal2 CIBW_ARCHS_WINDOWS: auto - CIBW_BEFORE_TEST: "pip install pytest flake8" + CIBW_BEFORE_TEST: "pip install pytest flake8 pandas" CIBW_TEST_COMMAND: "pytest {project}/tests" # Can't test cross-compiled Mac OS builds. CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64" From c6ba7e8b738da509b531eb0e374e6a59d8818bf7 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Fri, 20 May 2022 03:05:40 -0400 Subject: [PATCH 20/22] Forgot we needed pandas for the native tests. --- .github/workflows/release.yml | 12 +++++++++--- README.md | 1 - 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b91884efd..6cf51645c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,13 +35,16 @@ jobs: # Build the wheels which do not require host emulation. build_wheels: - name: "[${{ strategy.job-index }}/${{ strategy.job-total }}] py${{ matrix.py }} on ${{ matrix.os }}" + name: "🏗 py${{ matrix.py }} on ${{ matrix.os }}" runs-on: ${{ matrix.os }} env: CIBW_BUILD: "${{ matrix.py }}-*" CIBW_ARCHS_LINUX: auto CIBW_ARCHS_MACOS: auto universal2 CIBW_ARCHS_WINDOWS: auto + # Ensure numpy is installed first to get around a bug with setuptools + # which causes conflicts when installing eggs. + CIBW_BEFORE_BUILD: "pip install numpy" CIBW_BEFORE_TEST: "pip install pytest flake8 pandas" CIBW_TEST_COMMAND: "pytest {project}/tests" # Can't test cross-compiled Mac OS builds. @@ -64,13 +67,16 @@ jobs: # Build the wheels which require host emulation. build_emulated_wheels: - name: "[${{ strategy.job-index }}/${{ strategy.job-total }}] py${{ matrix.py }} (${{ matrix.arch }})" + name: "🏗 py${{ matrix.py }} (${{ matrix.arch }})" runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: py: ["cp38", "cp39", "cp310"] - arch: [aarch64, ppc64le] + arch: [aarch64] + # ppc64le compilation works, but is unbelievably slow. + # We're talking half a day. Ice this until it can be improved. + # arch: [aarch64, ppc64le] steps: - uses: actions/checkout@v2 diff --git a/README.md b/README.md index 95203adb7..af16a4f33 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,6 @@ installing: | Linux (x86) | ✓ | ✓ | ✓ | | Linux (x86_64) | ✓ | ✓ | ✓ | | Linux (aarch64) | ✓ | ✓ | ✓ | -| Linux (ppc64le) | ✓ | ✓ | ✓ | | Mac OS (x86_64) | ✓ | ✓ | ✓ | | Mac OS (M1/aarch64) | ✓ | ✓ | ✓ | | Windows (x86) | ✓ | ✓ | ✓ | From 5f71b1cbd54d2959cbfbb4f431ad0767a1c93dfa Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Fri, 20 May 2022 03:09:33 -0400 Subject: [PATCH 21/22] Try to fix normal tests. --- .github/workflows/tests.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 933ae3329..58609bf25 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,26 +10,32 @@ jobs: build: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: python-version: ["3.7", "3.8", "3.9", "3.10"] steps: - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} + - name: Install dependencies run: | python -m pip install --upgrade pip wheel python -m pip install -r requirements.txt python -m pip install -r requirements_test.txt + - name: Installing Python TA-Lib run: | python setup.py install + - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + - name: Test with pytest run: | - PYTHONPATH=. pytest + python -m pytest tests From 4ebe86ee2e8c215484ceb1175feb8fe106d14983 Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Fri, 20 May 2022 06:18:49 -0400 Subject: [PATCH 22/22] Try to fix normal tests. --- .github/workflows/release.yml | 57 ++++++++++++++++++----------------- .github/workflows/tests.yml | 9 ++---- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6cf51645c..4c429dc01 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,7 +11,7 @@ jobs: # Build & test simple source release before wasting hours building and # testing the binary build matrix. sdist: - name: Creating source release + name: "🏗 Creating source release" runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -42,6 +42,8 @@ jobs: CIBW_ARCHS_LINUX: auto CIBW_ARCHS_MACOS: auto universal2 CIBW_ARCHS_WINDOWS: auto + # musllinux builds, but is unstable, see https://github.com/numpy/numpy/pull/21200 + CIBW_SKIP: "*-musllinux_*" # Ensure numpy is installed first to get around a bug with setuptools # which causes conflicts when installing eggs. CIBW_BEFORE_BUILD: "pip install numpy" @@ -66,30 +68,29 @@ jobs: path: ./wheelhouse/*.whl # Build the wheels which require host emulation. - build_emulated_wheels: - name: "🏗 py${{ matrix.py }} (${{ matrix.arch }})" - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - py: ["cp38", "cp39", "cp310"] - arch: [aarch64] - # ppc64le compilation works, but is unbelievably slow. - # We're talking half a day. Ice this until it can be improved. - # arch: [aarch64, ppc64le] - - steps: - - uses: actions/checkout@v2 - - - name: Setting up Qemu for host emulation - uses: docker/setup-qemu-action@v1 - - - name: Building binary wheels - uses: pypa/cibuildwheel@v2.4.0 - env: - CIBW_ARCHS: "${{ matrix.arch }}" - CIBW_BUILD: "${{ matrix.py }}-*" - - - uses: actions/upload-artifact@v2 - with: - path: ./wheelhouse/*.whl + # ppc64le compilation works, but is unbelievably slow. + # We're talking half a day. Ice this until it can be improved. + # build_emulated_wheels: + # name: "🏗 py${{ matrix.py }} (${{ matrix.arch }})" + # runs-on: ubuntu-20.04 + # strategy: + # fail-fast: false + # matrix: + # py: ["cp38", "cp39", "cp310"] + # arch: [aarch64, ppc64le] + + # steps: + # - uses: actions/checkout@v2 + + # - name: Setting up Qemu for host emulation + # uses: docker/setup-qemu-action@v1 + + # - name: Building binary wheels + # uses: pypa/cibuildwheel@v2.4.0 + # env: + # CIBW_ARCHS: "${{ matrix.arch }}" + # CIBW_BUILD: "${{ matrix.py }}-*" + + # - uses: actions/upload-artifact@v2 + # with: + # path: ./wheelhouse/*.whl diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 58609bf25..1bef8d7b3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -2,9 +2,7 @@ name: Tests on: push: - branches: [ master ] pull_request: - branches: [ master ] jobs: build: @@ -12,7 +10,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7", "3.8", "3.9", "3.10"] + python-version: ["3.8", "3.9", "3.10"] steps: - uses: actions/checkout@v2 @@ -23,9 +21,8 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip wheel - python -m pip install -r requirements.txt - python -m pip install -r requirements_test.txt + pip install --upgrade pip wheel + pip install numpy flake8 pytest pandas polars - name: Installing Python TA-Lib run: |